SW 사관학교 정글(Jungle)/운영체제-PintOS

pml4(page map level 4) 페이지 테이블 최상위 레벨

jinsang-2 2024. 10. 7. 09:26

pml4

  • x86-64 아키텍처에서 사용하는 페이지 테이블(Paging) 시스템의 최상위 레벨을 나타낸다.
    • 페이지 테이블의 최상위 구조가 뭔데?
      • 쉽게 표현하자면, 페이지 테이블이 4층 건물이라면, PML4는 건물 4층에 위치한 첫 번째 입구라고 생각하시면 됩니다. 거기서부터 계단을 따라 더 낮은 레벨의 페이지 테이블로 내려가면서, 최종적으로 물리 메모리의 주소를 찾게 되는 겁니다.
  • x86-64에서는 4단계의 페이지 페이지 테이블을 사용하여 가상 메모리와 물리 메모리 간의 매핑을 관리하는데 PML4(Page Map Level 4)는 가상 메모리 주소를 물리적 메모리 주소에 매핑하기 위한 가장 상위 레벨의 구조
  • 각 프로세스 또는 스레드가 자신의 페이지 테이블을 가리키고 관리하기 위해 사용된다.
    • 프로세스마다 다른 가상 주소 공간을 사용하기에 각 프로세스는 자신만의 pml4를 가지고 있음
  • thread 구조체 내 pml4 는 이 프로세스가 사용하는 페이지 테이블의 최상위 구조를 가리키는 포인터

왜 필요할까?

  1. 프로그램 간 메모리 보호:
    • 만약 2개의 프로세스가 하나의 컴퓨터에서 동시에 작동한다면, 각 프로세스는 서로 다른 페이지 테이블(PML4)을 가지고 있어야 합니다.
    • 그래야 한 프로세스가 다른 프로세스의 메모리에 접근하지 않도록 보장할 수 있습니다. 예를 들어, 웹 브라우저와 텍스트 편집기를 같이 실행할 때, 서로의 메모리에 간섭해서는 안 되죠.
  2. 문맥 전환(Context Switch):
    • 스레드가 교체될 때마다, 시스템은 이제 그 스레드가 사용할 페이지 테이블을 스위칭해야 합니다. 그때 현재 사용할 페이지 테이블의 최상위 레벨 주소, 즉 pml4를 참조하여 페이지 테이블을 전환합니다.
    • A가 실행 중일 때는 A의 페이지 테이블(A->pml4)을 활성화하고, B가 실행 중일 때는 B의 페이지 테이블(B->pml4)을 활성화해서 독립된 메모리 공간을 관리하게 됩니다.

구체적인 예시:

예시 1: 문맥 전환 중 페이지 테이블 활성화
  • 예를 들어, A라는 스레드가 현재 실행되고 있으며, 문맥 전환이 일어나 B라는 스레드로 교체될 때:
    • A 스레드가 사용하는 페이지 테이블은 A->pml4로 관리되고 있습니다.
    • CPU는 페이지 테이블을 교체하기 위해 A의 pml4를 비활성화하고, B의 pml4를 활성화해야 합니다.
    • 이 작업은 B의 pml4 필드가 CPU의 페이지 테이블 레지스터에 설정되면서, B의 메모리 매핑이 활성화됩니다.
예시 2: 새로운 프로세스 생성
  • 새로운 서브 프로세스를 fork() 명령을 통해 생성하면, 새로운 PML4 (페이지 테이블)가 할당됩니다.
    • 부모 프로세스와 자식 프로세스가 각기 다른 메모리 공간을 가지기 위해, pml4 필드를 사용하여 새로운 페이지 테이블이 생성되고 관리됩니다.