페이지 결함(Page Fault)과 Lazy Loading, 페이지 교체 정책
이번 포스팅에서는 가상 메모리 시스템에서 자주 발생하는 페이지 결함(Page Fault)과 이를 효율적으로 처리하는 Lazy Loading과 다양한 페이지 교체 정책(Page Replacement Policy)에 대해 알아보겠습니다.
페이지 결함(Page Fault)의 이해
Page Fault는 프로세스가 접근하려는 페이지가 현재 물리 메모리에 존재하지 않을 때 발생하는 인터럽트 이벤트입니다. 이는 운영체제가 해당 페이지를 디스크에서 읽어 물리 메모리에 적재함으로써 해결되는데요. 일반적인 처리 절차는 다음과 같습니다.
- CPU가 접근하려는 주소에 해당하는 매핑 정보가 없는 경우, 페이지 결함 인터럽트를 발생시킴
- 운영체제는 해당 주소가 유효한지 검사한 뒤, 필요한 데이터를 디스크에서 읽어 메모리에 로드
- 페이지 테이블을 갱신하여 새로운 물리 주소 매핑 등록
- 프로세스를 재개하여 다시 메모리 접근을 시도, 정상 접근
Lazy Loading, 필요한 순간에만 불러오는 메모리 관리 기법
Lazy Loading은 말 그대로 '게으르게 불러오기'라는 의미로, 시스템이 데이터를 실제로 필요로 하는 순간까지 메모리에 올리지 않고 대기하는 방식인데요. 이 기법은 메모리 사용을 최적화하고 불필요한 I/O 연산을 줄이기 위한 핵심 전략 중 하나입니다.
운영체제의 가상 메모리 관리에서 Lazy Loading은 특히 프로그램 실행 초기 단계에서 중요한 역할을 합니다. 프로그램을 실행할 때 전체 페이지를 한 번에 로딩하지 않고, 사용자가 실제로 접근하는 페이지가 발생할 때만 해당 페이지를 디스크에서 읽어 메모리에 적재합니다.
- 장점
- 초기 실행 속도 향상
- 메모리 공간 절약
- 불필요한 자원 낭비 방지
- 적용 예시
- 동적 라이브러리 로딩
- 가상 메모리 페이지 로딩
- mmap을 통한 파일 매핑
Demand Paging, Lazy Loading의 대표 구현 방식
Demand Paging은 Lazy Loading을 메모리 페이지 단위에서 구현한 대표적인 방식입니다. 페이지가 실제 접근되기 전까지는 메모리에 적재되지 않으며, 접근 시점에 페이지 결함(Page Fault)을 발생시켜 필요한 데이터를 로드합니다. 이 방식은 대부분의 현대 운영체제에서 기본적으로 사용되고 있으며, 가상 메모리의 핵심 동작 방식이기도 합니다.
다만 첫 접근 시에는 디스크 I/O로 인한 지연이 발생할 수 있고, 스레싱(thrashing) 위험 또한 존재한다는 점을 주의해야 합니다.
스레싱(Thrashing)이란?
스레싱은 과도한 페이지 결함으로 인해 CPU 시간 대부분이 페이지 교체 처리에만 사용되는 현상인데요. 성능 저하가 심각하게 발생하며, 시스템이 거의 멈춘 것처럼 보일 수 있습니다.
- 해결 방안
- 프로세스의 Working Set을 추적하여 필요한 최소 메모리 크기를 확보하기
- 실행 중인 프로세스 수를 줄이기
페이지 교체 정책의 필요성
물리 메모리는 한정되어 있기 때문에, 새로운 페이지를 로드해야 할 때 기존 페이지를 내보내야 하는 경우가 생깁니다. 이때 어떤 페이지를 제거할지 결정하는 것이 페이지 교체 정책입니다. 좋은 정책은 페이지 결함률을 낮추고, 시스템의 응답성과 효율성을 유지할 수 있어야 합니다.
대표적인 페이지 교체 정책들
- FIFO (First-In, First-Out)
- 가장 먼저 들어온 페이지를 가장 먼저 제거한다
- 단순하지만 성능이 떨어질 수 있음
- Optimal
- 앞으로 가장 오랫동안 사용되지 않을 페이지를 제거한다
- 이상적이지만 미래를 예측할 수 없기에, 실제 구현은 불가능
- LRU (Least Recently Used)
- 가장 오랫동안 사용되지 않은 페이지를 제거한다
- 실제 메모리 접근 패턴과 잘 맞아 효과적
- Clock (Second Chance)
- FIFO를 개선한 방식으로, 사용 여부 비트를 확인해 최근에 사용된 페이지는 한 번 더 기회를 줌
'크래프톤 정글 > CS기초(키워드, 개념정리)' 카테고리의 다른 글
[CS기초] 12-13주차 개념 정리 (0) | 2025.06.10 |
---|---|
[CS기초] Anonymous Page, File-backed Page, Swap Disk의 이해 (0) | 2025.06.10 |
[CS기초] 가상 메모리 시스템의 기본 구조 (Virtual Memory, Page Table, TLB) (0) | 2025.06.09 |
[중간정리] 10-11주차: 커널모드/사용자모드, 컨텍스트 스위칭, fsync, MLFQS (0) | 2025.05.28 |
[CS기초] 10-11주차 개념정리 (0) | 2025.05.27 |