카테고리 없음
Page Replacement Policy
devkty
2025. 6. 8. 00:43
728x90
Page Replacement Policy
말 그대로 페이지 교체 정책입니다. 운영체제가 메모리 부족 상황에서 어떤 페이지를 제거할지 결정하는 전략입니다.
필요성
운영체제는 가상 메모리 덕분에 물리 메모리보다 큰 주소 공간을 다룰 수 있습니다. 하지만 모든 페이지를 동시에 물리 메모리에 유지할 수 없기 때문에, 새로운 페이지를 메모리에 불러와야 할 때는 기존 페이지 중 일부를 제거해야합니다.
→ 여기서 어떤 페이지를 제거할지 결정하는 기준이 Page Replacement Policy 입니다.
정책 종류와 개념
4개의 정책 종류가 있습니다.
FIFO: 가장 오래된 페이지를 제거합니다.
LRU: 가장 오랫동안 사용되지 않은 페이지를 제거합니다.
Clock: FIFO를 순환 큐로 개선합니다. 사용 비트를 확인합니다.
Random: 무작위로 제거합니다.
→ 장단점을 포함해서 도표로 알아봅시다.
정책 | 설명 | 장단점 |
---|---|---|
FIFO (First-In, First-Out) | 가장 오래된 페이지를 제거 | 간단하지만 성능은 낮을 수 있음 |
LRU (Least Recently Used) | 가장 오랫동안 사용되지 않은 페이지 제거 | 현실적인 모델이지만 구현 비용 ↑ |
Clock (Second Chance) | FIFO를 순환 큐로 개선, 사용 비트를 확인 | LRU 근사치, 구현 쉬움 |
Random | 무작위로 제거 | 실험적 용도, 간단하지만 예측 불가 |
Pintos에서…
Pintos 프로젝트에서는 자신만의 page replacement policy를 직접 구현해야 합니다.
해당 vm_evict_frame
코드에서 구현하면 됩니다.
static struct frame *
vm_evict_frame (void) {
/* 교체할 victim frame을 선택하고 반환 */
}
Pintos에서 권장하는 방식은 Clock Algorithm 입니다.
struct frame
이나struct page
에 accessed 비트 확인합니다.- 한 번 스캔하면서
accessed == true
면, false로 리셋합니다. (Second Chance) accessed == false
면, victim으로 선택합니다.
정책 구현 시 고려할 사항들
고려 항목 | 설명 |
---|---|
accessed 비트 | 하드웨어가 자동으로 세팅함 (TLB miss 시 유지) |
thread 간 공유 여부 | 공유 페이지는 조심해서 관리해야 함 |
frame list 동기화 | evict-frame은 여러 스레드에서 동시에 호출될 수 있음 → 락 필요 |
swap 연동 | victim을 제거하기 전, 내용 저장 필요 (swap_out) |
요약
항목 | 설명 |
---|---|
Page Replacement이란? | 메모리 부족 시 어떤 페이지를 제거할지를 결정하는 정책 |
주요 정책 | FIFO, LRU, Clock, Random 등 |
OSTEP 관점 | LRU 이상적이지만, Clock이 현실적인 대안 |
Pintos 구현 | evict_frame() 에서 Clock 방식으로 victim 선택 → swap 또는 삭제 수행 |
핵심 함수 | pml4_is_accessed() , pml4_set_accessed() , swap_out() 등 |
728x90