July 09, 2020
앞서 작성한 글에서 다중 프로그래밍을 실현하기 위한 이야기가 많이 등장했습니다.
다중 프로그래밍을 실현하기 위해 많은 프로세스를 동시에 메모리에 올려둬야 합니다.
가상 메모리는 프로세스 전체가 메모리 내에 올라오지 않더라도 실행이 가능하도록하는 기법입니다.
프로그램이 물리 메모리보다 커도 된다는 장점이 있는 이 가상 메모리에 대해 작성해볼까 합니다.
프로그램 전체가 늘 메모리에 올라와 있어야 하는 것은 아닙니다.
프로그램의 일부만 메모리에 올릴 수 있다면 많은 이점이 존재합니다.
더 많은 프로그램을 동시에 실행시킬 수 있습니다.
internal table을 검사해 메모리 참조가 유효, 무효인지를 알아낸다.
요구 페이징은 페이지 폴트 오류 처리 후에 명령어 처리를 다시 시작할 수 있어야 합니다.
극단적으로는 메모리에 페이지가 하나도 안올라와 있어도 프로세스를 실행시키는게 가능합니다.
명령 포인터의 값을 프로세스의 첫 명령으로 설정하는 순간, 메모리에 존재하지 않는 페이지에 있으므로 페이지 폴트를 발생시킵니다.
필요한 페이지가 모두 메모리에 올라올 때까지 필요할 때마다 페이지 폴트가 발생합니다.
필요에 의해서만 페이지를 적재시키는 기법을 순수요구 페이징이라 합니다.
페이지를 요청할 때 page fault가 발생하면 보조저장장치에서 페이지를 가져오게 됩니다.
하지만 물리 메모리가 모두 사용중일 때 페이지 교체가 필요합니다.
빈 페이지 프레임을 찾는다.
이해하기도 쉽고 프로그래밍하기도 쉬운 기법입니다.
하지만 초기 변수처럼 오래됐지만 필요한 정보를 포함하는 경우가 존재합니다.
또한 처음부터 활발히 사용되는 페이지를 교체해서 page fault rate를 높일 수 있습니다.
Belady의 모순 - 페이지를 저장할 수 있는 페이지 프레임의 개수를 늘려도 페이지 폴트가 더 생기는 모순이 존재합니다.
앞으로 가장 오랫동안 사용되지 않을 페이지를 교체하는 기법입니다.
Belady의 모순을 확인한 후 탐구되었고 가장 낮은 페이지 부재율을 보이며 Belady의 모순이 생기지 않는 장점이 존재합니다.
메모리 참조 계획을 예측하기 힘듭니다. 때문에 구현이 어렵습니다.
Least-Recently-Used
가장 오래 사용되지 않은 페이지를 교체합니다.
Least-Frequently-Used
참조 횟수가 가장 적은 페이지를 교체합니다. 참조 횟수가 많다는 뜻을 활발히 사용된다는 뜻으로 받아들이는 알고리즘입니다.
프로세스가 특정 페이지를 집중적으로 사용하다가 다른 기능을 사용하게 되면, 더이상 사용하지 않아도 메모리에 상주해 초기 가정에 어긋나는 시점이 존재합니다.
최적 페이지 교체와 거리가 멀기 때문에 잘 쓰이지 않습니다.
참조 횟수가 가장 작은 페이지는 최근에 메모리에 올라왔으며 앞으로 계속 사용될 것이라는 알고리즘입니다.
최적 페이지 교체와 거리가 멀기 때문에 잘 쓰이지 않습니다.