Partilhar via


Windows 메모리 FAQ, 2탄

작년 이맘때 ‘4GB 제한의 진실, 32비트 Windows (XP, Vista, 7)클라이언트’라는 글을 올렸었는데 아직까지도 많은 분들이 해당 글을 찾아주시고 많은 질문들을 올려주고 계십니다. 그만큼 메모리에 관심이 많으시다는 것이겠죠. 그래서 이번 포스팅에서는 Windows 메모리 FAQ에 이은 Windows 메모리 FAQ 2탄을 진행 하도록 하겠습니다. 내용이 FAQ인데다 좀 딱딱해 첨부터 끝까지 다 읽으시라고 말씀 드리기 어려울 것 같고, 필요하신 분들이 검색으로 찾아 보시고 도움 받으셨으면 합니다. ^^

1. 윈도우 메모리를 이야기 할때면 가상메모리(Virtual Address)와 물리메모리(Physical Address)라는 용어가 자주 나오는데 어떤 뜻인지 궁금해요.  : 첨부터 어려울 수도 있는 질문이군요. 많은 분들께서 Virtual Address와 Physical Address를 혼돈하고 계시고 실제 정확한 의미를 이해하지 못하고 계신 듯 합니다. 가상메모리는 Process가 사용하기 위한 가상의 메모리 공간을 이야기 합니다, 예를 들어 작업 관리자에서 각각의 프로세스들이 보이죠? 그 프로세스가 사용하는 메모리가 바로 가상메모리입니다, 32비트를 기준으로 윈도우가 각각의 프로세스에 가상으로 한 프로세스당 최대 2GB를 사용할 수 있도록 할당해줍니다(여기서 나머지 2GB는 다른 프로세스와 공유하는 커널 모드이므로 제외합니다), 즉 32비트에서 사용할 수 있는 최대 프로세스의 메모리 크기는 2GB입니다, 그러나 이는 뒤에 나올 PAE, 4GT기술을 만나면 또 달라집니다. 그리고 물리메모리는 컴퓨터 메인보드에 꽂혀있는 메모리 RAM을 의미합니다, 즉  실제 메모리 공간을 의미 합니다.

2. 32비트 윈도우 클라이언트가 4GB 메모리를 다 사용하지 못하는 영향을 끼치는 디바이스 요인으로 MMIO를 언급하셨는데 그 이외에는 없나요?  : 네, 운영체제 입장에서 해당 이슈에 가장 큰 영향을 주는 디바이스 요인이 MMIO라서 일반적으로 MMIO 이슈라고도 부릅니다. 그러나 정확히 표현하면 Memory Mapped I/O 이외에 System BIOS, Motherboard Resources (I/OxAPIC), PCI Express* Configuration Space, Additional PCI Device Memory (Graphics Aperture), VGA Memory와 같은 것들이 영향을 준다고 표현하는 것이 좀더 정확합니다.

3. PAE(Physical Address Extension)란 무엇인가요?
: PAE는 4GB가 제한이었던 32비트 CPU의 물리메모리를 더 크게 확장하기 위해서 Intel Pentium Pro부터 CPU가 36비트 메모리 어드레스을 하도록한 확장 기술 입니다. 즉 32비트 CPU에서도 PAE를 사용하면 36비트 어드레싱이 가능해집니다, 여기에 윈도우가 36비트 어드레싱을 사용할 수 있게 되면 물리메모리 크기를 최대 192GB까지 확장되는데, 우리는 윈도우에서도 이것을 PAE 기술이라고 부릅니다. PAE를 사용하는 법과 자세한 사항을 여기를 클릭하시면 보실 수 있습니다. 단 PAE를 사용한다고 해도 32bit Windows 클라이언트의 4GB 제한은 그대로 유지 합니다.

