가상 메모리를 통해 작은 물리 메모리보다 큰 프로세스를 저장할 수 있다.
그렇지만 여천히 메모리의 크기는 한정적이다.
그래서 운영체제가 해야할 일은 더 남아있다.
불필요한 페이지가 선별되지 않도록 해야하면
프로세스들에 적절한 프레임 수를 할당해서 자주 스와핑이 일어나지 않도록 하는 것도 조절해줘야 한다.
오늘은 이 두가지에 대해 정리한다.
프로세스를 메모리에 적재할 때 처음부터 모든 페이지를 적재하지 않고 필요한 페이지만을 메모리에 적재하는 기법
요구 페이징의 기본적인 양상
+) 아무런 페이지도 메모리에 적재하지 않은 채 무작정 실행부터 하는 방법, 처음부터 페이지 폴트가 계속 발생하고 실행에 필요한 페이지가 어느 정도 적재된 이후부터는 페이지 폴트 발생 빈도가 떨어진다. 이를 순수 요구 페이징이라고 한다.
페이지 교체는 메모리가 꽉 찼을 때 페이지를 보조기억장치로 쫓아내고
다음 페이지를 메모리에 적재하는 것
그리고 쫓아낼 페이지를 결정하는 기법을 페이지 교체 알고리즘이라고 한다.
좋은 페이지 교체 알고리즘 = 페이지 폴드 발생 빈도가 적은 알고리즘
따라서 짚고 넘어갈 단어
가장 먼저 올라온 페이지부터 내쫓는 방식
가장 먼저 올라온 페이지들 중에 계속 사용될 페이지가 있었을 수도 있기 때문에 좋은 방법이 아니다.
FIFO 페이지 교체 알고리즘의 방식을 개선한
만약 먼저 적재되어 나가야 한다면 참조비트를 보고 참조비트가 1이면 0으로 바꾸고 그대로 메모리에
그러나 먼저 적재되어 나가야 하는데 참조비트가 0이면 바로 스왑 아웃이다.
앞으로 사용빈도가 가장 낮은 페이지를 교체하는 알고리즘 (먼 미래를 내다보고 예측)
가장 합리적이지만 실제로 구현하는 것이 어렵다.
따라서 실제로 이용되지 않고 다른 페이지 교체 알고리즘의 성능 평가를 할 때 이용된다. 페이지 폴트 횟수의 하한선이 되며 이 하한선을 기준으로 평가한다.
가장 오랫동안 사용되지 않은 페이지를 교체하는 알고리즘(과거 데이터를 바탕으로 예측)
페이지 폴트가 자주 발생하는 이유
하지만 더 근본적인 이유는 프로세스가 사용할 수 있는 프로렘 수가 적기 때문이다. 프레임 수가 적다면 페이지 교체가 많이 발생하기 때문에
CPU의 성능이 저해되는 문제가 발생하고 이를 스래싱이라고 한다.
위 그림을 보면 멀티프로그래밍 즉 메모리에 적재되어 동시에 실행되는 프로그램의 수가 많아지면 CPU의 성능이 증가한다.
하지만 어느 순간 감소하는데 멀티 프로그래밍의 정도가 너무 크면 메모리에 페이지 폴트가 빈번하게 발생하여 CPU의 성능을 떨어트리기 때문이다.
이 방법을 프레임 할당 방식이라고 한다.
즉 프로세스 A에게 보장하는 프레임의 수가 5인과 10인 것을 비교해보면 프로세스 A의 최소 10개가 필요하기 때문에 프레임 수가 5라면 빈번한 페이지 폴트를 발생시킨다.
따라서 운영체제는 각 프로세스가 무리없이 실행하기 위하 최소한의 프레임 수를 파악하고 프로세스에게 적절한 프레임 수를 할당해줘야 한다.