자격증과 세미나, 프로그램 이야기를 주저없이 써봅니다.

Since 2008. 10.

프로그램 및 파워유저

메모리 4GB가 3.2GB로 둔갑한 이유

럭키맨 운수 2009. 8. 17. 12:18
운영체제(Operating System) 중에서 가장 이용자들부터 많은 운영체제는 MS 윈도(Microsoft Windows)라고 할 수 있다. 널리 이용되고 있는 만큼 인기도 있지만 반대로 욕을 가장 많이 듣는 운영체제이기도 하다. 욕을 먹는 이유는 많이 있다. 이런 이유 중에는 이용자가 잘못 알고 있는 정보로 인한 것도 있는데 가장 대표적인 것이 32비트 윈도(XP, 비스타)에서 메모리를 4GB를 달아도 소용이 없다는데 왜 그런 것인지 궁금증을 풀어 보자.

윈도에 표시되는 메모리 용량에 대해 알려면 어려운 이론을 이해해야한다. 완벽하게 이해하려면 장치 드라이버 개발자 수준이어야 하지만 여기서는 일반 이용자가 이해할 정도로만 설명한다.

■ 윈도가 쓸 수 있는 최대 메모리는 얼마인가?
윈도는 운영체제로서 클라이언트와 서버로 나눌 수 있는데 각각 최대 메모리 용량이 다르다. 여기에 32비트냐 64비트냐에 따라 달라지기도 한다. 정식으로 출시된 최신 운영체제인 윈도 비스타 얼티밋은 32비트가 4GB, 64비트는 128GB다. 윈도 서버 2008 엔터프라이즈는 32비트가 64GB, 64비트는 2TB다.

바이오스에 표시되는 메모리
PC를 켰을 때 표시되는 POST 화면이나 바이오스(BIOS) 설정 화면에서 시스템에 꽂은 메모리 용량을 확인할 수 있다. 이것을 '설치된 실제 메모리'(Installed Physical Memory)의 용량이라고 한다. 이용자가 4GB 램 1개나 2GB 램 2개를 꽂으면 메모리 용량은 4GB(4,096MB)로 표시된다. 바이오스에서 확인한 메모리 용량은 이렇듯 정확하게 표시된다.

 

바이오스와 POST에 표시되는 메모리 용량.

 

4GB로 제한하는 이유는 장치 드라이버 호환성 때문
윈도에 4GB 이상의 메모리를 꽂으면 블루스크린이 뜨거나 시스템이 멈추고, 부팅조차 되지 않는다. 그래픽카드 등의 장치 드라이버를 제대로 읽지 못하는 문제가 발생하기도 한다. 이는 하드웨어 제조사들이 장치 드라이버를 만들 때 메모리가 4GB 이상인 경우를 생각하지 않고 드라이버를 설계한 탓이다. 때문에 MS는 장치 드라이버 호환성을 위해 32비트 윈도 XP와 비스타의 최대 메모리를 4GB로 제한했다. 

※ 윈도 XP와 비스타의 최대 메모리 크기.

 

운영체제                              에디션                              32비트                              64비트

윈도 비스타                          얼티밋                              4GB                                 128GB

윈도 비스타                          엔터프라이즈                     4GB                                 128GB

윈도 비스타                          비즈니스                           4GB                                 128GB

윈도 비스타                          홈 프리미엄                       4GB                                 16GB

윈도 비스타                          홈 베이직                          4GB                                 8GB

윈도 비스타                          스타터                              1GB                                 -

윈도 XP                               프로페셔널                        4GB                                 128GB

윈도 XP                               스타터                              512MB                              -

 

32비트 드라이버는 4GB 이상의 메모리 이용을 고려하지 않고 만든다.

 

32비트 윈도는 4GB를 다 쓰지 못한다
운영체제가 램을 이용하려면 메인보드가 램에 주소를 붙여서 운영체제에게 알려줘야 한다. 앞서 말한 32비트 윈도가 알아채는 메모리의 용량인 4GB는 물리적인 용량이 아니라 주소로 정해진 용량을 뜻한다. 즉 4GB까지만 주소를 매길 수 있다는 이야기다. 이것을 가상 주소 공간(Virtual Address Space)이라고 한다.

하드웨어 장치가 메모리를 점유한다
PC가 여러 하드웨어 장치를 제어하려면 소프트웨어와 하드웨어를 연결해야 한다. 이를 '장치 맵핑'(device mapping)이라고 한다. 장치 맵핑도 메모리를 차지한다. 정확히 말하자면 물리 메모리를 차지하는 것이 아니라 가상 주소 공간을 차지한다는 말이다. 이를 MMIO(메모리 매핑된 I/O)라고도 부른다. PCI 버스, 바이오스, 그래픽카드 등의 MMIO는 가상 주소 공간인 4GB 안에 반드시 들어가야 한다. 물리 메모리가 3GB 이하라면 아무 문제가 없다. 가상 주소 공간 4GB에서 3GB를 할당하고, MMIO는 남는 부분을 쓰면 된다.