4. 4GT(/3GB)란 무엇인가요?  : 원래 각각의 프로세스에게 할당해주는 가상메모리는 시스템(커널)영역 2GB, 유저영역 2GB씩 할당 받습니다. 그러나 시스템 영역은 다른 프로세스들과 공유하는 영역이고 실제 프로세스는 2GB의 영역만 사용할 수 있게 됩니다. 그러나 경우에 따라서 가상메모리 2GB가 모자르다고 판달 할 때는 가상메모리 공간(virtual address space)의 시스템(system)을 2GB에서 1GB로 줄이고 그 남은 1GB를 유저영역(application)에게 할당하여 3 GB로 확장하는 기술입니다. 즉 다시 말해 가상메모리 튜닝 기술이라고 생각하시면 되겠습니다.

가끔 PAE를 Enable 가면 가상 메모리 응용프로그램2:시스템2에서 응용프로그램3:시스템1로 변환하는 것으로 엉뚱하게 생각하시는 분들이 계시는데. 2:2에서 3:1로 변환하는 것은 4GT입니다. PAE는 단지 CPU에서 36비트 어드레싱을 할 수 있는 환경이 구성되면 운영체제는 36비트 어드레싱을 할 수 있는 커널을 불러 36비트 메모리로 변환하는 것 입니다.

*일반 개인사용자들이라면 4GT에 대해서 고민할 필요가 없다고 말씀 드리고 싶습니다. 일반 응용프로그램이 가상메모리를 2GB이상 필요로 하는 경우는 흔하지 않습니다. 대용량 메모리를 필요로 하는 서버 제품의 경우 유저모드의 넉넉한 메모리 확보를 위해 4GT를 사용하곤 하는데 이 때문에 드물지만 문제가 발생하는 경우가 있습니다. 앞에서 말씀 드렸듯이 4GT로 응용프로그램 영역를 3GB로 늘렸다는 것은 시스템 영역을 2GB에서 1GB로 줄였다는 의미가 됩니다, 이러한 연유로 시스템 관련 메모리 리소스 부족을 불러 일으킬 수 있습니다. 쉬운 예를 들어 네트워크 Connection이 많이 일어나는 응용프로그램의 경우에는 가상메모리에서 모든 프로세스가 공유해서 사용하는 시스템(커널) 영역에 연결정보를 저장하는데 Conncetion이 지나치게(?) 많이 연결되는 경우 2GB였을 때는 문제가 없었지만 1GB로 줄이는 바람에 시스템 영역 메모리 부족으로 커널 관련된 작업이 불가능하게 되어 더 이상 연결이 되지 않는 문제가 발생할 수 있습니다. 이러면 연결 되어 있던 클라이언트들은 사용에 문제가 없지만 새로 연결하려는 클라이언트는 연결에 실패하게 되죠. 이런 경우 Platform을 지원하는 엔지니어와 해당 어플리케이션 지원 엔지니어간의 논쟁이 일어날 가능성이 높습니다.(경험담임다)쿄쿄쿄!

4. ‘ 4GB 제한의 진실, 32비트 Windows (XP, Vista, 7)클라이언트 ’라는 글에서 드라이버 호환성 때문에 4GB 제한을 두었다고 했는데 혹시 윈도우 커널이 4GB상 구현하지 못하는 문제를 디바이스드라이버 핑계 대는건 아닌가요? -_-++
: Windows Vista 이후 부터는 Windows Server와 동일한 커널을 사용합니다. 코어커널에서 서버와 클라이언트는 단지 클라이언트에서 4GB 제한을 둔것 뿐입니다. 만약 커널의 문제 때문이라면 32비트 Windows Server 2008 (혹은 R2)도 동일한 문제가 생겨야겠지요 ^^

5. 그럼 64비트 윈도우를 사용하면 성능 향상을 체감적으로 느낄 수 있나요?
: 64비트를 사용하면 더 빠른 처리가 가능합니다, 그러나 그것은 64비트 프로세서가 특별라서가 아닌 64비트 어드레싱으로 인해 더 많은 메모리를 사용 할 수 있다는 것입니다. 즉 그 의미는 4GB 이상 대용량의 메모리를 사용하는 어플리케이션을 이용해야 64비트의 참맛(!)을 느낄 수 있습니다. 일반적으로 데이타베이스 어플리케이션에서 대용량 메모리를 필요로 합니다, 아직은 그런류의 대용량 메모리를 필요로 하는 응용프로그램을 일반 사용자가 접할 기회가 많지 않습니다.

