운영체제는 프로세스들이 한정된 메모리를 효율적으로 이용할 수 있도록 기존에 메모리에 적재된 불필요한 페이지를 선별하여 보조기억장치로 내보낼 수 있어야 하고, 프로레스들에 적절한 수의 프레임을 할당하여 페이지를 할당할 수 있게 해야한다.
📌 요구 페이징
프로세스를 메모리에 적재할 때 처음부터 모든 페이지를 적재하지 않고 필요한 페이지만을 메모리에 적재하는 기법을
'요구 페이징'이라고 한다.
요구 페이징의 기본적인 작동은 다음과 같다.
1️⃣ CPU가 특정 페이지에 접근하는 명령어를 실행한다.
2️⃣ 해당 페이지가 현재 메모리에 있으면 CPU는 페이지가 적재된 프레임에 접근한다.
3️⃣ 해당 페이지가 현재 메모리에 없으면 페이지 폴트가 발생한다.
4️⃣ 페이지 폴트 처리 루틴은 해당 페이지를 메모리로 적재하고 유효 비트를 1로 설정한다.
5️⃣ 다시 1️⃣을 수행한다.
📌 순수 요구 페이징
아무런 페이지도 메모리에 적재하지 않은 채 무작정 실행하는 방법
프로세스의 첫 명령어를 실행하는 순간부터 페이지 폴트가 계속 발생하고,
어느 정도 적재된 이후부터는 발생 빈도가 떨어진다.
페이징 시스템이 안정적으로 작동하려면 두 가지를 해결해야 한다.
하나는 페이지 교체이고, 다른 하나는 프레임 할당이다.
📌 페이지 교체 알고리즘
쫓아낼 페이지를 결정하는 바법
일반적으로 페이지 폴트를 가장 적게 일으키는 알고리즘을 좋은 알고리즘으로 평가한다.
그렇기에 페이지 교체 알고리즘을 제대로 이해하려면 '페이지 폴트 횟수'를 알 수 있어야 한다.
페이지 폴트 횟수는 '페이지 참조열'을 통해 알 수 있다.
페이지 참조열은 CPU가 참조하는 페이지들 중 연속된 페이지를 생략한 페이지열을 의미한다.
2 2 2 3 5 5 5 3 3 7
가령 CPU가 위와 같은 순서로 페이지에 접근했다면
2 3 5 3 7
위처럼 연속된 페이지를 생략한 페이지열, 다시 말해서 위 숫자열이 페이지 참조열이다.
연속된 페이지를 생략하는 이유는 중복된 페이지를 참조하는 행위는 페이지 폴트를 발생시키지 않기 때문이다.
페이지 교체 알고리즘을 평가할 때 관심있게 고려할 것은 오직 페이지 폴트의 발생 횟수이기 때문에 어차피 페이지 폴트가
일어나지 않을 연속된 페이지에 대한 참조는 고려하지 않는다.
🔹 FIFO 페이지 교체 알고리즘
메모리에 가장 먼저 올라온 페이지부터 내쫓는 방식
2 3 1 3 5 2 3 4 2 3
위와 같은 페이지 참고열이 있을 때, FIFO 페이지 교체 알고리즘을 사용하면 총 4번의 페이지 폴트가 발생한다.
2 3 1 / 5 (2를 내쫓음) 1번
5 3 1 / 2 (3을 내쫓음) 2번
5 2 1 / 3 (1을 내쫓음) 3번
5 2 3 / 4 (5를 내쫓음) 4번
FIFO 교체 알고리즘은 마냥 좋지 않다.
프로그램 실행 내내 사용될 내용을 포함하고 있는 페이지를 쫓아낼 가능성이 높기 때문이다.
🔹 2차 기회 페이지 교체 알고리즘
FIFO 페이지 교체 알고리즘의 변형으로 한번 더 기회를 주는 알고리즘이다.
기본적으로 메모리에서 가장 오래 머물렀던 페이지를 대상으로 내보낼 페이지를 선별한다.
차이가 있는 점은 만일 페이지의 참조 비트가 1이면( CPU에서 접근한 적이 있다는 의미 ),
당장 내쫓지 않고 참조 비트를 0( CPU가 접근한적 없음 )으로 만든 뒤 현재 시간을 적재 시간으로 설정한다.
🔹 최적 페이지 교체 알고리즘
CPU에 의해 참조되는 횟수를 고려하는 페이지 교체 알고리즘이다.
가장 오랫동안 사용되지 '않을' 페이지를 교체한다는 것
앞으로의 사용 빈도가 가장 낮은 페이지를 교체하는 알고리즘을 페이지 교체 알고리즘으로 삼는 것이 가장 합리적이다.
2 3 1 3 5 2 3 4 2 3
위 페이지 참조열에 최적 페이지 교체 알고리즘을 적용하면 총 2번의 페이지 폴트가 발생한다.
2 3 1 / 5 ( 1을 내 쫓음 ) 1번
2 3 5 / 4 ( 5을 내 쫓음 ) 2번
다만 최적 페이지 교체 알고리즘은 구현이 매우 어렵다. 앞으로 오랫동안 사용되지 않을 페이지를 예측한다는 것이 문제다.
따라서 최적 페이지 교체 알고리즘은 그 자체를 운영체제에서 사용하기보다, 주로 다른 페이지 교체 알고리즘의 이론상 성능을 평가하기 위한 목적으로 사용된다. 즉, 최적 페이지 교체 알고리즘을 실행했을 때 발생하는 페이지 폴트 횟수를 페이지 폴트의 하한선으로 간주하고, 최적 페이지 교체 알고리즘에 비해 얼만큼 페이지 폴트 횟수가 발생하느냐를 통해 페이지 교체 알고리즘을 평가하기 위해 사용한다.
🔹 LRU 페이지 교체 알고리즘
가장 오랫동안 사용되지 '않은' 페이지를 교체하는 알고리즘
최근에 사용되지 않은 페이지는 앞으로도 사용되지 않을 것이라는 것을 기본으로 두고 만들어진 알고리즘이다.
2 3 1 3 5 2 3 4 2 3
위 페이지 참조열에 LRU 페이지 교체 알고리즘을 사용하면 총 3번의 페이지 폴트가 발생한다.
2 3 1 / 5 ( 2를 내쫓음 ) 1번
5 3 1 / 2 ( 1을 내쫓음 ) 2번
5 3 2 / 4 ( 5를 내쫓음 ) 3번