본문 바로가기
Operating System

리눅스 커널 프로세스 페이지 테이블(Process Page Table)과 커널 페이지 테이블(Kernel page table)

by BestUgi 2018. 1. 12.

프로세스 페이지 테이블

 

- 프로세스의 선형 주소 공간은 두 부분으로 나누어진다.

     1. 0x00000000 ~ 0xbfffffff(3GB 영역)의 선형 주소는 프로세스가 사용자 모드와 커널 모드 양쪽 어디에 있더라도 항상 접근 할 수 있다.

     2. 0xc0000000 ~ 0xffffffff(1GB 영역)의 선형 주소는 프로세스가 커널 모드에 있을 때만 접근 가능하다.  

 

                

 

- 프로세스가 사용자 모드에서 동작 중일 때는 0xC0000000보다 작은 선형 주소를 만들어 사용하고, 커널 모드에서 동작 중일 때는 커널 코드를 수행하면서 0xC0000000 이상의 선형 주소를 사용한다.

 

- 0xC0000000 이하의 선형 주소를 매핑하는 페이지 전역 디렉토리(PGD)의 해당 엔트리들의 내용은 프로세스마다 다르다.

   반면, 나머지 엔트리들(0xC0000000 이상의 선형 주소에 해당하는 엔트리)은 모든 프로세스에서 동일하며, 마스터 커널 페이지 전역 디렉토리(master kernel Page Global Directory)에 있는 해당 엔트리와 같다.

 

커널 페이지 테이블

- 커널은 자신이 사용하기 위한 페이지 테이블의 집합을 관리하는데 이를 master kernel Page Global Directory라고 한다.

    -> 시스템 초기화한 후에는 어떤 프로세스나 커널 스레드도 이 페이지 테이블을 직접사용하지는 않는다.

        하지만, master kernel page global directory의 상위에 있는 엔트리(0xC0000000 상위 주소를 표현하는 엔트리)들은

        시스템에 있는 모든 정규 프로세스의 페이지 전역 디렉토리에 있는 해당 엔트리들의 참조 모델(reference model)이다.

 

- 즉, master kernel PGD는 프로세스의 PGD의 0xC0000000 상위의 엔트리를 셋팅할 때 참조되어진다.

 

- 그렇다면, 커널은 어떻게 자신의 페이지 테이블을 초기화 하는가? 아래와 같은 두 단계로 자신의 페이지 테이블을 초기화 한다.

    1. 커널 코드, 데이터 세그먼트, 초기 페이지 테이블, 128KB의 동적 자료 구조를 위해 커널은 제한된 주소 공간을 만들고 이에 대한

       페이지 테이블을 만든다. 이러한 페이지 테이블을 임시 커널 페이지 테이블(Provisional kernel page Table)이라 한다.

        -> 제한된 주소 공간의 크기가 8MB라고 하면, 8MB크기의 메모리를 표현하기 위한 페이지 테이블은 두 개의 페이지를 필요로 한다.

             이러한 주소 공간을 표현하는 두 개의 페이지 크기의 페이지 테이블을 초기화 한다.

    2. 커널은 모든 메모리 영역에 대하여 페이지 테이블을 적절하게 만든다.

 

- Q&A

  왜 커널의 3GB부터 모든 물리 메모리를 맵핑 하는가?와 관련된 설명은 아래의 링크를 따라 가 주세요^^

http://osinside.net/linuxMM/vmnotes_k.html

 

  커널의 물리 메모리 관리에 대한 자세한 설명은 아래 링크랄 따라 가세요^^

http://dojeun.egloos.com/317480

출처 : 리눅스 커널의 이해

댓글