관리 메뉴

클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

가상 메모리 4 - 페이지 교체와 프레임 할당 본문

알고리즘 및 자료 관리/알고리즘 & 코딩테스트

가상 메모리 4 - 페이지 교체와 프레임 할당

huenuri 2024. 10. 18. 16:36

14장의 마지막 장인데 이 내용도 만만치 않은 주제이다. 앞선 절에서 페이징의 기본적인 개념에 대해 학습했다면 이번 절에서는 운영체제가 수많은 페이지를 어떻게 관리하는지 학습해 볼 것이다.

 

 

이번 절에서는 요구 페이징의 개념과 페이지 교체 알고리즘, 그리고 프레임 할당에 대해 학습하며 운영체제가 이러한 기능을 어떻게 수행하는지 알아보겠다.


 

 

 

요구 페이징

 

아무런 페이지도 메모리에 적재하지 않은 채 무작정 실행부터 할 수도 있다. 이 경우 프로세스의 첫 명령어를 실행하는 순간부터 페이지 폴트가 계속 발생하게 되고, 실행에 필요한 페이지가 어느 정도 적재된 이후부터는 페이지 폴트 발생 빈도가 떨어진다.

 

 


 

 

 

 

페이지 교체 알고리즘

 

 

 

 

 

여기서 연속된 페이지를 생략한 페이지열이 페이지 참조열이다.

 

연속된 페이지를 생략하는 이유는 중보된 페이지를 참조하는 행위는 페이지 폴트를 발생시키지 않기 때문이다. 페이지 교체 알고리즘을 평가할 때 관심 있게 고려해야 할 것은 오직 페이지 폴트의 발생 횟수이기 때문에 어차피 페이지 폴트가 일어나지 않을 연속된 페이지에 대한 참조는 고려하지 않는 것이다.


 

 

 

 

 

 

 

 

 

 

2차 기회 페이지 교체 알고리즘

이름 그대로 한 번 더 기회를 주는 알고리즘이다. 기본적으로 메모리에서 가장 오래 머물렸던 페이지를 대상으로 내보낼 페이지를 선별한다. 차이가 있다면 페이지의 참조  비트가 1일 경우, 당장 내쫓지 않고 참조 비트를 0으로 만든 뒤 현재 시간을 적재 시간으로 설정한다. 메모리에 가장 오래 머무른 페이지의 참조 비트가 0일 경우 이 페이지는 가장 오래된 페이지면서 동시에 사용하지 않은 페이지라고 볼 수 있으므로 보조기억장치로 보내면 된다.

 

 

5개의 프레임을 가진 메모리에 3, 1, 5, 2, 4 순으로 적재되었고 참조 비트가 아래와 같다고 가정해보겠다.

 

이런 상황에서 페이지 6이 새롭게 적재되어야 한다고 해보자. 기존 FIFO 페이지 교체 알고리즘대로였다면 보조기억장치로 내보낼 페이지는 페이지 3이다. 하지만 2차 기회 페이지 교체 알고리즘은 페이지 3의 참조 비트를 보고, 1일 경우 이를 0으로 변경한 뒤 최근에 적재된 페이지로 간주한다.

 

가장 오래 머물렀던 페이지는 1이다. 1은 오랫동안 메모리에 머물러 있었으면서 동시에 CPU가 접근하지 않은 페이지인 셈이다. 이 경우 페이지 1을 내보내고 페이지 1이 적재되었던 프레임에 페이지 6을 적재하면 된다.


 

 

 

 

 

 

두 번의 페이지 폴트가 발생한다. FIFO 알고리즘에 비하면 페이지 폴트 빈도가 훨씬 낮아진 것을 확인할 수 있다.

 

 


 

 

 

 

 

 


 

 

 

 

스래싱과 프레임 할당

 

스래싱은 지나치게 빈번한 페이지 교체로 인해 CPU 이용률이 낮아지는 문제를 뜻한다.

 

 

