Windows 메모리 FAQ

안녕하세요~ sankim 입니다.

 

최근 들어 여러 Windows 관련 커뮤니티나 블로그를 방문하면서 가장 많이 눈에 뜨이는 질문이면서도 정확한 답을 얻기 어려운 것이 Windows 메모리 관련 질문들인 것을 보았습니다. 그래서 메모리 관련해서 가장 많이 올라오는 질문들에 대해서 간단한 답을 정리해 보았습니다. 자세한 기술적 내용은 꼭 한번 시리즈(?)로 올릴 것을 약속 드립니다. ^^

 

Windows Memory FAQ

 

1. Windows에서 사용 할 수 있는 최대 메모리(Windows Maximum Memory Size) 크기는 얼마인가요?

 

현재 나와 있는 Windows 클라이언트는 Vista Ultimate의 경우 32-bit OS는 4GB, 64-bit는 128GB 이며 Windows 서버 Windows Server 2008 Enterprise는 32-bit는 64 GB, 64-bit는 2 TB입니다. 자세한 사항은 여기를 누르시면 각 Windows 별 최대 메모리를 확인 할 수 있습니다.

 

 

2. XP, Vista와 같은 32-bit Windows Client에서 4GB 이상 메모리를 사용할 수 있는 방법은 없나요?

 

32-bit Windows Client(Windows 2000 Professional, XP, Vista)는 메모리 4GB까지만 인식합니다, 4GB 이상의 메모리를 사용하고 싶으신 분들께서는 64-bit Edition을 사용하시거나 혹은 Windows Server 제품을 이용하셔야 합니다. 개인적으로 4GB 이상 사용하는 방법에 대한 Tip이나 Trick이 있다는 글들을 본적이 있는데 모두 근거가 없거나 실제 메모리가 확장되어 사용하는 방법이 아닌 것으로 보입니다.

 

 

3. Windows Client에서 메모리 4GB를 설치 했는데 Windows에서 4GB로 보이지 않고 3.xxGB로 보여요

 

실제 장착된 물리 메모리를 OS가 인식하기 위해서는 그 메모리 정보를 H/W가 Windows에게 알려줘야 합니다, 그런데 PCI Bus, BIOS 그리고 비디오 카드 등에서 사용하는 PCI Bus, BIOS 그리고 비디오 카드 등에서 사용하는 MMIO가 Windows에서 인식하기 위한 물리 메모리 공간 중간에 끼어 들면서 MMIO 크기만큼 실제 메모리가 밀려나 버리게 됩니다, 그래서 윈도우는 밀려난 실제 메모리 영역을 인식하지 못한 나머지 영역만을 실제 메모리로 인식해 실제 메모리보다 적은 양을 사용하게 됩니다. 이는 하드웨어 이슈 입니다.

 

image

 

*경우에 따라 Windows Vista에서 4GB를 장착하였는데 3.12GB로 나오는 경우가 있습니다 이는 디바이스 드라이버 호환성 문제를 피하기 위해 Vista가 의도적으로 3.12GB로 설정 하는 것입니다.

 

자세한 사항은 아래 링크를 참조 하십시오.
https://blogs.technet.com/sankim/archive/2007/05/31/4gb.aspx

 

 

4. Windows Vista SP1(Service Pack 1)을 설치 하니 3.xxGB 보이던 메모리가 4GB로 나타납니다.

 

Windows Vista Service Pack 1에서부터는 실제 메모리의 정보를 직접 BIOS에서 가져와 시스템 정보에서 보여 줍니다, 그러나 BIOS 호환성에 따라 지원 되지 않을 수도 있습니다.

 

image

 

위 그림에서 왼편 Memory (RAM)에는 4GB라고 나오지만 오른편 실제 사용할 수 있는 Physical Memory에는 3061(3.0GB)이라고 나타납니다. 이렇듯이 Windows Vista SP1을 설치 하면 작업 관리자 등에서 4GB 전체를 보실 수 있습니다만 MMIO로 인한 메모리 사용의 제한은 그대로 받게 됩니다.

 

자세한 사항은 아래 포스팅을 참조 하십시오.
https://blogs.technet.com/sankim/archive/2008/01/31/windows-vista-service-pack-1.aspx

 

Windows 7에서는 리소스 모니터를 통해 이것을 비주얼 하게 보여 줍니다.

 

 

5. 메모리를 64-bit로 확장해 준다는 PAE 옵션은 무엇인가요?

 

