페이지 폴트(Page Fault)는 프로세스가 접근하려는 가상 메모리 페이지가 물리 메모리에 없을 때 발생하는 예외(Exception)다. OS는 페이지 폴트 핸들러를 통해 디스크에서 해당 페이지를 물리 메모리로 로드한다.
동작 흐름
1. CPU: 가상 주소 → MMU 변환 시도
2. MMU: 페이지 테이블 확인 → Present bit = 0
3. CPU: Page Fault 예외 발생 → 커널 모드 전환
4. OS: 페이지 폴트 핸들러 실행
a. 유효한 접근인지 확인 (segfault vs page fault)
b. 빈 프레임 확보 (필요시 페이지 교체)
c. 디스크에서 페이지 로드 (I/O)
d. 페이지 테이블 업데이트, Present bit = 1
5. OS: 폴트 발생 명령어부터 재실행
페이지 폴트 종류
| 종류 | 설명 |
|---|
| Minor Fault | 페이지가 메모리에 있지만 매핑 안 됨 (빠름) |
| Major Fault | 페이지가 디스크에 있음 (느림, I/O 필요) |
| Invalid Fault | 잘못된 접근 → Segmentation Fault |
페이지 폴트율과 Belady의 역설
프레임 수가 늘어도 특정 참조 패턴에선 폴트가 증가하는 현상(FIFO에서 발생).
python
def simulate_page_fault(references, n_frames, policy='lru'):
frames = []
faults = 0
for page in references:
if page not in frames:
faults += 1
if len(frames) == n_frames:
if policy == 'fifo':
frames.pop(0)
elif policy == 'lru':
frames.pop(0) # 가장 오래된 것 제거
frames.append(page)
elif policy == 'lru':
frames.remove(page)
frames.append(page)
return faults
관련 개념