배우기(Mr.Learn)는 Windows 7을 시작으로 리얼PC에서의 32비트 Windows 사용은 접습니다. 마지막 마무리로써 특별한 웹로그를 준비했습니다. 이 웹로그는 국내 포털 지식 서비스에서 부터 국내 유명 하드웨어 커뮤니티, 그리고 웬만한 Windows 관련 커뮤니티에서 심심치 않게 불거지는 32비트 관련 이슈에 관한 것입니다. 윈앤위 방문자님이나 멤버님들께 정리해 보고합니다. 메모리 메니지먼트에 관한 사항은 모 PC잡지에 기고를 하고, PDF로 만들겠다라는 약속을 했었는데, PDF는 아니지만 이 웹로그가 약속을 지키게 됩니다. 직접 배우기(Mr.Learn)가 많은 시간을 들여서 그림을 그렸습니다. 누구라도 쉽게 이해가도록 최대한의 노력을 기울였습니다.^^
이전 웹로그에서는 실제 램이 어떻게 사용되기 때문에 Windows가 4GB용량 보다 적은 용량을 사용하는지 WDDM이라는 기술문서를 근거로 했습니다만, 기술적 배경 지식이 준비 되지 않은 일반 사용자들이 32비트에서의 4GB를 가상 주소 공간(Virtual Address Space)과 실제 메모리(램, Physical RAM)을 혼동한다 생각됩니다. 또한 대부분의 Windows관련 커뮤니티에서 논란이 일어나는 것도 바로 가상 주소 공간과 램에 대한 배경지식을 제외하거나 Windows 메커니즘이나 메모리 매니지먼트를 무시하고 단지 전자공학적 MMIO(Memory Mapped I/O) 시각으로만 접근을 한다고 생각이 되는군요. 더욱이 제가 무엇인가를 보여줘도 어떤 방문자는 개조된 BIOS를 사용한다고 하고, 인터넷에 허위 정보를 유포한다고 하더군요. 그래서 제가 나름대로는 심혈을 기울여 이해하기 쉽도록 그림을 그렸습니다. 여전히 많은 커뮤니티에서 갑론을박을 벌이면서 간혹 윈앤위의 일부 문서를 간단히 링크해 놓는 경우가 있는데, 이제는 이 웹로그가 윈앤위의 메모리 관련 모든 사항들을 대체한다고 할 수 있습니다. 또한 논란의 종지부를 찍을 것이라 확신합니다. 그리고 32비트를 사용하시는 Windows 유저분들께 도움이 되었으면 하는 바램입니다.
1. 가상 주소 공간과 실제 메모리에 대한 이해

Windows관련 개발자들에게는 별 것이 아니겠지만, 사용자 입장에서는 상당히 혼란 스러운 것이 메모리 관련 사항이고 Windows 메커니즘에 익숙하지 않기 때문에 오해가 생깁니다. Windows 클라이언트 기준으로 해서 32비트 시스템이라는 것은 2^32 = 4096MB(4GB)라는 한계가 당연한 것입니다. 512MB를 장착하건 1GB이건 2GB, 4GB이건 실제 메모리는(램)는 실제 메모리이고 Windows에서는 4GB라는 가상 주소 공간(Virtaul Address Space)으로 운영되어 집니다. 그리고 이 가상 주소 공간은 2개로 분리되어 취급됩니다.
1-1. 2GB는 Windows가 사용을 하는 커널 모드(Kernel Mode)라고 하고 나머지 2GB는 유저 모드(User Mode)라고 해서 응용 어플리케이션(프로그램들)이 사용하는 공간입니다. 사용자 어플리케이션 즉, 각각의 프로그램들은 모두 4GB라는 가상 주소 공간을 운영체제로부터 할당 받아서 사용하는데, 유저 모드의 2GB가 최대 사용 공간이라고 할 수 있습니다. 그러나 절대로
1-2. 이것을 실제 메모리와 직접 연관을 시키면 안됩니다. 일단 가상 주소 공간과 실제 메모리를 분리하고 구분을 하시는 것이 이해하기가 좋습니다. 다시 말해 실제 메모리와는 상관없이 Windows는 4GB 가상 주소 공간으로 동작한다라고 생각하시면 됩니다.
2. 메모리 튜닝 모델과 어플리케이션 튜닝 모델

