전체 원본 내용 : http://members.shaw.ca/bsanders/WindowsGeneralWeb/RAMVirtualMemoryPageFileEtc.htm
원본 : http://support.microsoft.com/kb/555223
윈도우를 포함한, 최신 운영체제 대부분은 응용 프로그램이나 각종 프로세스를 실행할 때, 실제 메모리 주소 공간과 매핑되어 있는 가상 메모리 주소 공간 상에서 항상 실행되도록 되어 있습니다. 단지 운영체제 핵심 커널만 실제 메모리 주소 공간을 이용하게 됩니다.
가상 메모리를 항상 이용 함으로써 시스템 상에 설치된 물리적인 램 크기를 넘어서는 용량이 필요한 프로세스들도 정상적으로 동작하게 됩니다.
프로세스와 주소 공간
32 비트 윈도우에서는 실제 시스템 상에 메모리가 얼마이든 간에 모든 프로세스는 4G(Giga Byte)[ 2 ^ 32 -1) ]의 용량의 가상 메모리 주소 공간을 가져올 수 있습니다.
기본 윈도우 설정을 기준으로 4G 중 2G 부분은 프로세스 개별적으로 이용하게 되는 주소 공간이고 나머지 2G는 다른 프로세스 및 운영체제와 공유해서 이용하게 되는 주소 공간입니다.
그래서 보통 응용 프로그램(메모장, 엑셀, 인터넷 익스플로어 등)은 2G 개별 주소 공간내에서 실행되도록 구성 되게 됩니다. 이 때 운영체제는 단지 응용 프로그램에서 필요로 하는 용량 만큼 가상 메모리 페이지 크기에 맞게 RAM상에 페이지 프레임(Page Frame)을 지정하게 됩니다.
여기서 물리 주소 확장(Physical Address Extention : PAE)이라는 기능이 있는데, 물리 메모리 주소를 36 비트로 확장해주는 32비트 아키텍처 입니다.(역주: 32비트 컴퓨터에서는 보통 32 비트의 물리 메모리 주소, 즉 최대 4G [ 2 ^ 32 - 1 ]의 주소공간을 가질 수 있읍니다. 이를 36비트로 확장한다는 의미입니다. 그러므로 최대 64G[ 2 ^ 36 - 1 ]의 주소공간을 가질 수 있게 됩니다.) - 참고 할 만한 정보로는 http://support.microsoft.com/kb/268363 를 보시면 됩니다. 그러나 이 가상 메모리는 PAE로 인해 크기적인 변화가 없으며 단지, 프로세서(CPU)에서 시스템 내에 설치된 메모리의 주소 영역만 확장되는 것입니다.
이 때 프로세스 내에서 동작되는 32Bit 기준의 가상 메모리 주소 공간과 36Bit 메모리 주소 공간 간의 변환 작업은 운영체제에서 관리하는 변환 표(Translate Table)에 따라 하드웨어 상에서 자동적으로 제어되며 투명하게 변환이 됩니다.
다음 목록은 각각 윈도우 버전 및 에디션에 따른 지원되는 최대 램용량입니다.(2004년 11월 현재 기준)
Windows NT 4.0: 4 GB
Windows 2000 Professional: 4 GB
Windows 2000 Standard Server: 4 GB
Windows 2000 Advanced Server: 8GB
Windows 2000 Datacenter Server: 32GB
Windows XP Professional: 4 GB
Windows Server 2003 Web Edition: 2 GB
Windows Server 2003 Standard Edition: 4 GB
Windows Server 2003 Enterprise Edition: 32 GB
Windows Server 2003 Datacenter Edition: 64 GB
페이지 파일
램은 제한 적인 자원인 반면, 가상 메모리는 이상적인 주소 공간이기 때문에 이론적으로 제한이 없습니다. 물론 프로세스 별 최대 할당될 수 있는 주소 크기는 2G입니다. 모든 프로세스들이 사용하는 총 메모리 용량이 실제 메모리의 총 용량을 넘어서면, 운영체제에서는 하나 혹은 여러개의 가상 메모리 주소의 페이지(4Kb 단위의 조각)를 하드 디스크 상에 옮기고, 옮겨진 양 만큼의 메모리 공간을 회수 하게 됩니다. 윈도우 시스템에서는 이들 "페이지 아웃(Paged Out)"된 를 pagefile.sys라고 불리는 파일을 한개 혹은 여러 개로, 시스템 하드 디스크의 루트 디렉토리 상에 저장하게 합니다. 물론 이 파일을 각 하드 디스크의 파티션 별로 하나씩 담을 수도 있습니다. 이 부분에 대한 설정은 시스템 등록정보, 고급, 성능(설정 탭을 클릭)에서 하실 수 있습니다.
가장 많은 질문 내용 중에 "페이지 파일을 얼마나 크게 잡아야 되나요?" 라는 것이 있는데, 사실 이 질문에 대한 정확한 한가지 답은 없습니다. 그 이유는 설치된 램 크기와 작업 중에 가상 메모리 사용량에 따라 달라지기 때문입니다. 그 외 특별한 사항이 없다면, 일반적으로 설치된 메모리의 1.5 배의 용량으로 구성하는 것이 가장 좋은 형태라고 권장하고 있습니다. 서버 시스템 중 일반적인 목적을 위해 구성되어 충분한 램 용량을 갖추어 있다면 굳이 페이지 파일을 구성할 필요는 없습니다. 이런 시스템에서는 큰 페이지 파일을 만들어 제공할 필요가 거의 없는 것이죠. 그러나 다른 한편으로는 간혹 발생될 큰 규모의 메모리 할당이 요구 될 시, 시스템 불안정한 상황이 발생할 수 있습니다. 이런 경우를 대비하기 위해 통상 앞서 말씀 드린 1.5배 이상의 가상 메모리를 미리 잡아 두는 것도 나쁘지는 않습니다.
성능, 아키텍처 상 제한 과 RAM
어느 컴퓨터 시스템이든 간에, 작업량(사용자 수, 업무를 수행하는 개수)이 증가되면 성능(업무를 처리하는데 걸리는 시간)은 감소되게 됩니다. 하지만 이 관계는 비 대칭형으로 진행되게 됩니다. 작업량 증가의 형태가 어느 정도였든간에, 극적인 성능 감소를 넘어서는 지점을 넘어서게 됩니다. 이 의미는 몇몇 자원들이 최악으로 소량 제공되어 결국 병목현상을 불러 일으킨다는 것입니다.
몇몇 지점에서는 최악으로 소량 제공되는 자원들이 증가되지는 않게 됩니다. 이는 아키텍쳐 상 제한에 도달했다는 것을 의미합니다. 윈도우의 아키텍쳐 상 제한에 대한 몇가지 보고 내용은 다음과 같습니다.
1. 시스템 상의 2 GB의 공유 가상 주소 공간
2. 프로세스 당 2 GB의 개별 가상 주소 공간
3. 660 MB 시스템 PTE 저장공간
4. 470 MB 페이지 풀 저장공간
5. 256 MB 페이지 되지 않은 풀 저장 공간
위의 내용은 Windows 2003 기준으로 나열된 사항입니다.(KB 294418 글 참조). 그러므로 Windows XP 및 2000에서는 위의 사항과 다를 수 있습니다.
보통 쉽게 접할 수 있는 권장 사항이 다음과 같은 경우 입니다.
터미널 서버를 사용하는데, 4GB를 사용하기 전에 공유 메모리인 2G를 완전히 활용하시오.
대부분의 경우 맞기도 하지만, 여러분이 겪는 상황에 따라 다를 수 있습니다. 몇몇 유형 중에, 특정 Windows NT 4.0 또는 Windows 2000 Server에서 충돌이 발생하거나, Windows Server 2003 중에서 불필요할 수도 있습니다. Windows Server 2003으로 넘어오면서 크게 바뀐 부분 중에 보다 효율적으로 이 아키텍쳐상 제한이 발생되는 가능성을 줄였다는 것입니다. 예를 들면 커널 상의 몇가지 프로세스들을 커널 프로세스에서 제외시킴으로써 공유 가상 메모리 사용량을 대폭 줄였습니다.
RAM 및 가상 메모리 사용량 감시하기
성능 감시기(시작, 관리자 도구, 성능)은 시스템의 성능을 측정하고 병목 현상을 실제 일으키는 사항이 무엇인지를 파악할 수 있도록 도와주는 중요한 도구 입니다. 아래에는 이 도구를 이용하여 측정할 수 있는 중요한 정보들에 대한 요약들을 나열합니다.
Memory, Committed Bytes
- 여기서는 가상 메모리의 의존도를 측정하게 됩니다. 운영체제에서 페이지 파일 내에 RAM 페이지 프레임 또는 페이지 슬롯을 적용한(Commited) 바이트 수와 프로세스 상에서 할당한 바이트수가 얼만큼인지를 보여줍니다.(대부분 2가지 동시에). 이 적용 바이트(Committed Byte) 수는 허용된 RAM 용 보다 늘어나게 되면, 페이징이 증가되며, 사용하는 페이지 파일의 총 용량도 증가됩니다. 몇몇 지점에서는 페이징 작업 자체가 실제적인 성능과 직결되어 영향을 미치기 시작할 것입니다.
Process, Working Set, _Total
- 여기서는 "active"하게 사용되는 가상 메모리 용량을 측정하게 됩니다. RAM내의 모든 프로세스들이 실제적으로 사용하는 가상 메모리에 대해 얼만큼의 RAM 필요한지를 보여주게 됩니다. 여기서는 항상 4,096이 곱해져서 나타내는데, 그 이유는 Windows 상에서 페이지 크기로 그 만큼의 크기를 사용하고 있기 때문입니다.가상 메모리가 사용 가능한 RAM 용량을 넘어서서 의존하게 되면, 운영체제 에서는 사용가능한 RAM과 최소 페이징 이용에 대해 최적화하는 Working Set 에 맞추어 프로세스의 가상 메모리의 양을 조절하게 됩니다.
Paging File, %pagefile in use
- 여기서는 페이지 파일이 실제적으로 사용되는 양을 측정하게 됩니다. 페이지 파일이 적절한 크기 인 경우가 언제 인지 측정하기 위해 사용되는 카운터 입니다. 만일 이 카운터가 100을 가지게 되면, 페이지 파일이 완전히 꽉 찼다는 의미가 되며, 몇몇은 작업을 중지하게 될 것입니다. 작업량의 변화에 따라 충분히 큰 페이지 파일이 필요할지 모르지만, 보통 50~70% 이하로 사용되게 됩니다. 만일 사용된 페이지 파일 수가 적다면, 다른 물리 디스크 상에 하나 또는 그 이상을 가질 수 있게 되며, 성능이 증가되게 됩니다.
Memory, Pages/Sec
- 여기서는 대부분은 잘못 인식된 값의 측정되는 내용 중 하나 입니다. 이 카운터의 최고값이 성능이 RAM 부족으로 인해 병목 현상이 발생된 것이라고 정확하게 의미하는 것은 아닙니다. 운영체제에서는 명시된 메모리에 제공될 스왑 페이지와는 다른 목적으로 페이징 시스템이 이용됩니다.
Memory, Pages Output/Sec
- 여기서는 매 초마다 다른 목적으로 RAM 페이지 프레임이 해제되기 위해 가상 메모리 페이지가 페이지 파일로 얼마나 많이 쓰여 졌는지를 보여줍니다. 이 기능은, 페이징이 성능의 병목현상을 일으키고 있는지 여부를 예측할 때 감시 할 때 사용되는 최적의 카운터 입니다.