6. 메모리를 많이 사용해서 시스템 성능이 좋아진다는 것은 무슨 의미인가요?
: OS는 자신이 사용하는 메모리 이외에 기억저장소로 하드디스크를 함께 이용합니다. 하드디스크의 C 드라이브를 보면 pagefile.sys라는 파일 보이시죠? 그것을 페이징 파일이라고 부르는데 윈도우에게는 또 다른(?) 메모리와 같은 존재 입니다. 실행을 위해 파일에 있는 데이타를 메모리에 읽었다가 사용빈도나 우선 순위에 따라 페이징 파일로 보내기도 하고 다시 메모리로 불러오기도 합니다. 만약 시스템의 물리 메모리가 아닌 하드디스크에서 직접 데이타를 읽어야 한다거나 페이징 파일에서 데이타을 읽어 와야 한다면 성능에 어떤 영향을 끼칠까요? 하드디스크는 메모리보다 훨씬 읽기/쓰기 성능이 아주(!) 낮기 때문에 읽고 쓰는 시간의 Delay로 인해 OS 성능에 영향을 줄 것 입니다. 예를 들어 15GB의 응용프로그램의 데이타를 메모리에 모두 올려놓고 사용하는 것과 메모리에 4GB만 올려놓은 상태에서 나머지는 하드디스크에 놔두는 것, 이 두가지 어느 경우가 더 좋은 성능을 낼까요? 당연히 답은 당연히 전자겠죠? 그래서 메모리가 많으면 성능이 높아진다는 이야기를 합니다. 하지만 무조건 메모리가 높다고 성능이 향상되는 것이 아닙니다, 메모리 사용을 적은 응용프로그램은 메모리가 많은 시스템에서 돌아간다 해도 성능상 누릴 수 있는 이점을 적을 것 입니다, 이럴때는 다중코어나 속도가 높은 CPU가 도움이 될 것 입니다.

7. PCI와 같은 장치에 붙은 메모리에 디바이스 드라이버가 올라가는 것 아니었나요?
: 의외로 많은 질문인데요, 디바이스 드라이버는 Windows가 Access할 수 있고 관리(Memory Management) 가능한 물리 메모리(RAM)에 올라 갑니다. PCI 메모리는 Windows가 접근 할 수 없습니다.

8. Windows XP SP2를 보면 32비트 클라이언트임에도 불구하고 PAE가 Enable 되어 있는데 이건 4GB 이상으로 확장할 수 있다는 의미 아닌가요?
: DEP를 사용할 때 PAE가 필요한 이유는 32bit에서는 존재하지 않는 64bit PTE table의 field를 이용하기 때문입니다.

9. X64 CPU에 Windows를 설치하면 윈도우가 64비트로 돌아(?)가게 되나요?
이 또한 아직까지 많은 분들이 여쭤보시는 내용중 하나 입니다. X64가 진정한 64bit computing을 하기 위해서는 ‘X64 Processor + Windows x64 edition + 64bit Application‘ 환경이어야 합니다, 이중 하나라도 32비트가 되면 전정한 64비트 컴퓨팅이라고 할 수 없습니다. 정확한 내용은 여기를 클릭해 이전에 쓴 글을 확인해 보시기 바랍니다.

그럼 즐거운 봄을 만끽하며 전 이만~~