Windows는 가상 주소 공간을 기본적으로 2GB씩 나누어 운영을 한다고 했습니다. 그런데 이 가상 주소 공간은 메모리 튜닝 모델에 의해서 조정할 수 있습니다.
2-1. 4GT(실제 램 2GB이상 필요)라는 것은 4기가바이트 램 튜닝(4Gigabyte Tunning)의 약자로써 커널 모드를 1GB, 유저 모드를 3GB로 조정을 합니다. 이렇게 되면 응용어플리케이션에게 할당할 수 있는 유저 모드 주소 공간이 1GB가 늘게 됩니다. 그러나 이것으로 끝나는 것이 아닌 이러한 메모리 튜닝에 따라 프로그램도 역시도 어플리케이션 메모리 튜닝 모델로 사용되어야 합니다. 어플리케이션 메모리 튜닝이란 바로 프로그램에 IMAGE_FILE_LARGE_ADDRESS_AWARE라는 플래그를 삽입해서 이 프로그램이 기존 어플리케션이 사용하는 유저 모드에서의 2GB가 보다 큰 주소를 사용한다라고 인식(Large address aware)을 시켜야 작동을 한다는 것입니다. 즉 프로그램 개발자가 프로그램을 개발하고 컴파일을 해서 실행파일까지 만든다는 것입니다. 그러나 프로그래머가 아닌 Windows 사용자도 imagecfg.exe라는 도구를 이용해서 실행파일(.exe)에 Large address aware를 삽입해서 유저모드에서의 3GB의 가상 주소 공간을 사용한다는 것입니다.
2-2. PAE라는 것도 마찬가지로 메모리 튜닝과 어플리케이션이 메모리 튜닝 모델이 적용되어져야 하는데, PAE(실제 확장 주소 Physical Address Extension)는 32비트 주소를 36비트 주소 체계를 사용해서 4GB 이상의 가상 주소 공간에 어드레싱이 가능하지만 Windows 클라이언트 모든 버전은 PAE가 적용이 되어도 4GB를 넘어설 수 없습니다. 따라서 유저 모드에 3GB, 커널 모드에 1GB가 적용이 되며, PAE의 경우도 어플리케이션 메모리 튜닝에서는 일반적인 Windows 32 APIs가 아닌 AWE(Address Windowing Extension) APIs를 이용해서 개발된 어플리케이션이어야 합니다.
그리고 이들 메모리 튜닝 모델을 적용시킬 때 boot.ini의 명령줄에는 명령 외에도 추가적인 스위치를 사용할 수 있습니다. 4GT나 PAE나 모두 정확하게 1GB + 3GB로만 가능한 것이 아닌 스위치를 제공(옵션)을 해서 조정이 가능하다는 것입니다. 예를 들어 4GT의 경우 기본적으로는 커널 모드가 기본값으로 1GB를 사용하지만 스위치를 사용해서 1GB에서 2GB까지 조정이 가능합니다. 그러나 특정 비디오 카드의 경우는 커널 모드를 1GB이상 요구하는 경우가 있어 이런 경우는 기본값 1GB로는 메모리 튜닝이 되지 않으며, 이 문제에 대한 해결 방법은 커널 모드를
1GB가 조금 넘게 설정하고 유저 모드는 3GB 미만으로 줄일 수 있다는 것이 마이크로소프트의 설명입니다.
*** 중요한 것은 이러한 메모리 조정을 사용자가 직접 설정을 하더라도 실제적으로 어플리케이션 메모리 튜닝 모델과 함께 작동을 하지 않으면 무의미합니다. 우리들이 사용하는 대부분의 응용 어플리케이션들은 이러한 메모리 튜닝 모델에 적용되지 않는 쪽에 가깝습니다. 배우기(Mr.Learn) 역시도 어떤 소프트웨어에서 가능한지 파악하기도 어렵습니다. 따라서 사용하는 소프트웨어가 메모리 튜밍 및 어플리케이션 메모리 튜닝이 가능한지는 직접 소프트웨어 공급자에게 확인해야 합니다. PAE의 경우는 주로 DB나 통계 프로그램처럼 많은 데이타를 다루어야 하는 경우 사용된다는 것이 마이크로소프트 설명입니다.
3. Windows가 보고하는 메모리가 실제 메모리 용량보다 작은 이유