하지만 물리 메모리가 4GB가 된다면 문제가 생긴다. MMIO가 가상 주소 공간인 4GB 안에 반드시 포함되어야 하므로 물리 메모리가 할당 받는 가상 주소 공간에 끼어들고 MMIO 크기만큼 실제 메모리는 뒤로 밀려난다. 밀려난 용량은 가상 주소 공간에 포함되지 않으므로 윈도가 인식하지 못한다. 이는 윈도의 문제가 아니라 하드웨어적인 문제다.

예를 들어 256MB 메모리가 달린 그래픽카드라면 4GB의 주소 공간에 그래픽카드에 달린 메모리의 주소를 매핑해야 한다. 이때 매핑된 그래픽 메모리는 시스템 메모리가 쓸 가상 주소 공간을 차지한다. 이렇게 줄어든 시스템 메모리는 하드웨어 장치에 따라 다르다. 하드웨어 장치를 많이 연결하면 MMIO가 더욱 많이 필요해 운영체제가 쓸 수 있는 메모리 용량은 3GB보다 줄어들기도 한다.

윈도에 보이는 메모리 용량
MMIO 때문에 윈도가 쓸 수 있는 메모리가 줄어든다는 것을 알았다. 그렇다면 윈도에는 어떻게 표시될까? 윈도를 켠 상태에서 메모리 용량을 볼 수 있는 곳은 제어판의 [시스템 등록 정보]인데 윈도 XP와 비스타는 이용할 수 있는 메모리(usable memory)만 표시한다. 때문에 4GB가 아니라 3.5GB로 표시된다.

이를 메모리 오류라고 생각하는 유저가 많아서 윈도 비스타 서비스팩 1과 윈도 7에서는 4GB로 표시되도록 수정했다. 바이오스에 표시된 실제 메모리(installed physical memory) 용량 정보를 직접 가져와 표시하는 것이다. 모든 시스템이 이를 정확하게 보고하는 것은 아니고 바이오스에 따라 표시가 되지 않을 수도 있다. 윈도가 쓸 수 있는 메모리는 '이용할 수 있는 메모리'(usable memory)로 따로 표시된다.

아래 그림을 보면 윈도 7은 메모리(installed memory)가 4GB, 이용할 수 있는 메모리(usable memory)는 3.75GB로 표시된다. 윈도 XP는 3.75GB로만 표시된다. 즉 윈도 XP와 비스타 7 모두 이용할 수 있는 메모리의 용량은 3.75GB로 똑같다. 메모리의 상태를 정확히 보려면 리소스 모니터의 [메모리 맵]을 보면 알 수 있다.

 

윈도 7의 리소스 모니터에서 추가된 [메모리 맵].

 

32비트 윈도 XP와 비스타에서 4GB 이상의 메모리를 쓸 수 있는 방법은 없나?
32비트 윈도 클라이언트(XP, 비스타)는 메모리를 4GB만 쓸 수 있다고 하는데 32비트 이상을 쓸 수 있는 방법은 없는 것인가? '없다'가 정답이다. 꼭 4GB 이상의 메모리를 쓰고 싶다면 64비트 운영체제를 써야 한다. 32비트 운영체제를 고집하고 싶다면 클라이언트 운영체제가 아닌 서버 운영체제(윈도 2000 서버, 2003, 2008 등)로 눈을 돌려야 한다.

 

메모리를 4GB 이상 쓰려면 서버 운영체제를 써야 한다.

 

4GB 제한을 없애는 PAE 옵션?
이론적으로 x86과 x86 64비트 CPU는 4GB 이상의 물리 메모리를 지원한다. CPU 제조사가 물리 메모리 영역을 크게 확장시킬 수 있는 PAE(Physical Address Extension)라는 기술을 포함시켰기 때문이다. 인텔은 펜티엄 프로부터, AMD는 애슬론부터 모두 이 기술을 포함하고 있다. 이 기술을 적용하면 32비트 윈도의 메모리 한계를 최대 64GB까지 확장한다.

 

하지만 윈도 XP와 비스타처럼 서버가 아닌 클라이언트 운영체제는 PAE를 써도 4GB 이상을 쓸 수 없다. MS가 4GB 이상을 쓰지 못하게 제한했기 때문이다. 그 이유는 앞서 설명한 드라이버 호환성 때문이다. 따라서 아무리 PAE 옵션을 손보더라도 4GB 이상 메모리를 달지 못한다.

 

윈도 XP의 boot.ini에 추가한 'PAE' 옵션.

 

