[OS]메모리관리(5)-다단계 페이지 테이블

Dragony·2020년 3월 7일
1

운영체제

목록 보기
5/8

대용량 메모리를 위한 페이지 테이블

페이지 테이블을 이용한 주소 변환에서 TLB를 사용하면 가상 주소를 물리 주소로 변환 할 때 속도를 향상시킬 수 있다. 하지만 문제는 이것 만이 아니다. 큰 가상 공간을 효과적으로 관리하는 방법이 필요하다. 이제부터 이 문제에 대한 두가지 접근 방법을 알아보자.

다단계 페이지 테이블 (Multilevel Page Table)

첫번째 접근 방법은 다단계 페이지 테이블을 사용하는 것이다.
위 그림은 간단한 예를 보여준다.
그림 (a) 에서는 32비트 논리 주소가 3부분으로 구분되어 있는 것을 보여준다.
구체적으로 10비트의 pt1필드, 10비트의 pt2 필드, 그리고 12비트의 offset 필드로 구분된다. 오프셋 부분이 12비트 이므로 페이지의 크기는 4KB가 되고, 나머지 20비트로 페이지를 지정할 수 있으며, 결국 2^20개의 페이지가 존재할 수 있다.

다단계 페이지 테이블의 핵심은, 모든 페이지 테이블은 항상 메모리에 유지할 필요가 없다 는 것이다.
특히 주소 공간에 비어있는 부분(페이지 프레임이 할당되지 않은 가상 주소들)은 전혀 유지할 필요가 없다.

예를들어, 12MB 크기의 프로세스가 존재한다고 가정해보자. 이중에서 아래 4MB 크기의 텍스트 영역이 있고, 그 위에 4MB 크기의 데이터 영역이 있고, 상위에 4MB 크기의 스택이 있다. 그렇다면 데이터와 스택 영역 사이에 막대한 크기의 빈 공간이 있으며 이 부분은 전혀 사용되지 않는다.

그림 (b)는 2단계 페이지 테이블의 동작 과정을 보여준다.
왼쪽에 상위 단계에 페이지 테이블이 있으며, pt1에 대응되는 1024개의 엔트리를 가지고 있다. MMU는 주어진 가상 주소 중에서 상위 10비트에 해당되는 pt1을 인덱스로 이용하여 상위 단계 페이지 테이블을 검사한다.
전체 4GB(32bit를 이용한) 가상 주소 공간이 4KB(4096바이트)로 쪼개져 있기 때문에 상위 단계 페이지 테이블의 각 엔트리는 4MB 크기..

상위 단계 페이지 테이블의 각 엔트리는 두 번째 단계 페이지 테이블을 담고있는 주소(또는 페이지 프레임 번호)를 제공한다.

두 번째 단계 페이지 테이블에서는 pt2가 인덱스로 사용되어 접근하려는 페이지 자체를 담고 있는 페이지 프레임 번호를 찾게된다.
(이 엔트리는 처음 가상주소를 포함하는 페이지가 위치하는 페이지 프레임 번호를 유지한다)

만일 이 페이지가 메모리에 존재하지 않는다면 엔트리 Present/absent 비트가 0으로 설정되어 있으며 페이지 폴트가 발생한다.

비록 주소공간에 백만개의 페이지가 존재하지만 페이지 테이블은 단 4개가 필요하다는 것이다.
(한 개의 상위 단계 페이지+세 개의 두번째 단계 페이지(텍스트,데이터,스택))

상위 단계 페이지 테이블 가운데에 있는 엔트리들은 Present/absent 비트는 모두 0으로 설정되어 있다. 따라서 이 부분에 대한 접근은 페이지 폴트를 야기한다.

profile
안녕하세요 :) 제 개인 공부 정리 블로그입니다. 틀린 내용 수정, 피드백 환영합니다.

0개의 댓글