가장 많은 Windows 사용자들이 궁금해 하는 것이 Windows가 4GB를 인식하지 못한다고 하거나, 4GB에 구멍이 있다거나, 4GB를 모두 사용하지 못한다라는 생각을 가지고 있는 경우가 흔합니다. 지식 서비스, 유명 하드웨어 커뮤니티 등에서 잘못된 정보를 접하기 때문일 것입니다. 그래서 배우기(Mr.Learn)가 이렇게 열심히 설명을 하고 있습니다.^^
3-1. 가상 주소 공간(Virtual Address Space)이 2GB + 2GB로 사용된다는 것을 일단 접수를 하시기 바랍니다. 여기서 2GB라는 것을 실제 메모리로 착각하시면 안됩니다. 실제 메모리는 2GB + 2GB로 분리가 되는 것이 아닙니다.
3-2. Windows는 하드웨어 예약 부분을 제외한 나머지 메모리 모두들 사용(winsat에서 Total physical mem available to the OS) 하는데, 여기서 혼란스러운 것이 바로 하드웨어 예약 공간입니다.
반복 강조하지만, 중요한 것은 하드웨어 예약(시스템 예약)입니다. 실제 메모리에서 가장 많은 부분을 차지하는 것이 하드웨어 예약(시스템 예약)이고, 그 중에 가장 많은 부분을 차지하는 것이 바로 그래픽 카드 관련 사항인 것입니다. XP에서는 non-graphic data를 사용하는 경우가 흔치 않았기에 aperture size(HV마다 차이가 있고, 동적 할당이 가능한 공간)를 바이오스 셋업에서 줄일 수 있다면 실제로 하드웨어 예약 공간을 줄여
보다 많은 용량을 어플리케이션이 사용할 수 있지만, 비스타부터는 디바이스 드라이버 모델, WDDM(Windows Device Driver Mode)이 적용되기 시작을 해서 에어로(Aero) 테마에 직접적인 영향을 주게 됩니다. 그리고 WDDM 드라이버들은 시스템 메모리의 일정 부분을 잘라내서 비그래픽 어플리케이션과 공유합니다. 이와 같은 정보는 이미 배우기(Mr.Learn)가 WDDM관련 웹로그를 작성하면서 누차례 강조하고 있습니다. 그래픽 관련 공유 메모리는
Windows 디스플레이 등록 정보상에서 확인이 가능합니다.
윈앤위의 배우기(Mr.Learn)가 집중해서 작성한 이전의 웹로그들은 주로 WDDM을 근거로 사용 가능한 실제 메모리 용량을 파악하고자 했던 것이었는데, 전자공학적으로 단순히 MMIO로만 접근하는 사람들 대부분이 이러한 WDDM 메커니즘을 생각하지 않고 단순한 I/O 맵핑의 빈 공간이 발생하는 것만을 가지고 상당한 공간을 Windows가 사용하지 못한다고 보기 때문에 논란이 일어난다 생각이 되는데, 오히려 배우기(Mr.Learn) 더러 MMIO에 대한 개념이 없다고 합니다.^^ 누가 개념이 없는 것인지는 이미 배우기(Mr.Learn)가 수차례 작성한 웹로그로 확인할 수 있으므로 참조하십시오.
http://winnwe.com/windowsweblog/perma/1219 : 32비트 시스템에서의 WDDM을 이해하시려면 해당 URL과 연관된 모든 문서를 자세하게 파악해야 합니다. 이것은 어찌보면 일반 사용자들이 아닌 대학이나 대학원 과정에서 다루어지는 컴퓨터 공학관련 전문분야라는 생각이 듭니다. 심지어는 PC관련 기자도 조차도 어려울 수 있습니다. 일반 사용자님의 경우는 너무 어렵다고 생각이 되시면 그냥 배우기(Mr.Learn)를 신뢰하시고 이 웹로그의 그림 정도만 이해하셔도 좋습니다.
자! 이제 마지막으로 위의 사항을 연결을 해서 Windows 메커니즘에 대해서 짧게 나마 설명합니다.
4. Windows 가상 주소 공간과 실제 메모리의 관계

