32 비트 주소 공간은 4GB의 주소를위한 공간이 있음을 의미합니다. 이상적으로 커널은 모든 물리적 메모리, 현재 작업의 모든 메모리 및 모든 자체 메모리를 매핑 할 수 있기를 원합니다. 실제 메모리만으로 사용 가능한 4GB를 모두 차지하면 작동하지 않습니다. 따라서 실제 메모리는 항상 매핑되는 낮은 메모리와 사용 중일 때 매핑해야하는 높은 메모리로 나뉩니다. 패치 된 커널을 실행하지 않는 한 ix86 아키텍처에서 128MB의 주소 공간은 커널 코드 및 데이터 구조에 사용되며 896MB는 실제 메모리 매핑에 사용됩니다 (총 1GB).
주소 공간이 전체 메모리보다 편안하게 크지 않은 경우 메모리 관리의 복잡성에 대한 배경 지식 :
커널 로그에서 발췌 :
BIOS-provided physical RAM map:
BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 00000000cdce0000 (usable)
BIOS-e820: 00000000cdce0000 - 00000000cdce3000 (ACPI NVS)
BIOS-e820: 00000000cdce3000 - 00000000cdcf0000 (ACPI data)
BIOS-e820: 00000000cdcf0000 - 00000000cdd00000 (reserved)
BIOS-e820: 00000000d0000000 - 00000000e0000000 (reserved)
BIOS-e820: 00000000fec00000 - 0000000100000000 (reserved)
BIOS-e820: 0000000100000000 - 0000000130000000 (usable)
2404MB HIGHMEM available.
887MB LOWMEM available.
Zone PFN ranges:
DMA 0x00000000 -> 0x00001000
Normal 0x00001000 -> 0x000377fe
HighMem 0x000377fe -> 0x000cdce0
여기에는 887MB의 낮은 메모리가 있습니다. 이론상 최대 896MB에서 몇 MB의 DMA 버퍼 (하드웨어 장치와 통신하는 데 사용되는 메모리 영역)를 뺀 값입니다.
실제 메모리 중 3328MB는 4GB 미만의 주소에 매핑되고 768MB는 4GB 이상의 주소 (0x100000000–0x130000000 범위)에 매핑됩니다. 이 768MB에 액세스 할 수 없습니다. 3242MB 만 사용할 수있는 이유를 설명합니다 (4096MB의 RAM에서 768MB, 액세스 할 수없는-9MB의 DMA 버퍼에서 75MB를 빼고 코드 및 데이터에 커널 자체에서 사용). 왜 BIOS가 4GB를 초과하는 RAM을 매핑하는지 모르겠지만 데이터 포인트로 RAM이 0x100000000–0x130000000에 매핑 된 4GB RAM을 가진 PC에서 이것을 게시하고 있습니다.
물리적 메모리를 4GB 이상으로 매핑하려면 PAE를 사용해야합니다 . PAE는 작은 성능 오버 헤드 (특히 메모리 관리자에서 더 큰 데이터 구조가 필요함)가 발생하므로 시스템 적으로 활성화되지 않습니다. 기본 우분투 커널은 PAE 지원없이 컴파일됩니다. 가져 오기 -generic-pae
커널이 RAM의 최대 64GB에 액세스 할 수 있도록.
TL, DR : Linux가 예상대로 작동합니다. 펌웨어는 그다지 도움이되지 않습니다. PAE 가능 커널을 가져옵니다.