본문 바로가기
운영체제

운영체제 23장 - 메모리 관리(10) : 페이지 교체 -

by ChocoPeanut 2017. 5. 11.

운영체제 23

- 페이지 교체 -

 

요구 페이징은 요구되어지는 페이지만 backing store에서 가져와 메인 메모리에 적재하는 방법이다. 필요한 페이지만 메인 메모리에 올리므로 메모리의 낭비를 줄이는 방법으로 사용되었다. valid 비트를 추가한 페이지 테이블과 필요하지 않은 페이지를 보관하는 backing store를 가지고 기능을 수행할 수 있다. 하지만 프로그램 실행이 계속 진행되게 되면 요구 페이지가 늘어나게 되고 언젠가는 메모리가 가득 차게 될 것이다. 페이지를 backing store에서 가져와 메모리에 올려야 되는데 메모리에 자리가 없는 것이다. 이럴 경우 메인 메모리에 있는 특정 페이지를 내보내야할 필요가 있다. 그 자리에 필요한 다른 페이지를 올려야한다. 이를 페이지 교체라고 한다.


메모리가 가득 차면 추가로 페이지를 가져오기 위해 어떤 페이지는 backing store로 몰아내고 그 빈 공간으로 페이지를 가져온다. backing store로 페이지를 몰아내는 것을 page-out이라고 하고 반대로 빈 공간으로 페이지를 가져오는 것을 page-in이라고 한다. 여기서 몰아내는 페이지를 victim page라고 말한다. 말 그대로 희생양 페이지라는 것을 의미한다.




페이지의 교체하기 위해서는 특정 페이지를 몰아내는 page-out으로 희생양 페이지를 만들어야한다. 그러면 어떤 페이지를 victim page를 만들어야 되는가를 선정해야한다. 만약 페이지를 backing store로 몰아낼 때 페이지에 명령에 수정이 일어나지 않았으면 우리는 page-out 과정에서 수정을 할 필요가 없다. 하지만 명령에서 수정이 일어났다면 하드디스크에 저장하기 위해 수정하는 작업이 필요하다. 따라서 두 가지의 경우에는 page-out 과정에서 발생하는 시간이 다르다. 수정이 필요하지 않으면 몰아내는 과정만 진행하면 되지만 수정이 필요한 경우에는 수정하는 작업의 시간이 추가로 발생하게 된다. 따라서 시간을 절약하기 위해서 victim page로 수정되지 않은 페이지를 victim으로 선택하는 경우가 많다. 이를 위해서는 페이지가 수정이 되었는지 아닌지에 대한 기록이 필요하다. 이를 modified bit(dirty bit)를 만들어 이 값을 통해 수정이 되었는지 아닌지를 판별할 수 있게 한다.


위와 같은 과정으로 victim page가 될 수 있는 후보를 선정할 수 있었다. 하지만 실제로 victim page로 나가는 페이지는 특정한 페이지일 것이다. 이는 페이지 교체 알고리즘에 의해서 선정이 된다. 교체 알고리즘에는 다양한 종류가 존재한다. Random으로 선택이 될 수도 있고 FIFO와 같이 첫 번째로 메모리에 들어온 페이지를 먼저 보내는 방법이 있을 수도 있다. 이외에도 Optimal 알고리즘, LRULeast-Recently-Used 알고리즘도 존재한다.


CPU는 메모리에 주소를 보내 명령어나 데이터를 요구한다. 하지만 메모리의 관리를 위해 페이지 테이블을 두어 주소 변환을 하게 된다. 따라서 실제로는 CPU에서 보내는 주소 보다 페이지 테이블에서 어떤 주소를 가리키는 것이 더 중요한 정보가 될 수 있다. 그래서 페이지 교체를 할 때에도 중요한 정보는 페이지 번호이다. 만약 CPU가 내는 주소가 아래와 같다고 가정해보자.


100 101 102 432 612 103 104 611 612


여기에 페이지 사이즈가 100바이트라면 각각의 페이지 번호는 1, 1, 1, 4, 6, 1, 1, 6, 6 이 될 것이다. 물론 100바이트 단위를 제외한 나머지 부분은 변위 부분을 가지게 될 것이다. 첫 번째 페이지를 읽으면 페이지 결함이 일어난다. 따라서 backing store인 하드디스크에서 번호가 1번에 해당하는 페이지를 가져오게 된다. 그러면 뒤에서 1번에 대한 페이지를 불러 온다면 페이지 결함이 일어나지 않을 것이다. 따라서 연속되는 값을 생략하여 표시하면 1, 4, 6, 1, 6 로 나타낼 수 있다. 떨어져 있으면 페이지 교체에 의해 페이지 결함이 일어날 수도 있지만 연속된 경우에는 일어날 일이 없다. 이와 같이 표시하는 것을 page reference string 페이지 참조열이라고 부른다. 이에 대한 내용은 뒤에서 나오는 페이지 알고리즘에 대한 기초 지식이라고 생각하면 된다.