Comments

  • Anonymous
    January 01, 2003
    먼저 칭찬의 말씀감사드립니다. :) 램디스크에 대한 이야기들이 종종 나오는데 이 부분에 대해서는 아쉽게도 제가 정확히 드릴 말씀이 없습니다. 이유는 저희 제품이 아니기 때문에 제가 그 구조를 속속들히(?) 알 수 없기 때문입니다. 제가 예상 할 수 있는건 램디스크가 확보하는 공간은 일종의 케쉬와 유사한 역활로 사용될 것이라는 것 하지만 클라이언트에서 4GB이상의 Memory addressing을 할 수 없을 것이라는 것입니다. 해당 제품을 사용했을 때 성능의 우위에 대해서는 저는 우선 해당 도구를 사용하면 성능이 좋아질거라고 예상해봅니다, 나쁘다면 그 제품이 나올 이유가 없겠지요 ^^  그리고 정확한 표현은 아니겠지만 말씀하신 '딜레이'는 분명 있을 것 입니다, 중간에서 램디스크가 끼면서 어떤 변화가 있을테니까요, 그러나 그 딜레이(?)가 어느정도 될거라는 것은 제 입장에서는 예측하기 어렵습니다. 추가로 기술지원부 엔지니어의 입장에서 말씀드리면 해당 도구를 사용하다가 Kernel crash가 발생한다면 램디스크가 중간에서 어떤 일을 하는지 알수 없기 때문에 기술지원이 어렵다는 것입니다. 방문 감사드리고요, 좋은 하루 되세요

  • Anonymous
    January 01, 2003
    안녕하세요? :) 4GB메모리 사용이라기 보다는 4GB 메모리 어드레싱이라고 보는게 맞습니다, 즉 4GB 어드레싱을 하는 것입니다. 6GB까지 나오게 하는 툴을 설치 해서 나머지 4GB가 나타난 것은 그 2GB를 일종의 캐쉬의 성격으로 사용할 가능성이 높습니다, 캐싱과 같은 다른 용도지 메모리 어드레싱을 6GB로 하는 것은 아니라는 의미 입니다. 해당 툴이 2GB를 보여주고 어떤 용도로 사용하는지는 해당 툴 제작사에 문의 하시는게 정확하지 않을까 생각되네요. ^^ 방문감사드리고요, 즐거운 한주 되세요~

  • Anonymous
    January 01, 2003
    우왕~ 감사합니다. 퍼시는거 관계 없고요, 그리고 일부 내용만 발취하는건 오해의 소지가 있으실 수 있으므로 가능하시면 전체 문서를 Reference 할 수 있도록 링크도 함께 달아주시면 감사하겠습니다. :)

  • Anonymous
    January 01, 2003
    ㅎㅎ 방문 감사드려요~ :)

  • Anonymous
    January 01, 2003
    메모리에 대한 자세한 설명에 감사드립니다. 어렵게 어렵게 이런 별천지를 찾게 되었네요...^^; 제 블로그에도 내용을 퍼가도 될까요?????...^^ 여기 내용 퍼가도 될까요?? 이런거는 좀 팍팍 공개되었으면 하는 생각을 가진 1인이었습니다...^^;

  • Anonymous
    January 01, 2003
    네~~ :)

  • Anonymous
    May 09, 2010
    역시 메모리는 다다익선이군요. 유용한 정보, 잘 보고 갑니다.

  • Anonymous
    May 10, 2010
    아 PAE가 저런 의미였군요! 아크몬드님 블로그에서 타고 와서 좋은내용 잘 보고 갑니다 ^^

  • Anonymous
    July 20, 2010
    안녕하세요. 램디스크 검색하다 왔는데 전문적인 내용에 감탄했습니다. 거의 대다수의 무명유명사이트들이 외국 사이트의 간단한 팁 번역 정리된 내용들인데 여긴 진짜 전문가분이 상세하게 원리를 설명해주니 좋네요. 근데 원래 궁금했던건 아직 답을 못찾았는데 답 부탁드립니다. 4기가 이상 램 사용할때 램디스크에 가상메모리를 넣는것보다 가상메모리 없는게 더 낫을지 궁금합니다. 본문 6번에서 약간 나온 내용인데.. 짐작컨데.. xp에서는 일단 물리메모리(이후 메모리)를 쓰다가 잘 안쓰는 내용은 가상메모리로 복사한 다음 메모리에선 지웠다가 나중에 필요하면 가상메모리에서 불러서 쓰고.. 즉 처음부터 메모리의 연속공간으로써 메모리가 꽉차면 순차적으로 메모리 역할을 하는게 아니고... 램도 읽고 쓰는 속도가 하드보다 빠른거지 어쨌든 램에서 램이지만 한번이라도 더 복사한다면 그만큼 딜레이는 있을테니까요. 수많은 웹상에 있는 램디스크 팁 가상메모리 사용..이게 사실과 다른거 같아서 확실한 진실^^을 알고 싶어 검색하다 여기까지 왔네요. 웬지 주인장님은 정답을 아실거 같아서 질문 남깁니다.

  • Anonymous
    May 29, 2011
    상킴님의 전문적이고 정확한 글을 찾는데 꼬박 3일이 걸렸네요. 메모리 관련해 좋은 글을 많이 써주셨더군요.. 큰 도움이 되었습니다. 궁금한 점이 있어서 저도 질문을 드리고자 합니다. 저는 지금 윈도7(32bit) + 6GB 메모리 환경입니다. 인터넷 돌다가 ReadyFor4GB 라는 프로그램 다운 받아 실행했구요. 지금 작업관리자에서 실제 메모리 6091로 보여집니다. 시스템 정보창엣서도 기존 설치된 메모리(RAM) : 6.00GB(3.8GB) 에서 지금은 그냥 6.00GB 로 표시되구요... 그런데 상킴님의 말씀대로라면 PAE 옵션으로 메모리 어드레싱은 36bit 체계로 128GB까지 가능은 하지만 windows client OS 이므로 실제 사용 메모리는 4GB제한에서 변함 없다고 이해하는 것이 맞는 것인가요? 만약 그렇다면 나머지 2.xGB는 시스템 정보에서 보여주는 것과 달리 사용하지 못하면서 표시만 해주는 셈이 되는 것이고 낭비되는 메모리라 볼 수 있는 것인가요? 그러니까 PA는 잡아주지만 Client OS에서는 VA가 4GB로 제한되어 있으므로 아무리 물리적 어드레싱을 해주어봐야 실제 사용되는 것은 VA로 할당된 만큼만 사용이 된다고 볼 수 있는 것인지요? 만약 그렇다면 나머지 2.xGB를 활용할 방법은 없는지요... 예를 들어 남는 메모리를 RAMDISK와 같은 프로그램으로 HDD처럼 잡아서 Pagefile.sys를 대체한다거나 응용프로그램들의 캐쉬영역으로 잡아서 기존 HDD보다 빠른 입출력으로 속도 향상을 꾀한다거나 하는 것이 가능한지요... 조언좀 부탁드립니다.

  • Anonymous
    February 20, 2012
    이 댓글을 보시려나 모르겠지만, 혹시나 보시거든 가능하시면 답변 부탁드립니다.

  1. XP에서 램이 2GB일 경우, 커널 1GB /  응용 1GB로 나뉘나요? 그렇다면 보통 램 2GB만 해도 XP사용은 거의 문제가 없는데, 도대체 왜 /3GB에서는 커널 1GB 만들었다고 문제가 생길까요?
  2. 블루스크린이 뜰때 커널메모리 덤프로 저장합니다. 그런데 저장된 파일의 용량이 200MB정도였다면, 커널 512MB정도로 만든다고 해도 문제 없을까요?(물론 가능하다고 가정하고요.)
  3. 4GB 후반 어드레스영역이 시스템에서 사용하는 주소와 겹쳐서, 32비트 OS에서는 보통 3.25GB, 3.5GB 정도가 실사용 가능영역으로 표시됩니다.(제 경우에는 3.35GB. 내장그래픽이 꿀꺽한거 감안하면 아마 3.5GB일듯) 까먹은것을 0.5GB라고 가정하구요, 그렇다면 2GB/2GB 나누는 것에서 0.5GB는 어디에 들어가게 됩니까? 커널에서 까먹어서 1.5GB만 쓰게 만드는건가요, 응용프로그램에서 까먹어서 1.5GB만 쓰게 만드는건가요? 만약 커널이라면 /3GB옵션을 쓸 이유가 그닥 없는데(LAA 지원프로그램 아니면 사용불가), 응용프로그램이라면 커널쪽을 1.5GB정도로 줄여서 1.5GB/2.5GB(실제로는 2.0GB)로 하면 응용프로그램이 제대로 2GB를 다 써먹을 수 있을까요? Sankim님께서도 애매한 부분에 대한 질문이라 답변이 어려우실 수도 있겠지만, 가능하시면 답변 부탁드립니다. 특히 3번이 가장 궁금합니다. ㅠㅠ