32-bit 윈도우가 사용할 수 있는 4GB 메모리 한계를 최대 64GB 까지 확장해주는 기술입니다.

 

1) X86 CPU(Processor)를 사용하는 32bit 운영체제의 최대 메모리는 2^32(32bit)로 4GB 입니다.
2) 과거에 4GB는 엄청난 크기였지만 세월이 흐르면서 데이터베이스 같이 큰 메모리가 필요한 응용프로그램들이 나타났습니다. (제가 처음 지원했던 Windows NT의 메모리가 128MB였던 걸로 기억합니다)
3) 그래서 CPU(Processor) 회사는 컴퓨터가 사용할 수 있는 물리 메모리 영역을 아주 크게(36Bit로) 확장 할 수 있는 PAE라는 기술을 만들어냈습니다.
4) Windows는 CPU가 제공하는 이 PAE 기술을 이용하여 4GB 메모리 크기의 한계를 극복 할 수 있게 되었습니다.
5) Windows가 CPU에서 제공하는 PAE를 사용하기 위해서는 boot.ini에서 /PAE 옵션을 추가 합니다. Windows Vista 이상 환경에서는 ‘bcdedit /set [{해당 윈도우GUID}] pae ForceEnable’을 실행 합니다.
6) PAE로 확장된 상태라도 AWE(Address Windowing Extensions) 함수를 이용하지 않는다면 PAE로 확장된 메모리 모두를 Application이 모두 사용 할 수 없습니다 그러나 OS가 file Cache Data등으로 사용합니다.
7) XP, Vista와 같은 Windows Client에서는 PAE를 사용해도 4GB 이상으로 확장되지 않습니다

 

PAE를 사용하는 경우 CPU의 MMU(Memory Management)가 Virtual address에 Page directory pointer를 추가(three-level page table)하는 방식으로 필드를 4개로 나눠 메모리를 확장합니다.

 

clip_image006

 

[Virtual Address(x86)의 경우]

 

clip_image008

 

[PAE 활성화된 Virtual Address(x86)의 경우]

 

 

6. /3GB 옵션은 무엇인가요?

 

4GT 기술이라고 하는데 흔히 /3GB 옵션이라고도 부르며 응용프로그램에 더 많은 메모리를 할당하기 위한 기술입니다.

 

x86 컴퓨터에서 사용되는 기술로써 가상 메모리 공간 4GB를 둘로 나눠 2 GB는 System Space, 2GB는 User Space에 할당 합니다. System Space는 시스템이 이용하는 리소스(System cache, hyperspace, system cache, page pool 등)에 할당 하고 User Space는 사용자 응용프로그램(응용프로그램, 데이터 등)이 사용하는 공간 입니다. 만약 /3GB 옵션을 추가하게 되면 System Space에는 1GB를 할당하고 User Space에는 나머지 메모리 공간을 할당하게 됩니다. 그러면 응용프로그램이 사용할 수 있는 메모리 크기가 증가되어 응용프로그램에서 더 많은 메모리를 사용 할 수 있는 것입니다. 그러나 시스템 리소스가 많이 필요한 경우 /3GB로 System Space에 1GB만 할당하기 때문에 시스템 리소스의 부족으로 성능 저하를 가져 올 수 있습니다. 그러므로 무조건 /3GB를 할당 할 것이 아니라 충분한 모니터링 후 사용 여부를 결정해야 합니다.

 

clip_image010

 

[왼쪽은 일반 2GB, 2GB 모델, 오른쪽은 /3GB 모델]

 

 

쉽게 쓴다고는 했지만 아무래도 이해하기 쉽지 않은 부분입니다, 위에서 약속 드린 것 처럼 나중에 꼭 한번 메모리 구조에 대해서 포스팅 하도록 하겠습니다.

