pml4
- x86-64 아키텍처에서 사용하는 페이지 테이블(Paging) 시스템의 최상위 레벨을 나타낸다.
- 페이지 테이블의 최상위 구조가 뭔데?
- 쉽게 표현하자면, 페이지 테이블이 4층 건물이라면, PML4는 건물 4층에 위치한 첫 번째 입구라고 생각하시면 됩니다. 거기서부터 계단을 따라 더 낮은 레벨의 페이지 테이블로 내려가면서, 최종적으로 물리 메모리의 주소를 찾게 되는 겁니다.
- 페이지 테이블의 최상위 구조가 뭔데?
- x86-64에서는 4단계의 페이지 페이지 테이블을 사용하여 가상 메모리와 물리 메모리 간의 매핑을 관리하는데 PML4(Page Map Level 4)는 가상 메모리 주소를 물리적 메모리 주소에 매핑하기 위한 가장 상위 레벨의 구조
- 각 프로세스 또는 스레드가 자신의 페이지 테이블을 가리키고 관리하기 위해 사용된다.
- 프로세스마다 다른 가상 주소 공간을 사용하기에 각 프로세스는 자신만의 pml4를 가지고 있음
- thread 구조체 내
pml4
는 이 프로세스가 사용하는 페이지 테이블의 최상위 구조를 가리키는 포인터
왜 필요할까?
- 프로그램 간 메모리 보호:
- 만약 2개의 프로세스가 하나의 컴퓨터에서 동시에 작동한다면, 각 프로세스는 서로 다른 페이지 테이블(PML4)을 가지고 있어야 합니다.
- 그래야 한 프로세스가 다른 프로세스의 메모리에 접근하지 않도록 보장할 수 있습니다. 예를 들어, 웹 브라우저와 텍스트 편집기를 같이 실행할 때, 서로의 메모리에 간섭해서는 안 되죠.
- 문맥 전환(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의 메모리 매핑이 활성화됩니다.
- A 스레드가 사용하는 페이지 테이블은
예시 2: 새로운 프로세스 생성
- 새로운 서브 프로세스를
fork()
명령을 통해 생성하면, 새로운 PML4 (페이지 테이블)가 할당됩니다.- 부모 프로세스와 자식 프로세스가 각기 다른 메모리 공간을 가지기 위해, 이
pml4
필드를 사용하여 새로운 페이지 테이블이 생성되고 관리됩니다.
- 부모 프로세스와 자식 프로세스가 각기 다른 메모리 공간을 가지기 위해, 이
'SW 사관학교 정글(Jungle) > 운영체제-PintOS' 카테고리의 다른 글
syscall-entry.S (1) | 2024.10.08 |
---|---|
[PintOS Project 2 - User Program] 여러 자료 정리..(kaist 자료 등) (2) | 2024.10.07 |
[PintOS Project 2 - User Program] System Call(시스템 콜) (0) | 2024.10.05 |
[PintOS Project 1 - Threads] 2번 Priority Scheduling (0) | 2024.10.01 |
cpu와 스레드 (0) | 2024.10.01 |