3G이상의 메모리를 활용하기 위해서는 기존의 메모리 검사 방법과 동적 메모리 할당 소스를 수정해야 합니다.

0xC0000000 (3G) 영역부터 0xFFFFFFFF 까지의 주소 공간은 다른 시스템 용도로 사용하기 위해 예약된 공간이기 때문에

이 영역은 메모리로써 사용할 수 없습니다.

때문에 저자님께서도 3G까지의  메모리만 사용하도록 제한을 두신거고 사실 3G만 되더라도 상당한 메모리 양이지만...

저처럼 3G이상의 메모리에 욕심나는 분들만 참고하시면 될 것 같습니다.

 

본론부터 말하자면 3G를 초과하는 메모리 공간은 0x100000000부터 다시 할당되어있습니다.

예를 들어 4G의 메모리를 사용중이라면 3G의 메모리는 0xBFFFFFFF까지 할당되어있고

나머지 1G는 0x100000000부터 0x13FFFFFFF 까지 할당되어 있습니다.

 

<리눅스의 메모리 맵, 8G>

00000000-0000ffff : reserved
00010000-0009efff : System RAM
0009f000-0009ffff : reserved
000a0000-000bffff : PCI Bus 0000:00
000c0000-000c7fff : Video ROM
000ca000-000cbfff : reserved
  000ca000-000cafff : Adapter ROM
000cc000-000cffff : PCI Bus 0000:00
            생략...
000d8000-000dbfff : PCI Bus 0000:00
000dc000-000fffff : reserved
  000f0000-000fffff : System ROM
00100000-bfedffff : System RAM
  01000000-0168dd81 : Kernel code
  0168dd82-01cdc9bf : Kernel data
  01dcd000-01f2dfff : Kernel bss
bfee0000-bfefefff : ACPI Tables
bfeff000-bfefffff : ACPI Non-volatile Storage
bff00000-bfffffff : System RAM
c0000000-febfffff : PCI Bus 0000:00
  c0000000-c0007fff : 0000:00:0f.0
            생략...
fee00000-fee00fff : Local APIC
  fee00000-fee00fff : reserved
fffe0000-ffffffff : reserved
100000000-23fffffff : System RAM

- 위 리눅스의 경우 8G의 메모리중 5G는 0x100000000부터 0x23FFFFFFF까지 할당되어 있습니다.

 

따라서 3G보다 큰 메모리는 하나로 이어진 공간이 아닌 두개의 공간으로 나누어져있기 때문에

메모리 검사 방법을 수정해 0x100000000 이후의 영역도 검사하도록 수정해야하고 동적 메모리 할당 소스도

이를 고려하여 알고리즘을 손봐줘야 합니다.

 

ps. 아 그리고 실제 PC에서는 램의 끝자락 일부가 또 예약되어 사용되고 있는거 같더군요.. vm웨어에서는 잘되었는데..

다행히 끝부분의 10MB를 버리니 이상없이 돌아가네요. 예약된 공간을 정확히 확인하는 방법을 알아봐야겠어요...

 

3.jpg

vmware에서 테스트 (6G)

 

IMG_20130808_140632.jpg

실제 PC에서 테스트 (6G)