Search
Duplicate
⚙️

페이지 교체 알고리즘

생성일
2023/04/08 02:49
태그
OS

페이지 교체 알고리즘

 개념

운영체제는 주기억장치의 용량보다 더 큰 프로그램을 실행하기 위해 가상 메모리 기법을 사용하여 프로그램의 일부만 주기억 장치에 적재하여 사용한다.
페이징 기법으로 메모리를 관리하는 운영체제에서 필요한 페이지가 주기억장치에 적재되지 않았을 경우 해당 페이지를 요구해야한다.
이후 Demand PagingPage-Fault 가 발생한다.
만약 빈 프레임이 없을 경우, 희생 당할 프레임을 고르는 방법들을 페이지 교체 알고리즘 이라고 한다.
페이지 교체 알고리즘의 목적은 Page-Fault 의 비율을 줄이는 것이다.
*Page Fault : CPU가 접근하려는 페이지가 메모리에 없는 상황
*페이지 : 가상 메모리를 일정한 크기로 나눈 블록
*프레임 : 물리 메모리를 일정한 크기로 나눈 블록

 페이지 교체 알고리즘 종류

 FIFO (First In First Out)

가장 먼저 들어온 페이지 순서대로 교체하는 알고리즘
구현은 간단하지만 성능은 좋지않다.
들어온 시간을 저장하거나, 올라온 순서를 큐에 저장한다.
직관적으로 프레임의 수가 많아질수록 Page Fault 횟수는 감소해야 하지만 FIFO 알고리즘은 그렇지 않을 수 있다.
이러한 현상을 Belady's Anomaly 라고 한다.

 LRU (Least Recently Used)

가장 오랫동안 사용하지 않은 페이지를 교체하는 알고리즘
즉, 가장 오래 사용하지 않는 데이터는 앞으로도 사용할 확률이 적을 것이라고 가정한다.
사용된 시간으로 알 수 있는 부분을 저장해야한다.
단점은 프로세스가 주기억장치에 접근할 떄마다 참조된 페이지 시간을 기록해야 하므로 오버헤드가 크다.
카운터, 큐, 스택 같은 별도의 하드웨어가 필요하다.
*카운터 : 각 페이지 별로 존재하는 논리적인 시계, 해당 페이지가 사용될 때마다 0으로 초기화한 후, 시간을 증가시킨다.

 LFU (Least Frequently Used)

참조 횟수가 가장 낮은 페이지를 교체하는 알고리즘 (만약 참조 횟수가 같다면 LRU 방식)
LRU 는 직전의 참조된 시점을 반영하지만, LFU 는 참조 횟수를 통해 장기적인 시간 규모의 참조를 반영할 수 있다.
단점은 가장 최근에 불러온 페이지가 교체될 수 있고, 오버헤드가 크다.

 MFU (Most Frequently Used)

참조 횟수가 가장 많은 페이지 교체 알고리즘
즉, 가장 많이 사용된 페이지가 앞으로는 사용되지 않을 것이라고 가정한다.

 NUR (Not Used Recently)

최근에 사용되지 않은 페이지를 교체하는 알고리즘 (LRU 방식과 유사)
교체되는 페이지의 참조 시점이 가장 오래되었다는 것을 보장하지는 못한다.
적절한 성능과 적절한 오버헤드를 가진다.
각 페이지마다 참조 비트와 변형 비트가 사용된다.
참조 비트 : 페이지가 참조되지 않았을 때 0, 호출 되었을 때 1
변형 비트 : 페이지의 내용이 변경되지 않았을 때 0, 변경 되었을 때 1
교체 시 우선순위는 참조비트 > 변형비트 이다.

 ref)