Os는 현재 크게 필요하지 않는 주소 공간을 버릴 필요가 있다.
현대 Os system에서는 아래의 규칙을 hard disk drive에 사용한다.
Swap Space
DRAM에 주소를 담을 공간이 부족하다면, SSD의 Swap Space에 page-sized unit 만큼 저장해 놓아야 하므로, OS는 swap space를 기억할 수 있어야 한다.
따라서 Present Bit를 사용해서 page가 physical memory에 있는지 disk에 있는지 확인한다.
Page fault
- physical memory에 있지 않은, 즉, Swap space에 있는 page에 accessing하는 것을 의미한다.
- page가 swapped disk에 있다면 OS는 해당 page를 다시 memory로 올려놓아야 한다.
Page replacement
- OS는 swapped disk에 있는 page를 가져오기 위해 현재 memory에 있는 page를 다시 swapped disk에 가져다 놓아야 하는데, 이 page를 고를 때는 page replacement policy에 따라서 골라야 한다.
- Reference
- Trap
- Check storage whether page is exist
- Get the page
- Reset Page Table
- Reinstruction
Page fault Code
PFN = FindFreePhysicalPage()
if(PFN == -1) // no free page found
PFN = EvictPage() // run replacement algorithm
DiskRead(PTE.DiskAddr, pfn) // sleep (waiting for I/O)
PTE.present = True //update page table with present
PTE.PFN = PFN // bit and translation (PFN)
RetryInstruction() // retry instruction
- OS는 이제 삽입 될 page를 위해서 physical frame을 찾아야 한다.
- 만약 physical memory에 공간이 없다면, replacement algorithm이 memory에 있는 page를 쫓아낼때 까지 기다려야 한다.
Lazy approach : OS가 memory가 꽉 찰 때까지 기다렸다가 replacement를 실행
Swap Daemon, Page Daemon : LW(low watermark) 보다 사용가능한 page의 수가 적어지면 replacement를 HW(high watermark) 보다 많아 질 때까지 한다.
'3-2 > 운영체제' 카테고리의 다른 글
LRU Implementation in more detail (0) | 2021.11.08 |
---|---|
Swapping Policies (0) | 2021.11.08 |
Advanced Page Tables (0) | 2021.10.22 |
Translation Lookaside Buffer (0) | 2021.10.21 |
Introduction to Paging (0) | 2021.10.08 |