Comments

  • Anonymous
    January 01, 2003
    어제 저녁에 읽어 보고 링크의 글 내용중 몇가지에 대해서.. '이 기술을 적용하면 32비트 윈도의 메모리 한계를 최대 64GB까지 확장한다.' => 정확하게는 32비트 Addressing을 36비트로 변환하여 64GB까지 액세스 메모리 영역을 확장합니다. 이 구조하에 Windows에서는 PTE의 Size를 확장하여 64GB Physical Memory에 액세스가 가능하도록 구현합니다. '4GB란 용량은 앞서 말한 것처럼 물리 메모리가 아니라 주소 공간을 뜻한다. 이 4GB의 가상 공간을 2개로 쪼개 2GB는 커널 모드, 나머지 2GB를 유저 모드에 할당한다.' =>  여기서 주소 공간이 바로 앞에서 설명 드린 Virtual Address Space 입니다. '꼼수를 이용해 4GB 이상의 메모리를 쓴다?' => PE모드에서 변경했다는 것 같은데.. 정확히 이부분은 어떻게 한것인지 궁금하네요, 방법을 아시는분 계시면 저에게 알려주시면 감사하겠습니다. **그리고 이 포스트를 쓸 때 MMIO가 할당 되는 부분은 써야 할지 말아야 할지 고민했었습니만 이 부분은 하드웨어(정확히 말하면 Chipset)에서 다뤄야 할 사항이므로 자세한 내용 설명 없이 넘어갔었습니다(이것까지 쓰면 참 길어지죠). 혹시 이 부분을 확인 하기 위해 몇 대 컴퓨터에서 테스트 하시는 분들이 계시다면(왜곡 될수 있는 답을 얻을 가능성 높음) 그것 보다는 Intel Processor Manual을 구해 보시기를 추천해 드립니다, 이 모든 구조가 바로 Processor와 Chipset과 관련이 있습니다. 참고로 Intel Manual은 Intel 홈페이지에서 무료로 PDF로 제공 됩니다, 얼마전까지 책을 무료로 배송해 줬던걸로 아는데 어딘지 기억이.. . ^^;

  • Anonymous
    January 01, 2003
    영**님 응원의 말씀 감사드립니다. 표현 일부가 특정인에게 감정적으로 받아들여 질 수 있어 댓글은 승인하지 않았습니다. 이점 이해해주십니다 m(__)m. 즐거운 하루되세요~ :)

  • Anonymous
    January 01, 2003
    ^^;; 감사합니다. 좋은 하루 되셔요~

  • Anonymous
    January 01, 2003
    제 글과 비슷하다는 의미시지요? 기술 이야기는 비슷할 수도 있다고 생각합니다... 저도 Mark Rusinovich의 글을 뼈대로 했으므로 나쁘게 생각하지는 않습니다만 몇가지 오류가 눈에 걸리네요. 그중에 가장 큰것이 글쓰신 분께서 Virtual Address와 Physical Address를 혼돈하고 계신듯 합니다, 둘은 전혀 다른 의미 입니다. virtual Address는 Process가 사용하기 위한 가상의 메모리 공간을 이야기 하고 Physical Address는 시스템에서 사용하는 실제 메모리 공간(칩셋이 알려준)을 의미 합니다. Virtual Address와 Physical Address를 혼돈한다면 상당히 어렵습니다. 그리고 4GB 전체 사용하지 못하는 이슈에 영향을 끼치는 디바이스 요인으로 MMIO 뿐만 아니라 System BIOS, Motherboard Resources (I/OxAPIC), Memory Mapped I/O, PCI Express* Configuration Space, Additional PCI Device Memory (Graphics Aperture), VGA Memory등이 있습니다. 이 포스팅을 쓸때 더 자세한걸 쓰려다가 너무 깊어질것 같아 이 정도(?)까지 썼는데 나중에 시간 나면 이부분도 더 소개해 드리도록 하겠습니다. :) 그리고 /userva는 Exchange Server와 같이 이 옵션을 Aware하는 어플리케이션에서 적용 해야 합니다. 그렇지 않은 경우에는 의미가 없으며, 메모리에 민감(?)한 응용프로그램은 동작자체를 하지 못하는 경우가 있을 수 있습니다(이 일로 Troubleshooting을 한 경험이 있습니다) 또한 /3GB로 인해 PTE Leak 이슈가 나타날 수 있습니다, 해당 글에서 언급한 ‘/3GB /userva' 옵션을 사용해도 문제는 마찬가지 입니다. 이 이슈를 정확히 이해하려면 Windows Kernel 뿐만 아니라 Processor도 이해하고 있어야 합니다. 이 이슈를 자꾸 하드웨어의 여러 기술에 접합시켜 이해하려면 더 복잡해지고 엉뚱한 답이 나올수 있으므로 지양해야 합니다.

  • Anonymous
    January 01, 2003
    아.. 허허.. 위에 PC사랑에 기사가 그 배우기란 분께서 쓰신 건가 보죠? 제 블로그 관심있게 보고 계시는것 같아 감사하네요.

  • Anonymous
    January 01, 2003
    배우기님의 의견과 질문에 답이 될것입니다, 이번에 새로 포스팅한 아래 글을 읽어 주십시오. http://blogs.technet.com/sankim/archive/2009/05/21/4gb-32-windows.aspx

  • Anonymous
    January 01, 2003
    안녕하세요? sankim 입니다. 배우기님 블로그에 아주 아프게 글을 쓰셨더군요, 댓글이 바로 올라가지 않아 기분이 상하셨던 것 같습니다. 제 블로그는 댓글 승인제이기 때문에 제가 확인한 뒤에 댓글을 승인해야 댓글이 올라가게 되어있습니다, 글은 일요일 새벽에 올리신 것 같은데 제가 주말은 온라인에서 멀어지는 터라(아기도 보고 빨래도 하고.. ^^) 확인할 수 없었습니다. 댓글을 관리자 승인제로 한 이유는 하루에도 5~10개 정도 '빌라 팔아 드립니다'에서부터 낮뜨거운 상업적 댓글이 올라옵니다. 한/영/혹은 다국어를 포함해서 일주일 방치하면 한 50개 이상이 올라와 있더군요, 항상 지켜보면서 삭제하기 어려운 관계로 댓글 승인제로 설정 하였습니다. 상업적인 내용이 아니면 모두 댓글이 올라올 수 있도록 합니다. 저도 개인이기에 그런 글을 올리시기 전에 조금 기다려 주셨으면 좋지 않았을까라는 아쉬움이 있습니다만 오해라는 것은 언제나 있을 수 있는 것이고 풀 수 있다는 생각으로 좋게 생각하고 있습니다. [올려주신 글에 대한 답변입니다]

  1. 기본 디자인으로 윈도우 클라이언트의 Kernel이 실제 4GB이상 Memory Access할 수 없습니다. Windows 고유 Memory addressing을 적은 글임을 알려드립니다. 넓은 의미에서 3'rd Party 제품으로 인한 확장을 언급하신 의견 감사합니다.
  2. Device Memory(MMIO)가 밀어 냈다는 것은 정확한 의미 입니다. /아래 그림 참조해 주십시오/ http://blogs.technet.com/blogfiles/markrussinovich/WindowsLiveWriter/PushingtheLimitsofWindowsPhysicalMemory_878B/image_10.png
  3. 4번에 대한 의견 감사합니다 그러나 읽으시는 분들이 간단히 이해하시도록 하기 위한 FAQ인데 너무 많은 것을 적으면 도리어 혼란을 드리지 않을까 생각해 봅니다, 다음에 기회 있으면 조금 자세히 적어 보도록 하겠습니다. (말씀하신 예제는 어떤 의도이신지 잘 이해가 가지 않습니다만 의견 감사합니다) 아마 위 답변에 대해서 자세한 설명이 필요하실 것 같아서 아래 링크를 알려드립니다, 제가 올린 글과 위 1,2,3 답변에 대한 배경이 잘 나와 있습니다. 이해에 도움되시기 바랍니다. Pushing the Limits of Windows: Physical Memory http://blogs.technet.com/markrussinovich/archive/2008/07/21/3092070.aspx 좋은 하루 되십시오. 감사합니다.
  • Anonymous
    May 11, 2009
    백과장님의 꼬알라의 하얀집과 함께 제가 하루에 꼬옥 한번은 들리는 sankim 블로그에서 알차고 좋은 정보 덕분에 마니 얻습니다. 감사합니다!!~ ^^

  • Anonymous
    May 17, 2009
    안녕하세요, 윈앤위의 배우기(Mr.Learn)라고 합니다. 새벽에 구글 알리미도 이 포스트를 접하면서, 마이크로소프트 직원분이시기에 제의견을 적어 보려고 합니다.

  1. XP, Vista와 같은 32-bit Windows Client에서 4GB 이상 메모리를 사용할 수 있는 방법은 없나요? 조금 넓은 의미로로는 Windows 클라이언트 4GB이상을 사용할 수 있지요. 왜냐하면 SuperSpeed사의 RamDisk Plus 제품을 이용해서 Unmanagement Memory(UM)를 이용하시는 것입니다. UM기능은 PAE enabled를 전제로 하는 기능인데, 이것을 통해서 사용자들이 4GB에서 4GB를 모두 사용한다는 잘못된 인식을 하고 있더군요. 더구나 SuperSpeed사는 마이크로소프트 파트너사로 등록되어져 있더군요.^^
  2. Windows Client에서 메모리 4GB를 설치 했는데 Windows에서 4GB로 보이지 않고 3.xxGB로 보여요 MMIO만큼 실제 메모리가 밀려난다라는 표현을 하셨는데, MS 제가 기술 문서를 보니까 그래픽 메모리가 실제메로리를 겹쳐친다고 표현하더군요. 이것은 device mapping봐야겠지요. 밀려난다라는 표현은 좀 이상한 듯 합니다. 더불어 BIOS애서 aperture size를 어떻게 설정하는냐 따라서 또한 haredware reserved 공간의 변동이 생깁니다. 4GB주소 공간에서 전용 그래픽 메모리의 온보드 메모리만큼 맵핑이 되고 aperture block이 잡혀면서 또다시 실제 메모리를 감소시킵니다. 그런데 aperture block으로만 끝나는 것이 아닌 aperture block 만큼이 또다시 rempped되기 때문에 64MB의 aperture memory를 잡게되면 실제로는 2배가 되어서 실제 메모리의 128MB를 감소시킵니다. 따라서 전용 그래픽 메모리(로컬)를 가지는 어답터의 경우 온보드 메모리 + aperture memory + aperuture remapped가 합쳐져서 결과적으로 실제 메모리(비로컬)를 상단 부분 감소를 시키게 됩니다. 그리고 이것이 부트시 POST에서 표기하는 메모리량입니다. bios allocation의한 것이기 때문에 실제적으로 Windows하고는 관련이 없지요. 그러나 Windows 7에 오면서 bios allocation에 소비되는 것이 리소스 모니터의 비쥬얼 메모리맵으로 보여줌으로써 많은 사용자들이 그나마 이해를 할 수 있다는 생각입니다.
  3. Windows Vista SP1(Service Pack 1)을 설치 하니 3.xxGB 보이던 메모리가 4GB로 나타납니다. 비스타 서비스팩1 이전의 Windows는 bois allocation에 의한 하드웨어 예약 공간을 제외해서 메모리 보고를 하기 때문에 사용자들이 4GB를 인식을 못한다는 오해를 합니다. 그러나 비스타 1부터는 하드웨어 예약공간을 포함을 해서 installed mamemery로 보여주고 있지요. 실제로 시스템 등록정보상에서는 설치된 메모리를 보여줍니다. Windows 7도 마찬가지인데, 4GB라면 4GB의 installed memory와 함께 괄호()를 치고 하드웨어 예약 공간이 제외된 용량도 보여주더군요. 그리고 비스타 부터는 WDDM APIs에 의해서 winsat.exe와 같은 도구를 이용하는 문제를 언급하셔야 마땅하다 생각이 됩니다. Windows가 시작되기 전에는 bios allocation 문제를 언급하셔야하고 일단 Windows가 시작이 된 상태라면 driver allocation으로 설명이 되어야 할 문제라고 봅니다. *** 그리고 개인적으로 이해할 수 없는 문제가 Windows 클라이언트가 공식적으로 4GB인데, 왜 PAE커널은 싱글 코어용과 다중 코어용을 제공하는지 모르겠습니다. XP경우도 PAE 활성이 가능해서 시스템 등록정보상에도 표기가 되는 문제도 그렇습니다.
  • Anonymous
    May 19, 2009
    이사람 sankim님이 쓴 글이 틀려서 자기 댓글을 못올라오게했다고 착각하나 보네요. 정말 한참웃었어요. sankim님이 올린 답변을 보고 제대로 이해했다면 당장 쥐구멍이라도 찾아야 할것 같네요.

  • Anonymous
    May 30, 2009
    윈앤위님 지금까지 없었던 새로운 H/W와 OS를 창조해 내셨음.

  • Anonymous
    August 18, 2009
    허허.. 참.. 어의 없네요.. http://www.ebuzz.co.kr/content/buzz_view.html?ps_ccid=80663

  • Anonymous
    January 21, 2015
    안녕하세요. 지금 난감한 문제에 처해서... 조언을 구합니다.
    컴모듈 express_IB 모델을 사용하는데 4세대 i7입니다. 램은 4GBx2 구성하였구요.
    하지만 운영체제는 윈도xp pro sp3 32bit를 사용해야하는 상황입니다.... 여기에서 내장그래픽성능을 최대한 끌어올리고 남은 램은 윈도상에서 4GB로 인식을 되게하여 xp pro sp3 32bit에서 등록정보에서 확인할 수 있는 램 사양을 최대한 많이 정보가 나올 수 있게(예를들면 3.48GB )할 수 있는 방법은 없나요?

    위와 관련하여 내장그래픽 설정과 램설정 방법좀 알려주시면 감사하겠습니다.!