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비트 컴퓨팅이라고 할 수 없습니다. 정확한 내용은 여기를 클릭해 이전에 쓴 글을 확인해 보시기 바랍니다.

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