저는 Linux 시스템(32비트, 4GB RAM)에서 작업 중인데 Linux의 메모리 주소 지정에 대해 일부 상충되는 정보를 발견했습니다.
내가 이렇게 말하는 것이 옳습니까?
가상 메모리만이 커널 공간과 사용자 공간을 구분합니다. 32비트 시스템에서 가상 메모리 크기는 4GB입니다. 사용자 공간은 3GB, 커널 공간은 1GB입니다.
하지만 물리적 메모리 주소나 위치를 알 수 없는 주소도 있습니다. - 참조ZONE_NORMAL 및 커널/사용자 페이지와의 연관성은 무엇입니까?.
이 홈 페이지에서물리적 메모리도 커널 공간과 사용자 공간에 차이가 있다고 설명해주시죠?
PCIe를 사용하고 있는데 BAR이 물리적 주소를 갖는 것이 어떻게 가능한지 궁금합니다.
이는 PCIe 장치용으로 예약된 공간이 있음을 의미합니다. 이 공간은 어디에 있습니까?
물리적 메모리에는 특별한 구조가 있습니까? 참고자료를 찾았습니다여기, 도 16의 구조가 도시될 수 있다.
이 BAR 주소를 가상 주소로 변환하고 있는데 어떻게 가능할까요?
또한 일부 참조에서는 모든 프로세스가 모든 가상 주소를 사용할 수 있다고 말합니다. 그렇죠? 그렇다면 이 사실을 위의 사실과 어떻게 결합합니까?
답변1
둘 다사용자그리고핵심Linux의 가상 메모리는 실제 메모리에 매핑됩니다.
사용자 또는 커널 가상 공간에서 매핑되지 않은 물리적 메모리가 할당될 수 있습니다. 예를 들어 가상->물리적 페이지 테이블을 매핑합니다.
BIOS는 운영 체제에서 사용할 수 없는 물리적 메모리를 통해 부팅 시 사용 가능한 메모리 매핑을 제공할 수 있습니다.
PCI기본 주소 레지스터참조 메모리는 PCI(e) 장치의 주소 지정 가능한 메모리 범위에 대한 라우팅을 제공합니다. 어떤 의미에서 이는 물리적 메모리에서 이러한 주소 지정 가능한 메모리 범위를 훔칩니다. 4GB RAM을 갖춘 32비트 시스템에서 이구멍을 뚫다물리적 RAM에서 주소 지정 가능한 전체 공간은 주소 지정 가능한 물리적 RAM이기도 합니다. 시스템 악용PAE"분실된" RAM을 활용하기 위해 상황을 재정렬할 수 있습니다.
일부 장치에는 온보드 GPU와 같은 시스템 메모리에 메모리가 매핑되어 있을 수 있습니다. 그들은 PCIe를 활용합니다산길연속된 MMIO 주소 세트를 물리적 RAM에 매핑합니다. BIOS는 이러한 범위를 운영 체제에서 사용할 수 없는 메모리로 표시합니다.