이것이 요청 된 이래 시간이 지났지 만 고아 질문이 싫어 :)
먼저 최신 x86 플랫폼을 지나치게 단순화하고 0x00000000에서 0xFFFFFFFF까지 32 비트의 주소 공간이 있다고 가정 해 봅시다. 모든 특수 / 예약 영역, TOLUD (사용 가능한 DRAM의 상단, 인텔 용어) 구멍 등은 모두 무시합니다 . 이 시스템 메모리 맵이라고 합니다.
둘째, PCI Express는 PCI를 확장 합니다. 소프트웨어의 관점에서 보면 매우 유사합니다.
먼저 세 번째 구성 공간으로 이동 합니다. 구성 공간을 가리키는 모든 주소는 시스템 메모리 맵 에서 할당 됩니다 . PCI 장치는 256 바이트 구성 공간을 가졌으며 PCI Express의 경우 4KB로 확장되었습니다. 이 4KB 공간은 시스템 메모리 맵에서 메모리 주소 를 사용하지만 실제 값 / 비트 / 내용은 일반적으로 주변 장치의 레지스터에 구현됩니다. 예를 들어, 공급 업체 ID 또는 장치 ID를 읽으면 사용중인 메모리 주소가 시스템 메모리 맵에 있더라도 대상 주변 장치가 데이터를 반환합니다.
당신은 이것들이 "RAM에 할당된다"고 말하였습니다. 사실이 아닙니다. 실제 비트 / 상태 저장 요소는 주변 장치에 있습니다. 그러나 이들은 시스템 메모리 맵에 맵핑됩니다. 다음으로, 모든 PCIe 장치에서 공통 레지스터 세트인지 여부를 물었습니다 (예 및 아니오). PCI 구성 공간이 작동하는 방식에 따라, 각 섹션 끝에는 읽을 "더 많은 것들"이 있는지를 나타내는 포인터가 있습니다. 모든 PCIe 장치가 구현해야하는 최소한의 수준이 있으며 고급 장치는 더 많은 기능을 구현할 수 있습니다. 기능적 운영에 얼마나 유용한 지에 관해서는, 그것은 필수적 이며 많이 활용됩니다. :)
이제 BAR (기본 주소 레지스터)에 대한 귀하의 질문은 메모리 공간과 I / O 공간에 적합합니다. 다소 x86 중심이기 때문에이 사양은 유형뿐 아니라 BAR 크기도 지정할 수 있습니다. 이를 통해 장치는 일반 메모리 매핑 BAR 또는 IO 공간 BAR을 요청할 수 있습니다.이 공간은 x86 시스템에있는 4K의 I / O 공간을 차지합니다. PowerPC 시스템에서 I / O 공간 BAR은 가치가 없음을 알 수 있습니다.
BAR은 기본적으로 호스트에게 필요한 메모리 양과 유형 (위에서 논의)을 알려주는 장치의 방법입니다. 1MB의 메모리 매핑 공간을 요청하면 BIOS에서 0x10000000 주소를 0x10100000에 할당 할 수 있습니다. 이것은 실제 RAM을 소비 하지 않고 단지 공간 만 처리합니다 (이제 32 비트 시스템이 RAM이 GB 인 고급 GPU와 같은 확장 카드에 문제가 발생하는 이유는 무엇입니까?). 이제 0x10000004라고하는 메모리 쓰기 / 읽기가 PCI Express 장치로 전송되며 이는 LED에 연결되는 바이트 전체 레지스터 일 수 있습니다. 따라서 0xFF를 실제 메모리 주소 0x10000004에 쓰면 8 개의 LED가 켜집니다. 이것이 메모리 매핑 된 I / O 의 기본 전제입니다 .
I / O 공간 은 별도의 메모리 공간 인 x86 I / O 공간에서 작동한다는 점을 제외하고 비슷하게 작동합니다. 주소 0x3F8 (COM1)은 I / O 공간과 메모리 공간에 모두 존재하며 서로 다른 두 가지입니다.
마지막 질문, 메시지 는 새로운 유형의 인터럽트 메커니즘, 메시지 신호 인터럽트 또는 MSI를 짧게 나타냅니다. 레거시 PCI 장치에는 4 개의 인터럽트 핀, INTA, INTB, INTC, INTD가 있습니다. INTA는 슬롯 0에서 INTA, 슬롯 1에서 INTB, 슬롯 2에서 INTC, 슬롯 3에서 INTD, 슬롯 4에서 INTA로 다시 돌아가도록 슬롯 사이에서 일반적으로 스위 즐되었습니다. INTA 만 구현하고 그것을 스위 즐링하여 3 개의 장치를 말하면 각 장치는 인터럽트 컨트롤러에 대한 자체 인터럽트 신호로 끝납니다. MSI는 단순히 PCI Express 프로토콜 계층을 사용하여 인터럽트 신호를 보내는 방법이며 PCIe 루트 컴플렉스 (호스트)가 CPU 인터럽트를 처리합니다.
이 답변은 너무 늦어서 도움이되지 않을 수도 있지만 향후 Google 직원 / Binger에게 도움이 될 수 있습니다.
마지막으로, 인텔에서이 책을 읽고 더 나아 가기 전에 PCIe에 대해 자세하고 상세하게 소개하는 것이 좋습니다. 또 다른 참조는 LWN의 온라인 전자 책인 Linux Device Drivers 입니다.