System
[OS] Paging (Basic)
RealJuney
2024. 2. 8. 21:50
Variable sized segmentation을 이용하여 memory를 나누어 사용하는 경우 external fragmentation이 발생했다. 하지만 fixed size chunks로 memory를 슬롯처럼 나누어 쓰면 external fragmentation이 발생하지 않는다. 이런 방식을 Paging이라고 한다.
Paging
- process의 virtual address space를 page라는 fixed size slot으로 나눈다.
- physical address 또한 page frame으로 나눈다. (page와 같은 size)
- 각 page frame은 하나의 page를 담당한다.
Page Table
- per-process로 가지고 있는 data structure로 virtual page의 address translation을 위해 존재한다.
- virtual address를 두 가지 컴포넌트로 쪼갠다.
- VPN (Virtual Page Number)
- 상위 n비트를 이용해 VPN을 구한다
- 2^n 개의 PTE (Page Table Entry)가 Page Table을 구성하게 된다.
- offset
- 하위 m (또는 virtual address의 비트수 - n) 비트로 offset을 구한다.
- 2^(offset) bytes = page size (bytes) 가 된다.
- VPN (Virtual Page Number)
- address translation
- VPN에 해당하는 page table의 index에 PFN (Physical Frame Number / Physcial Page Number)이 저장되어 있다.
- VPN자리에 PFN만 넣어주고 나머지 offset은 그대로 두면 address translation 끝
- PTE (Page Table Entry)
- page table을 VPN으로 index에 접근하면 VPN에 해당하는 PFN이 저장되어 있어야한다.
- PFN을 제외하고 추가적인 bit들이 존재한다.
- valid bit (사용되고 있는 공간이 아닌 경우 invalid)
- protection bit (read/write/execution 등이 가능한 page인지)
- present bit (physical memory/disk 중 어디에 있는지)
- dirty bit (physical memory에서 수정된적이 있는지)
- 느린 Page Table
- 기존 특정 위치에 값을 로드하려면, base-bound register를 이용해서 메모리 액세스 없이 빠르게 address translation 후 실제 phsycial address에 접근
- 하지만 page table을 사용하면, page table 또한 phsycal memory에 있으므로 address translation을 위해 page table에 접근하는 과정에서 메모리 액세스 발생 (느림)
- memory에 가득찬 page table
- 각 프로세스마다 꽤 큰 page table이 필요하므로 조심하지 않으면 page table이 많은 부분 차지