글
(1) 리눅스의 3단계 페이징 기법
○ 리눅스 커널은 다양한 시스템에 포팅하여 사용할 수 있다.
○ 리눅스는 인텔의 2단게 페이징에 한단계를 추가한 3단계 페이징 기법을 사용한다.
(커널2.6 후반대 버전에서는 4단계 페이징을 지원한다.)
○ 64bit의 선형주소를 사용하면서 3단계 페이징 기법을 사용하는 이유는 32bit선형 주소보다 주소공간이 훨신 커지므로 페이지 테이블이 차지하는 용량을 줄이기 위한 것이다.
- 리눅스에서 인텔의 i386환경(2단계 페이징 기법)을 처리하려면 middle directory를 한개의 엔트리만 사용하여 2단계처럼 쓴다.
○ 64bit의 선형주소를 4부분으로 나눈다.
- Page Global Directory || Page Middle Directory || Page Table || Offset
○ 페이징유닛은 페이지 글로벌 디렉토리(pgd_t), 페이지 미들디렉토리(pmd_t), 페이지 테이블(pte_t), 오프셋 으로 나뉜다.
- pgd_offset(mm, address)
: Memory Descriptor와 가상주소를 인자로 받아 Page Global Directory의 엔트리 주소를 반환한다.
- pmd_offset(dir, address)
: Page Global directory와 가상주소를 인자로 받아 Page middle Directory의 엔트리 주소를 반환한다.
- pte_offset(dir, address)
: Page Middle Directory와 가상주소를 인자로 받아 Page Table의 엔트리 주소를 반환한다.
- pgd_none(pgd), pmd_none(pmd), pte_none(x)
: 각 테이블의 엔트리를 인자로 받아 존재여부를 검사하며 존재하면 0을, 그렇지 않으면 1을 반환한다.
- pgd_ present(pgd), pmd_present(pmd), pte_present(pte)
: 각 테이블의 엔트리를 인자로 받아 해당 엔트리의 present 프랠그를 검사하여 해당 테이블 또는 해당 페이지가 메모리에 존재하면 1을 반환한다.
- pgd_clear(pgd), pmd_clear(pmd), pte_clear(pte)
: 각 테이블의 엔트리를 인자로 받아 해당 테이블의 엔트리를 지운다.
- pgd_page(pgd)
: 페이지 글로벌 디렉토리의 엔트리에서 페이지 미들 디렉토리의 주소를 반환한다.
- pmd_page(pmd)
: 페이지 미들 디렉토리의 엔트리에서 페이지 테이블의 가상주소를 반환한다.
- pte_page(pte)
: 페이지 테이블 엔트리가 가리키는 페이지 프레임의 페이지 디스크립터의 주소를 반환한다.
※ 출처 : http://idkkangjs.blog.me/30091117058
'L inux > Kernel' 카테고리의 다른 글
파일시스템 - 개요 (0) | 2011.09.27 |
---|---|
메모리 관리 - 페이지 할당 / 교체 (0) | 2011.09.27 |
메모리 관리 - 페이징기법 & 주소변환 (0) | 2011.09.27 |
메모리 관리 - 자료구조 (0) | 2011.09.27 |
메모리 관리 - 가상메모리 & 물리메모리 (0) | 2011.09.27 |
RECENT COMMENT