Maystyle :
Admin : New post
Guestbook
Local
media
Catergories
Recent Articles
Recent Comments
Recent Trackbacks
Calendar
Tag
Archive
Link
Search
 
  Windows Internals 다시보기 04 
작성일시 : 2010. 2. 17. 18:37 | 분류 : Windows Server/Kernel

* 아직은 많이 부족하기 때문에 제가 자신이 생길 때 까지 본 글은 제 블로그에 대한 링크만 허용합니다.

가상 메모리에서 실제 메모리로의 변환은 어떻게 일어날까요?

모든 프로세스는 자체적으로 자신이 0000,0000 부터 FFFF,FFFF 까지의 메모리를 모두 쓸 수 있다고 생각하고 실행 됩니다. 자 중요한 점은 모든 프로세스 들이 각각 0000,0000 부터 FFFF,FFFF 까지를 각각 사용한다 생각하며 실행 된다는 점입니다.

예를 들자면 A 프로세스도 0000,0000 ~ FFFF,FFFF B 프로세스도 0000,0000 ~ FFFF,FFFFF 이렇게 사용하게 되는 거죠.그리고 OS는 이 가상의 0000,0000 ~ FFFF,FFFF 의 주소를 서로 겹치지 않게 실제 물리 주소(RAM)로 변경해 줍니다.

이를 위해 OS는 Virtual Address Translation 을 하게 됩니다.

제가 말씀 드린 것처럼 프로세스는 그저 가상 메모리 주소만 사용합니다. 그리고 OS에서 그 가상 메모리 주소를 실제 메모리 주소로 바꿔 주는데, 이 메모리 주소는 10+10+12 의 구조로 되어 있습니다. 10 + 10 + 12 는 각각 페이지 디렉토리 인덱스 페이지 테이블 인덱스 바이트 인덱스라 합니다.

image

물론 자주 쓰는 메모리 같은 경우 해당 페이지 프레임을 저장하여, 위와 같은 2단계의 검사가 동일 페이지 프레임에 대해 지속적으로 발생하는 것을 방지 하기 위해 TLB (변환 참조 버퍼)를 이용합니다.

image

PDE와 PTE에는 무슨 값이 들어 있습니까?

각 PDE 및 PTE의 엔트리는32bit 사이즈를 가지고 있습니다.
아래 그림에서 볼 수 있는 것과 같이 상위 20bit를 이용하여 주소를 표현하고 나머지는 접근 권한 및 Paging 유무 등의 정보로 사용하고 있습니다.

(출처 : 루트킷 윈도우 커널 조작의 미학 P83~P84)
페이지 디렉토리 엔트리
image

위와 같이 페이지 디렉토리 엔트리의 첫 20비트가 페이지 테이블의 베이스 어드레스가 됩니다. 그리고 나머지는 해당 페이지의 속성을 보여주는데, 이중 U가 0이면 해당 페이지 테이블은 커널에서만 접근이 가능함을 나타내고, W가 0이면 해당 영역은 읽기 전용임을 나타내게 됩니다.

페이지 테이블 엔트리
image

앞의 20Bit는 페이지 프래임 번호를 의미하고 나머지 비트는 위에서 설명한 것과 같이 U와 W 비트는 페이지 디렉토리 엔트리와 동일한 역활을 하며, 여기에 더불어 P 비트가 0이면 해당 메모리는 실제 RAM 상에 1이면 페이징 되었음을 의미합니다.

만약 우리가 PTE의 엔트리를 확인 할 수 있다면, 가상 메모리 주소의 마지막 12비트만을 이용하여 실제 메모리 주소를 찾아 갈 수 있습니다. (이에 대한 설명은 나중에 하도록 하겠습니다.)

자 그림에서 CR3란 무엇일까요?
바로 CPU의 CR3 레지스터를 의미합니다. 실제로 이 Directory Base 의 물리 주소 값은 앞에서 설명한 것과 같이 EPROCESS 에 저장되어 해당 프로세스가 로딩 될때 CPU의 CR3 레지스터에 저장되게 됩니다.

PROCESS 81e5db78 SessionId: 0 Cid: 094c Peb: 7ffda000 ParentCid: 00d8
DirBase: 05642000 ObjectTable: e1669348 HandleCount: 109.
Image: notepad.exe

kd> r cr3
cr3=05642000

notepad.exe 프로세스의 가상 메모리를 관리하기 위한 페이지 디렉토리의 물리적 시작 위치가 05642000 라는 것을 알 수 있습니다. CR3 레지스터는 프로세스의 구조체에 저장되어 Context switching 이 일어날 때 마다 다른 CR3가 활성화 되게 됩니다. 이렇게 서로 다른 물리 주소로 부터 PDE 가 시작되기 때문에 모든 프로세스들의 페이지 디렉토리들이 겹쳐지지 않도록 관리가 가능하게 됩니다.

|