윈도에서 그래픽카드가 쓸 수 있는 메모리 용량은?
윈도에서 그래픽카드는 메모리를 어떻게 이용하는지 알아보자. 그래픽 장치는 2가지로 분류된다. 전용 그래픽 메모리(Dedicated graphics memory)를 가지고 있느냐, 공유 시스템 메모리(Shared system memory)를 쓰느냐다. 전용 그래픽 메모리는 그래픽카드만 쓰는 메모리다. 다른 장치는 이 메모리에 접근할 수 없다. 공유 시스템 메모리(Shared system memory)는 필요할 때만 가져다 쓰는 메모리다. 그래픽카드만 쓰는 게 아니라 다른 장치가 가져다 쓸 수 있다. 그래픽카드나 내장 그래픽이라도 시스템 메모리의 일부를 공유 시스템 메모리로 쓴다. 내장 그래픽도 공유 시스템 메모리를 쓰지만, 시스템 메모리 중에 일부를 전용 비디오 메모리도 가져다 쓴다.

 

256MB의 전용 그래픽 메모리를 가진 엔비디아 그래픽카드 8600GT는 256MB의 전용 그래픽 메모리를 가지고 있지만, 공유 시스템 메모리로 1279MB를 쓴다. 따라서 1279MB+256MB = 1535MB로 그래픽카드가 쓸 수 있는 [사용 가능한 총 메모리]가 표시된다.

 
꼼수를 이용해 4GB 이상의 메모리를 쓴다?
중국의 해커가 32비트 윈도 비스타를 크랙해서 4GB 이상을 쓸 수 있게 만들었다고 한다. 이 방법은 윈도 비스타와 비슷한 커널을 쓰는 윈도 서버 2008의 기능을 옮긴 것이다. 윈도 2008 서버는 64GB까지 지원한다. 이 방법을 쓰면 체험 지수에 오류가 생기고, 정품 인증이 되지 않는 등의 문제가 생긴다고 한다.

 

■ 메모리를 잘 활용하는 3GB 옵션
3GB 옵션은 응용 프로그램에 더 많은 메모리를 할당하기 위한 기술이다. 32비트 윈도는 앞서 말했듯이 메모리 공간을 4GB만 쓴다. 4GB란 용량은 앞서 말한 것처럼 물리 메모리가 아니라 주소 공간을 뜻한다. 이 4GB의 가상 공간을 2개로 쪼개 2GB는 커널 모드, 나머지 2GB를 유저 모드에 할당한다.

커널 모드에 할당한 공간은 시스템을 이용하는 리소스를 위한 부분이고, 유저 모드는 이용자가 쓰는 응용 프로그램을 위한 공간이다. 3GB 옵션을 쓰면 커널 모드에 1GB를 할당하고 나머지 3GB를 유저 모드에 할당한다. 이렇게 하면 응용 프로그램이 더 많은 메모리를 쓸 수 있다.

3GB 옵션 설정하기
3GB 옵션은 '4GT'(4GB RAM Tuning)라는 메모리 조정 기술을 이용해 활성화한다. 이 기술을 쓰려면 윈도 부팅 옵션에 '/3GB'라는 명령을 추가한다. 윈도 XP와 비스타, 윈도 7 모두 적용되는 기술이다. 먼저 어떻게 쓰는지 알아보자.

< 윈도 XP >

 

① [내 컴퓨터]를 오른쪽 클릭해 [속성] 을 누른다.

 

② [고급] 탭에서 [시작 및 복구] 의 [설정]을 누른다.

 

③ [시작 및 복구] 창에서 [시스템 시작] 의 [편집]을 누른다.

 

④ Boot.ini 파일이 메모장으로 열리면 그림처럼 '/3GB'를 입력하고 메모장을 닫고 윈도를 재부팅한다.

 

< 윈도 비스타 >

 

① 시작 → cmd라고 입력해서 명령행 창을 연다.

 

② 다음 명령어를 하나씩 입력한다.
BCDEDIT /SET PAE ForceEnable
BCDEDIT /SET IncreaseUserVa 3072

 

③ 원래 값으로 되돌리려면 다음을 입력한다. BCDEDIT /SET IncreaseUserVa 2048

 

시스템 리소스가 부족하다면 옵션을 조절하자
시스템 리소스가 많아져서 커널 모드에 할당된 1GB가 꽉 차면 시스템 리소스 부족으로 성능이 떨어질 수 있다. 따라서 무조건 /3GB를 할당하지 말고 자신에 시스템에 맞춰야 한다. 윈도 XP라면 boot.ini 파일에 입력할 내용을 '/3GB /usreva=nnnn'로 설정한다. nnnn는 유저 모드로 이용할 공간을 뜻하는데 단위는 MB다.

4GB에서 nnnn을 뺀 나머지 용량이 커널 모드로 할당된다. 예를 들어 커널 모드에 1.5GB를 할당하려면 '4096 - 1560 = 2560'이 되므로 '/3GB /userva=2560'이라고 입력한다. 윈도 비스타도 마찬가지다. 'BCDEDIT /SET IncreaseUserVa nnnn'에서 nnnn의 값을 2560으로 바꿔서 입력한다.

 

출처: 쇼핑저널 버즈