위에서 가상 주소 공간과 실제 메모리의 관계를 먼저 끄집어 낸다면 혼란을 줄 소지가 있다고 판단을 했고, 이렇게 웹로그 말미에 설명을 하는 것이 좋다라고 판단을 했습니다. 가상 주소 공간과 실제 메모리를 각각 분리해서 생각을 하고 구분이 가능하다면 이제 두 개를 연관지어 이해를 해야 합니다. 즉, 메모리 관리(Windows Memory Management) 메커니즘을 이해하는 것입니다.
4-1. 우리가 Windows에서 프로그램을 실행시키면 Windows는 각 프로그램(작업관리자의 프로세스) 마다 4GB 가상 주소 공간을 할당 받아 작동을 합니다. 예를 들면 위의 이미지처럼 A, B, C라는 3개의 프로그램을 실행시켜면 이들은 모두 각각 4GB라는 가상 주소 공간을 가지고 운영이 됩니다. 그렇지만 이들 프로그램들은 앞서서 설명한 것 처럼 4GB의 가상 주소 공간에서 유저 모드 2GB라는 제한을 받게 되므로 그 이상의 추가적인 공간은 할당 받을 수 없습니다. 그렇지않고 2GB이상의 가상 주소 공간을 사용하려면 앞서서 처럼 메모리 튜닝 모델(4GT/PAE)을 설정해서 최대 3GB까지 사용 가능합니다. 여기서는 메모리 튜닝 모델이 적용된 것이 아닌 Windows의 일반적인 경우로써 커널 모드 2GB + 유저 모드 2GB가 사용되는 보통의 경우를 설명하는 것입니다. 기술적으로는 휠씬 더 복잡합니다만, 이 웹로그에서는 주소 변환과 같은 것들은 생략하고 일반 사용자 입장에서 이해할 수 있는 것들을 대략적으로 정리합니다.
4-2. 각 프로그램들이 사용하는 주소 공간은 기본적으로 유저 모드의 2GB입니다. 이 2GB를 사용하도록 Windows가 프로그램에서 공간을 할 경우(커밋), 실제 메모리(RAM)와 가상 메모리(하드 디스크의 pagefiles.sys)를 혼합해서 할당을 합니다.(이에 관해서 자세하게는 앞으로 윈앤위에서 다룰 예정.) 왜냐하면 프로그램 A, B, C가 있다고 한다면 A에게만 메모리 자원을 집중시켜 할당할 수 없기 때문입니다. Windows와 함께 이미 시작 프로그램도 가동이 되고 또 앞으로 실행될 프로그램도 있어, 오로지 A에게만 집중시킬 수가 없다는 것입니다. 또 Windows는 다중 창으로 다중 작업을 하는 특징을 가집니다. 그래서 각 프로그램(프로세스)들은 독립적인 실행 공간을 갖는 것이 당연하겠지요. 이러한 32비트 시스템에서 3가지 경우의 수를 놓고 생각해 봅니다.
1. 실제 메모리를 4GB를 장착하고 가상 메모리를 자동 크기로 잡아 사용하는 경우
2. 2GB의 실제 메모리와 2GB의 가상 메모리로 설정해서 사용하는 경우
3. 1GB의 실제 메모리와 가상 메모리를 자동 크기로 잡아 사용하는 경우.
프로그램 A, B, C를 실행하는 어떤 경우가 Windows의 퍼포머스가 좋겟습니까? 1번의 경우 Windows가 실제 메모리가 많으므로 당연히 Windows 퍼포먼스가 가장 좋겠지요. 만약 오랜 시간 사용하다가 메모리가 부족하다면 Windows가 자동적으로 가상 메모리를 할당해 줍니다. 이러한 경우는 웬만한 고용량의 프로그램을 실행을 해도 끄떡 없이 상당시간 Windows의 퍼포먼스가 유지되면서 쾌적한 상태를 유지합니다. 2번의 경우는 1번 보다는 오래 버티지는 못하겠지만, 적절하게만 사용한다면 큰 무리가 없을 것입니다. 그런데 3번의 경우는 실제 메모리가 1GB밖에 되지를 않으므로 다른 2가지의 경우 보다는 실제 메모리가 빠르게 소비가 되고 가상 메모리 사용 빈도가 높아지게 됩니다. 실제 메모리 보다는 가상 메모리의 사용빈도가 높아지게 되면 결국, 하드디스크에 의존을 많이 하게 되니까 페이지 파일 사용빈도도 놓아지고 입출력(I/O) 부하가 걸리게 되어 창간 작업 전환이 슬로우 모션이 됩니다. 하드 디스크는 버벅거리고 화면은 느려터지게 됩니다.
4-3.자! 이제까지 배우기(Mr.Learn)가 Windows 메니커즘을 나름대로 기술적 근거를 바탕으로 정리를 해드렸는데, 결론은 바로 실제 메모리가 많은 경우 Windows가 더 오랜 시간 쾌적하게 돌아간다는 것입니다. 그렇기 때문에 당연히 사용자가 램을 많이 장착하는 것입니다. 램이 1GB, 2GB, 그리고 32비트의 최대치인 4GB를 놓고 볼 때 과연 어떤 경우가 더 오랜 시간 Windows를 쾌적하게 사용할 수 있을까요?
당근! 4GB입니다.^^
Windows에 대해서 좀 아는 척 하는 사람들이 무슨 Windows가 3GB 밖에 인식을 못한다는 등, 구멍이 있다는 등 하는데, 이들이 주장하는 것이 전혀 기술적 근거가 없다는 것임을 알아야 합니다. Windows의 메커니즘에 대한 마이크로소프트 기술 문서는 단 한 줄도 읽지 않은 사람이라고 밖에 할 수 없습니다.
4-3. 가장 오른쪽 그림에서 처럼 실제 메모리(램)만으로는 놓고 볼 때 결국 사용자들은 몇 GB의 램을 장착하느냐라는 것입니다. 4GB를 장착해도 Windows는 모두 사용합니다. 단지 Windows가 정확하게 용량을 보고하지 못하기 때문에 그렇습니다. 그러나 Windows XP에서 비스타 그리고 Windows 7을 거쳐 오면서 기술이 발전을 해서 그래픽 카드의 성능에 따라서 보다 많은 하드웨어 예약 공간을 사용합니다. 왜냐하면 Windows(CPU와 함께)가 하던 일을 이제는 그래픽 카드가 처리하기 때문이고 이로 인해서그래픽 성능을 강화하는 WDDM이 탄생을 한 것이고, 그래픽 카드 전용 메모리 외에도 시스템 메모리까지 추가적으로 사용합니다. 기술적인 자세한 사항을 이해하려면 비스타부터 도입된 WDDM을 이해하는 것이 관건입니다.(윈앤위 페이지의 검색을 통해서 WDDM관련 웹로그를 읽어 보시기 바랍니다.) 그래픽 카드의 전용 메모리가 256MB, 512MB, 1GB가 있을 때 가장 좋은 성능을 내는 1GB 그래픽카드가 256MB와 512MB 보다 더 많은 공간을 사용하면서 더 좋은 성능을 내는 것입니다. 512MB는 256MB보다 좀 더 많은 시스템 메모리를 사용합니다. 이렇기 때문에 32비트에서 주 메모리를 4GB로 한정할 경우 그래픽 전용 메모리를 많이 가진 경우가 좀 더 많은 실제 메모리를 소비하게 됩니다. Windows가 4GB를 인식을 못하거나 4GB에 구멍이 있어서가 아닙니다. 일반적인 램디스크로 시스템 메모리를 강제로 공간을 만들면 램디스크내의 프로그램은 빠를지 몰라도 전체 Windows 퍼포먼스는 저하될 것이고, PAE를 이용해서 하드웨어 예약 공간을 리셋시켜 재배치하는 경우는 하드웨어 예약 공간을 건들이기 때문에 시스템이 불안정해집니다. 따라서 특별한 목적이 있지 않다면 램디스크라는 것은 유용한 것이 아니기에 배우기(Mr.Learn)는 램디스크를 권장하지 않습니다.
보다 많은 램을 장착하는 것이 Windows 성능을 높히고 쾌적한 컴퓨팅을 즐길 수 있습니다. 또한 가능하다면 32비트 보다는 4GB이상을 장착한 64비트를 권장합니다. 시대적으로도 이제는 레지스트리를 조작한 최적화나 램디스크를 이용한 특정 프로그램의 실행 속도를 높히는 시대는 끝나가고 있습니다. 시스템 사양이 그만그만할 때 적용하던 것들은 점점 쓸모가 없어지게 되고, 보다 발전된 하드웨어 시대로 가고 있는 셈입니다.
포토샵으로 그림을 그리기 시작을 해서 마지막줄까지 이 웹로그 하나가 무려 5시간 이상이 소요된 듯 합니다. 배우기(Mr.Leaen)의 정성을 대한민국 32비트 모든 유저들에게 드립니다.^^
무식한 것인지 용감한 것인지, 네이버 상습 펌질 및 양심불량 블로그(
blog.naver.com/spef)는 윈앤위 게시물 모두 삭제하십시오!
개인 운영 사이트라고 만만하게 생각하고 콘텐츠 복제하나본데 그러다가 큰코 다칩니다.
저작권자 동의없이 콘텐츠 복제를 금합니다. 동의를 거쳐서
이용 규칙을 준수하십시오!
작성날짜 : 2009년 10월 24일
작성시간 : PM 11시 06분 28초
퍼브리셔 :
배우기(Mr.Learn)
저작권자 : Powered by 윈앤위
코멘트는 누구에게나 열려 있습니다.
트랙백도 블로거에게 열려 있습니다.