2017-11-15 1 views
1

페이지 디렉토리 및 페이지 테이블에 대한 일부 설명서를 읽었지만 여전히 이러한 개념에 대해 매우 혼란 스럽습니다. 예를 들어 here 나는 단 하나의 레벨 페이징만으로 메모리를 낭비한다는 것을 알게되었습니다. 따라서 x86 아키텍처에서는 2 레벨 페이징을 사용합니다.페이지 디렉토리 이해

cr3 --> PageDirectory --> PageTable --> Page 

다음과 같은 선형 주소를 고려하십시오.

01001010101 1010101101 10101110101010 
page tbl  page  offset 

page tbl 비트를 사용하여 페이지 디렉토리 항목 실제 주소를 찾습니다. PD = cr3 + L * (page tbl)은 페이지 테이블 실제 주소 PT을 포함합니다. 이제 우리는 P = PT + L * page 페이지를 찾고 있습니다. 그래서 단일 레벨에서 우리는 하나의 페이지 테이블 4MiB를 가졌습니다. 이제 총 1024 개의 페이지 테이블 4KiB = 4MiB가 있습니다. 메모리 경제를 보지 마라.

무엇을 놓쳤습니까?

+0

프로세스 당 4MB의 연속적인 물리적 메모리가 실제로 상당히 많습니다. 필자의 Linux 데스크탑에는 151 개의 사용자 공간 프로세스가 지금 실행되고 있습니다 (여전히 다중 스레드 프로세스는 1로 계산됩니다). (나는 자신의 페이지 테이블을 가지고 있지 않기 때문에 커널 프로세스를 배제했다.) 페이지 테이블에만 604MB가 소비됩니다. –

+0

@PeterCordes 예, 종류 ...하지만 어쨌든 1024 개의 페이지 테이블이 모두 할당되면 페이지 테이블에 4MiB의 메모리가 소비됩니다. 문제는 1024 페이지 테이블 모두가 할당 된 것은 아니며 맞습니까? –

+0

네, 그렇습니다. 내 의견은 @ Fuz의 대답과 함께 이해할 수 있습니다. 대부분의 프로세스의 메모리 맵은 특히 64 비트 시스템에서 매우 드문 경우입니다. –

답변

3

일반적으로 페이지 테이블이 가득차 있습니다. 플랫 페이지 테이블을 사용하는 경우 처음 몇 개 항목과 마지막 몇 개 항목 만 필요하면 여전히 전체 표를 할당해야합니다. 페이지 디렉토리를 사용하면 첫 페이지와 마지막 페이지 테이블을 제외한 모든 페이지를 생략 할 수 있으므로 많은 메모리를 절약 할 수 있습니다. 이득은 광대 한 RAM의 오늘날 시대에는 작아 보이지만, 컴퓨터가 총 4MB의 RAM 만 가질 때 정말 많이 돌아 왔습니다.

+0

합리적인 것으로 들립니다. 나는 당신에게 약간의 설명을 할 수 있겠습니까? 여기에 지정된대로 [here] (http://wiki.osdev.org/Paging) 우리는 페이지 디렉토리에서 20 비트만을 사용합니다. 4KiB가 정렬 된 이유는 무엇입니까? 사용 가능한 전체 주소 범위를 나타 내기 위해서? –

+0

@ St.Antario 정확합니다. 페이지 테이블 주소의 상위 20 비트 만 사용되며 하위 12 비트는 부기에 사용됩니다. – fuz