이 값이 높으면 CPU는 현재 일을 쉬지 않고 하고 있다는 의미이고, 이 값이 낮다면 CPU는 현재 일을 많이 하고 있지 않다는 것을 의미한다. 가로축인 멀티프로그래밍의 정도를 통해 메모리에 올라와 있는 프로세스의 수를 알 수 있다.

메모리에서 동시 실행되는 프로세스의 수를 멀티프로그래밍의 정도라고 한다. 멀티프로그래밍의 정도가 높다면 현재 메모리에는 많은 프로세스가 동시에 실행 중이고, 낮다면 낮은 프로세스가 동시에 실행 중이라고 이해하면 된다.

 

필요 이상으로 늘리면 각 프로세스들이 사용할 수 있는 프레임 수가 적어지기 때문에 페이지 폴트가 지나치게 빈번하게 발생하고, 이에 따라 CPU 이용률이 떨어져 전체적인 성능이 저하된다. 아무리 CPU의 성능이 뛰어나도 동시에 실행되는 프로세스를 수용할 물리 메모리가 너무 작다면 전체 컴퓨터의 성능이 안 좋아지는 이유는 이런 이유 때문이다.

 

 

 

세 개의 프로세스에 총 300개의 프레임을 할당할 수 있다면 각 프로세스에 100개의 프레임을 할당하는 방식이다. 이는 그리 권장할만한 방법이 아니다. 실행되는 프로세스들의 크기는 각기 다른데, 천편일률적으로 동일한 프레임 개수를 할당하는 것은 비합리적이다.

 

 

크기가 상대적으로 큰 워드 프로세서와 상대적으로 작은 메모장이 동시에 실행되다면 큰 것에는 더 많이 할당해 주고, 작은 것에는 적게 할당하는 방식이다.

 

균등 할당과 비례 할당 방식은 프로세스의 실행 과정을 고려하지 않고 단순히 프로세스의 크기와 물리 메모리의 크기만을 고려한 방식이라는 점에서 정적 할당 방식이라고 한다.

 

 

프로세스를 실행하는 과정에서 배분할 프레임을 결정하는 방식에는 크게 작업 집합 모델을 사용하는 방식과 페이지 폴트 빈도를 사용하는 방식이 있다.

 

CPU가 메모리를 참조할 때는 참조 지역성의 원리에 의거해 주로 비슷한 구역을 집중적으로 참조한다. 한 프로세스가 100개의 페이지로 이루어졌다고 해서 100개를 모두 고르게 참조하는 것이 아니라, 특정 시간 동안에는 몇몇 개의 페이지만을 집중적으로 참조하게 된다.

그렇다면 CPU가 특정 시간 동안 주로 참조한 페이지 개수만큼만 프레임을 할당하면 페이지 교체는 빈번하게 발생하지 않을 것이다. 만약 CPU가 어떤 프로세스를 실행하는 동안 3초에 7개의 페이지를 집중적으로 참조했다면 운영체제는 그 프로세스를 위해 그 순간만큼은 최소 7개의 프레임을 할당하면 된다.

 

실행 중인 프로세스가 일정 시간 동안 참조한 페이지의 집합을 작업 집합이라고 한다.


 

 

작업 집합 구하기

시간 t1에서 최소 3개의 프레임이 필요하다.

 

이 경우 최소 5개의 프레임이 필요하다.


 

 

 

 

 

 


 

 

 

단원 마무리하기

 

 

3회이다. 가장 오랫동안 사용하지 않을 것을 빼면 2, 1, 5에서 페이지 폴트가 발생한다.


 

 

 

학습을 마치고

이번 단원은 정말 하기 싫은 마음이 커서 억지로 했던 것 같다. 컴퓨터 구조와 운영체제를 공부한 지 5일째가 되어가자 이젠 슬슬 지치고 질릴 때가 되었나 보다. 마지막 장이 남아있는데 이건 다음에 공부해 볼까 생각 중이다.

오후 공부도 이제 1시간 반 정도 남았는데 이 시간이 빨리 지나갔으면 하는 마음이다. 페이지 폴트를 구하는 건 너무 어렵고 아직 이해가 안 되는 부분이 많다. 아마도 강의를 거의 졸면서 들어서일 것이다.