The Virtual Address Translation with Considering MMU and TLB
from Drafts/Kernel mode 2010/01/05 19:29NT의 가상 주소 변환
The Virtual Address Translation with Considering MMU and TLB
가상 주소 번역 (Translation of Virtual Address)
윈도우 NT의 32비트 가상 주소를 고려 하여 주소 번역에 사용되어야 하는 자료 구조, 또는 하드웨어 사이즈들을 고려 해보도록 하자. 이러한 작업은 실제 파일 시스템 드라이버 개발자에게는 빈번한 일로, 주소 공간에 대한 이해와 함께 이러한 주소 공간을 어떤 식으로 관리하고, 자료구조를 구성하는지를 이해하는데 필수적이다. 페이지 테이블 사이즈가 4096 바이트이기 때문에 페이지 오프셋 계산에 12 비트를 필요로 한다. 해당 12 비트는 LSB(Lease Significant Bit)에 저장 된다. 따라서 MMU는 페이지 테이블 내에 PTE의 페이지 프레임들을 구분하는데 20비트를 가지고(32비트 – 12 비트) 계산 하게 된다. PTE는 20비트로 구성된 (백만 개의) 순차적 배열 정도로 추상화 할 수 있다. 인텔의 x86 아키텍처를 비롯하여 대부분의 아키텍처에서 PTE에 대한 자료구조들을 미리 정의 해두었다. 인텔 플랫폼(Platform)의 경우 각각의 PTE는 반드시 4바이트로 구성된다. 현재까지 고려한 것을 다시 정리하면 가상 주소 공간을 위한 번역 정보에 필요한 사이즈를 유추 할 수 있다. 다시 말해 백만개 엔트리와 각 엔트리(PTE) 4바이트로 구성 되기 때문에 222 (4MB)형태의 사이즈를 필요로 한다. 각각의 페이지 테이블은 하나의 페이지 사이즈에 저장 되어야 하기 때문에 하나의 프로세스에 대한 페이지 테이블은 1024 페이지 프레임으로 모든 PTE들을 구성 될 수 있다.
공유 메모리와 메모리 맵드 파일(Memory Mapped File)
<그림 2, 같은 페이지를 프로세스마다 다른 가상 주소 공간에 매핑 시킨 예>
프로토타입 페이지 테이블 (Prototype Page Table)
파일 매핑과 공유 메모리 오브젝트를 관리하는 섹션 오브젝트 (Section Object)는 VMM에 의해서 생성된다.
ZwCreateSection |
NTSTATUS |
섹션 오브젝트에 대한 다른 Zw 함수들은 DDK 문서를 참조하여 써도 무방하다. 이에는 아래와 같은 함수들이 있다.
ZwOpenSection |
|
ZwMapViewOfSection |
|
ZwUnmapViewOfSection |
|
Rejeev Nagar, "Windows NT File System Internals": A Developer Guide, O'Reilly 1998
P. B. Kruchten."The 4+1 View Model of architecture."
David Garlan and Mary Shaw January 1994 "An Introduction to Software Architecture"
'Drafts > Kernel mode' 카테고리의 다른 글
| Basic Functionalities and Concepts for File System Implementation (0) | 2010/03/17 |
|---|---|
| Communication between Virtual Memory Manager and File System (0) | 2010/02/17 |
| The Virtual Address Translation with Considering MMU and TLB (0) | 2010/01/05 |
| NT Virtual Memory Manager Overview (0) | 2009/12/13 |
| Common Data Structures of NT I/O Manager (0) | 2009/09/30 |
| IO Manager Design Concepts (0) | 2009/09/04 |