Virtual Memory

가상 메모리란 실제 윈도우 메모리와 매핑된 4GB 주소 공간으로 이 중 2GB는 Kernel Mode 프로세스가 사용하며, 나머지 2GB는 User Mode 프로세스에서 사용하게 됩니다. Kernel 영역은 작업 관리자에서도 확인할 수 있듯이 paged pool 영역과 Non-paged pool 영역으로 나뉘게 됩니다. paged pool 영역은 Kernel이 사용하는 메모리 중 디스크에 매핑된 영역으로 300~350MB 까지 사용 가능합니다. 반면, Non-paged pool 영역이란 Kernel이 사용하는 메모리중 RAM 에 있는 영역으로 256MB까지 사용 가능합니다.

이 두 영역에서 발생하는 exception에 대해 알아보면 다음과 같습니다.

Kernel 영역에서 unhandled exception이 발생하게 되면 블루스크린이 나타나게 됩니다. 한편, User 영역에서 exception이 발생하면 First Chance Exception이 발생하고, User 영역에서 이 예외 처리를 담당하는 Handler 를 찾게 됩니다. 이때 찾을 수 없다면 Second Chance Exception이 발생하게 되며, Windows OS에서 Handler 를 찾게 됩니다.

추가적으로 메모리 관리에는 다음 세가지 개념이 연관되어 있습니다. Virtual Bytes란 프로세스에서 필요한 메모리를 예약해 놓은 공간이라고 할 수 있습니다. 그리고, Private Bytes란 특정 프로세스에서 commit 한 메모리 공간으로, 실제 프로그램 상에서 1MB를 allocation 한다고 한다면 이는 private bytes의 1MB를 의미합니다. 따라서, 어떤 프로세스에서 메모리 누수가 발생한다고 하면, 이값을 참조하여야 합니다.

마지막으로 Working Set 이란 실제 물리적인 메모리 사용량을 의미하며, 이는 성능 문제가 발생할 때 참고할 수 있는 값입니다.