분명히 4.0GiB가 있는데 시스템에 3.2GiB RAM만 표시되는 이유는 무엇입니까?

분명히 4.0GiB가 있는데 시스템에 3.2GiB RAM만 표시되는 이유는 무엇입니까?

2x2 GiB 메모리 스틱을 설치했습니다. grub 부팅 메뉴에서 실행하면
이를 확인했습니다. memtest86에서는 오류가 보고되지 않았습니다.memtest86

그러나 실행 중인 Ubuntu 10.04 시스템에서 사용 가능한 메모리를 어떻게 확인하더라도 약 3.2GiB만 보고됩니다.

  • cat /proc/meminfo== 3320132KB
  • System Monitor== 3.2GiB
  • htop== 3242MB
  • free -m== 3242MB

누가 내꺼 가지고 있어?잃어버린메모리?

업데이트: 난 그냥더블- 동일한 하드웨어에서 다른 버전의 Ubuntu 10.04로 부팅했습니다(긴급 상황에 대비해 몇 달 전에 설치했다는 사실을 잊어버렸습니다) :).... by System Monitor...

/var/log/messages에 최신 정보를 게시했습니다 .http://pastebin.ubuntu.com/629246/

답변1

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가 일부 RAM을 4GB 표시 이상으로 매핑하는 이유는 모르겠지만, 데이터 포인트로서 RAM도 0x100000000–0x130000000으로 매핑하는 4GB RAM이 있는 PC에서 이 글을 게시하고 있습니다.

4GB 이상의 물리적 메모리를 매핑하는 데 필요PAE. PAE는 약간의 성능 오버헤드를 발생시키므로(특히 메모리 관리자에 더 큰 데이터 구조가 필요함) 시스템적으로 활성화되지 않습니다. 기본 Ubuntu 커널은 PAE 지원 없이 컴파일됩니다. 얻다-generic-pae핵심 linux-image-generic-pae 설치최대 64GB RAM에 액세스할 수 있습니다.

TL,DR: Linux가 예상대로 작동하고 있습니다. 펌웨어는 그다지 유용하지 않습니다. PAE 지원 커널을 얻으세요.

답변2

아마도 Ubuntu 아키텍처가 i386(32비트 버전)이기 때문일 수 있습니다. 실행해 보면 어떤 결과가 나오나요 uname -a?

관련 정보