페이징이란 ?
Posted 2012. 10. 17. 17:34인텔의 보호모드에서는 사용자가 입력한 논리적 주소에 대하여 세그먼트 레지스터가 지시하는 세그먼트 디스크립터의 베이스 주소 값과 합해져 새로운 선형 주고를 만들어 내게 된다.
그리고 이렇게 만들어진 선형 주소는 다시 페이지 디렉토리의 인덱스, 페이지 테이블의 인덱스, 그리고
오프셋으로 사용되어 실제 물리 주소를 지시하게 되며, 선형 주소에서 물리주소까지 얻어지는 과정을
페이징(Pasing)이라 부른다.
32비트의 선형주소 체제는 인텔 마이크로프로세서의 페이징 과정을 거쳐 실제의 물리 어드레스로
지시된다.
페이징 이라는 과정이 수행하는 일은 32비트의 선형 주소 체제에 해당되는 4Gbyte의 메모리르 이보다
작은 용량의 실제 메모리 주소와 매핑시켜주는 일을 하게 되며 실제 물리적으로 가지고 있는 메모리가
부족할 경우 하드디스크와 같은 보조적인 기억장치의 도움을 받아 실제 물리적 메모리량보다 큰 용량
의 메모리를 사용할 수 있도록 해준다.
우선 32비트의 선형 주소를페이지 디렉토리 인덱스( Page Directory Index ), 페이지 테이블 인덱스
( Page table Index ), 그리고 오프셋(Offset)의 3부분으로 나눈후 CPU의 CR3 레지스터가 가리키고 있는 페이지 디렉토리와 선형 주소로 부터 얻은 페이지 디렉토리 인덱스를 사용하여 페이지 테이블의 포인터를 얻고 이 페이지 테이블의 포인터와 선형 어드레스으 ㅣ페이지 테이블 인덱스를 사용하여
실제 물리 주소의 페이지를 얻은 후 오프셋을 더하여 최종적인 물리적 주소를 얻어내게 된ㄷ.
CR3 레이즈터
선형 주소를 실제 물리적 주소로 바꾸기 위한 첫번째 작업은 페이지 디렉토리를 찾는 것이며
이 페이지 디렉토리의 위치 정보는 CR3( Control Register 3 )레지스터의 11비트에서 31비트
사이의 20비트를 통하여 얻게된다.
windows에서 프로세스의 스위칭이 일어 날 때마다 CR3 레지스터의 페이지 디렉토리 PFN을 바꾸어
줌으로써 해당 프로세스가 사용하는 가상 메모리를 전혀 다른 물리적 주소와 매핑시킬수 있게 한다.
페이지 디렉토리
32비트의 페이지 디렉토리 엔트리 정보를 1024개 만큼 가지고 있는 배열 형태의 구조이며, 하나의 프로세스에는 반드시 하나의 페이지 디렉토리가 존재해야 한다.
이전 단계의 CR3 레지스터에 의하여 발견하게 된 페이지 디렉토리( Page Directory )에서 어떠한 엔트리를 선택할것인지는 32빙트의 선형 주소 중 22~31비트 사이의 10비트를 인덱스로하여 선택하게 된다
페이지 테이블
페이지 테이블 중에 어떤 엔트리를 사용할 것인지는 선혀 ㅇ메모리의 12~21비트 사이의 10비트를 인덱스로사용하여 결정하게 된다.
- Filed under : 윈도우즈 프로그래밍/페이징