개요
페이지 부재 또는 페이지 폴트(page fault, #PF, PF, hard fault)는 메모리에 적재된 페이지중에 사용 페이지가 없을 때를 가리킨다. 시스템의 종류에 따라 약간 다를 수 있으나, 대체로는 빈 페이지가 하나도 없거나, 미리 정한 수보다 적을 때 발생한다.
처리 과정
Page Fault -> (인터럽트) Page fault Handler (Allocate page) -> (인터럽트 핸들러) Physical memory Allocation -> Initialize a free page -> (Physical memory Manager) Map the page to PT -> (Physical memory Manager) Application Resumes (User or Kernel Application)
인터럽트에 의해서 Page Fault가 커널로 전달되면 Buddy Allocation과 같은 kalloc에 의해서 물리 메모리가 커널에 할당되게 된다. 커널은 할당된 물리 메모리를 mmap혹은 stack과 같이 페이지의 용도에 따라서 적절히 초기화 하고 PT에 적재 함으로 페이지 폴트를 해결한다.
이 과정에서 Hardware가 메모리 접근을 하게 되면 PT entry와 Page table entry에 dirty bit표시를 하게 된다. 만약 PMM과정에서 페이지가 swap-out하게 되면 이 dirty bit을 참고하여 이 페이지를 write-back할지를 결정하게 된다. 또한 used bit이라는 것도 있는데, TLB 미스가 발생하면 page table에 표시하게 된다. 이 두 비트는 나중에 스케쥴링 Policy에서 사용하게 된다.