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) 가 된다.
  • 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이 많은 부분 차지