관리 메뉴

kisoo

Windows 2000의 메모리 관리 본문

01.About Programming /2.Kernel Lab

Windows 2000의 메모리 관리

JamesK78 2009. 2. 4. 10:42

Windows 2000 32bit 주소 공간을 기반으로 하는 메모리 방식인데 이를 관리 하기위해 Virtual Memory Management(VMM)시스템을 사용한다. -> 이미 64비트 윈도우도 나와있다.

 

 이는 실제 메모리에서 처리 있는 보다 많은 프로그램을 동시에 처리할 있으며, 프로세스 별로 독립된 보호모드의 메모리 공간을 할당하기 때문에 프로세스에서 일어나는 에러나 문제가 다른 프로세스에 영향을 없도록 설계되어 있다.->그러나 커널 프로그램밍은 다르다. 자세한 이유는 나중에 따로 커널 프로그램밍에 대해서 블로그에 정리할 예정입니다. 그때까지 기둘려 주셈^8^



 물리적 메모리 주소는 설치된 메모리의 양에 따라서 한계가 있지만 가상 메모리 주소는 32 bit 이기에 4 GB 가상 메모리 공간을 이용할 있다-> 여기서 질문하나 그러면 64bit 윈도우에서는 64bit 이기 때문에 가상메모리를 얼마나 사용할 수있을가요? 아시는 분을 밑에 덧글로 남겨주세요^^

 

VMM 다음 가지 역할을 한다.

l        프로세스별로 사용하는 가상 주소와 가상 주소가 나타내는 데이터가 실제로 위치한 주소를 연결하는 메모리 매핑 테이블을 관리한다. 쓰레드는 메모리에 대한 액세스를 요청하게 되면 가상 메모리 주소로 요청을 하는 , 때에 VMM 해당 가상 주소를 가지고 실제로 이에 해당하는 물리적 주소를 메모리 매핑 테이블에서 조회하여 이를 쓰레드에게 넘겨 주는 것이다.

l        이렇게 디스크와 물리 메모리 사이에 메모리의 내용을 주고 받는 것을 페이징(Paging)이라고 한다. -> User Mode 프로그램을 할떄는 서버용 프로그램을 제외하고는 크게 고려하지 않아도 된다. 그러나 커널 프로그램을 개발할때는 페이징과 VMM에대해서 확실하게 알고 있어야 한다.

 


가상 주소란 Windows 2000 응용 프로그램이 메모리 참조 사용하는 32bit주소 공간으로서, VMM 4 GB 주소 공간을 2 GB 나누어 상위 2GB 하위 2GB 나눈다.

l        상위 2 GB Kernel mode 쓰레드만 사용 있는 , 상위 2 GB 아래 부분은 실제 메모리 번지와 하드웨어적으로 직접 매핑되어 있기 때문에 굉장히 빠른 액세스 속도를 가진다.

l        하위 2 GB User mode Kernel mode 쓰레드 사용할 있는 , VMM 이를 4 KB단위로 필요한 상황에 따라 디스크로 스와핑(swapping) 하기도 한다.

 


 

 



페이징이란 실제 메모리가 한계에 도달한 상황에서 쓰레드가 현재 실제 메모리에 없는 코드와 데이터를 액세스하려고 때에, VMM 페이지 개를 실제 메모리에서 디스크에 있는 pagefile이라고 불리는 저장장소에 옮겨 놓아서 실제 메모리의 여유를 가진 다음, 여기에 쓰레드가 요구한 코드와 데이터를 옮겨 놓는 작업을 말하는 것이다.

가상 주소 공간은 valid page invalid page 나누는데, Valid page 해당 영역이 실제 메모리에 있을 경우이며, Invalid page 해당 페이지가 실제 메모리에 없는 경우 말한다. 쓰레드가 Invalid page 읽으려 하면 CPU page fault라는 시스템 메시지를 내놓게 되며, 이를 받은 VMM 당장 해당 Invalid page 내용이 들어 있는 디스크로 가서 이를 읽어서 비어 있는 실제 메모리로 가져오는 것이다.-> 만약 대용량 서버 프로그램을 개발할때는 이 부분을  최대한 고려해야 한다. 내 경험상 MemoryPool을 꼭 이용해야 한다. 여기에 대해서도 다음에 ThreadPool과 MemoryPool을 정리해요 기둘리셈~~~

VMM 페이징을 다음의 3 과정을 수행한다.

l        디스크에서 실제 메모리로 페이지를 가져 온다. 이를 페칭(fetching)이라고 한다. VMM 페칭 때에 Invalid page 뿐만 아니라 아래위의 다른 페이지도 같이 가져 오는 , 이렇게 함으로서 여러 가져 와야 되는 수고를 번으로 줄일 있기 때문이다. 이런 방법을 demand paging with clustering이라고 한다.

l        디스크에서 가져온 페이지를 어디에 것인가를 결정한다. 실제 메모리에 여유가 있을 경우에는 VMM 제일 페이지에 두게 된다. 실제 메모리에 여유가 없을 경우엔 어떤 페이지를 디스크로 옮겨 놓을 것인 가를 결정한다.

l        어떤 페이지를 디스크로 옮겨 놓을 지를 결정한다. VMM 프로세스가 이용하는 페이지에 대한 기록을 가지고 있는 이를 프로세서의 working set이라고 부른다. 여기에서는 선입선출의 원칙대로 먼저 들어 왔던 메모리 페이지가 디스크로 옮겨 대상이 된다. Page fault 발생하면 VMM 요청한 쓰레드가 속한 프로세스의 working set를 조사하여 실제 메모리에 가장 오래 있었던(가장 먼저 들어 왔던) 페이지를 디스크로 옮겨 가는 것이다 -> 이 내용이 중요하다. 자기가 만든 프로그램이 윈도우 운영체제에서 성능을 올리고 싶으면 이개념을 꼭 파악해야 한다.


Comments