[OS] 요구 페이징, 스래싱, 페이지 교체 알고리즘
요구 페이징
처음부터 모든 페이징을 적재하지 않고 페이지 폴트가 발생하면 그 때 페이지를 적재한다.
순수 요구 페이징
아무 페이지를 적재하지않고 실행하는 방법으로 첫 명령어 실행부터 페이징 폴트가 발생하며 적당한 페이지가 적재된 이후부터 페이지 폴트가 감소한다.
스래싱
지나친 페이지 폴트로 인해 페이지 교체에 너무 많은 시간을 소요하여 성능이 저하되는 문제이다.
⭐ 멀티프로그래밍의 정도가 늘어나면 CPU 이용률이 늘어나다가 너무 많은 프로세스를 적재한 이후 부터는 CPU 이용률이 내려가게된다. 이 이유는 스래싱이 발생하기 때문이다.
따라서 동시에 실행되는 프로세스 수를 늘린다고 해서 반드시 CPU 이용률에 비례하여 높아지는 것은 아니다.
페이지 폴트를 줄이려면 보조기억 장치로 내보낼 페이지와 메모리에 적재할 페이지를 잘 선별하면 된다. (== 페이지 교체 알고리즘)
페이지 교체 알고리즘
페이지 폴트를 줄이기 위해 메모리에 적재된 페이지 중 페이지 아웃 시킬 페이지를 선정하는 방법
좋은 페이지 교체 알고리즘은 페이지 폴트를 적게 일으키는 알고리즘이다.
- FIFO 페이지 교체 알고리즘
- 2차 기회 FIFO 페이지 교체 알고리즘
- 최적 페이지 교체 알고리즘
- LRU 페이지 교체 알고리즘
FIFO 페이지 교체 알고리즘
가장 먼저 메모리에 적재된 페이지부터 페이지 아웃 시킨다.
초기에 적재된 페이지 중 프로그램 실행 내내 유지할 데이터가 있을 수 있기 때문에 문제가 있다. 이 문제 때문에 2차 기회 FIFO 알고리즘이 생겨나게 되었다.
2차 기회 FIFO 페이지 교체 알고리즘
가장 오래 메모리에 머물렀던 페이지부터 페이지 아웃시킨다.
다만 참조 비트가 1일 경우, 이를 0으로 변경한 후 한번 더 기회를 부여한다.
참조 비트가 0일 경우 페이지 아웃한다.
이로써 페이지를 실제로 교체하지 않으면서도 페이지가 최근에 참조되었는지 여부를 고려할 수 있다.
최적 페이지 교체 알고리즘
앞으로 사용 빈도가 가장 낮은 페이지부터 교체하는 알고리즘이다.
가장 낮은 페이지 폴트 빈도율을 보장하지만 앞으로 CPU가 어떤 페이지를 얼마나 참조할지 예측하기 어렵기 때문에 이론적으로 페이지 교체 알고리즘의 성능을 평가할 때 주로 사용한다.
LRU 페이지 교체 알고리즘
최근에 사용하지 않은 페이지를 페이지 아웃 시키는 알고리즘
copy-on-write
fork() 시스템 호출을 사용하여 복제될 때, 부모와 자식 프로세스는 처음에는 같은 메모리를 공유하다가 두 프로세스중 어느 곳에 쓰기 작업을 했을 때, 즉 필요한 경우에만 데이터를 복사하는 방법이다.
중복 저장을 하지 않기 때문에 메모리를 효율적으로 관리할 수 있고 프로세스의 생성 시간을 최소화 할 수 있다.