가상 메모리
가상 메모리(Virtual Memory)
다중 프로그래밍 기법을 사용하기 위해서는 많은 프로세스들을 동시에 메모리에 올려두어야 한다. 따라서 가상 메모리 기법이 나오게 되었다.
가상 메모리는 프로세스 전체가 메모리 내에 적재되지 않아도 실행이 가능하도록 하는 기법으로, 프로세스마다 각각 0번지부터의 주소 공간을 가지게 되고, 이 공간 중 일부는 물리적 메모리에 적재되고 일부는 디스크의 스왑 영역에 존재하게 된다.
가상 메모리가 개발된 배경은 실행되는 코드의 전부를 물리 메모리에 존재시켜야 했고, 메모리 용량보다 큰 프로그램은 실행이 불가능했다. 여러 프로그램을 동시에 메모리에 올리기에 용량의 한계와 페이지 교체등의 성능 이슈가 발생하였다.
운영체제는 CPU 에서 지금 수행해야 할 부분만 메모리에 올리고 당장 필요하지 않은 부분은 디스크의 스왑 영역에 내려놓고 필요해지면 메모리에 있는 부분과 교체하는 방식을 사용한다. 이를 통해서 물리적 메모리의 크기에 제약을 받지 않고 더 많은 프로그램을 동시에 실행할 수 있다. 이에 따라 '응답시간'은 유지되고, 'CPU 이용률'과 '처리율'은 높아진다. 가상 메모리는 하드디스크에 저장되어 있다.
프로세스간 페이지 공유
가상 메모리는 여러 프로세스들이 메모리를 공유하는 것을 가능하게 하고, 프로세스들은 공유 메모리를 통해 통신할 수 있다. 각 프로세스들은 각자 자신의 주소 공간처럼 인식을 하지만, 실제 물리 메모리는 공유되고 있다. 가상 메모리는 fork를 통한 프로세스 생성 과정에서 페이지들이 공유되는 것을 가능하게 한다.
요구 페이징(Demand Paging)
요구 페이징이란 프로그램 실행 시작 시에 프로그램 전체를 디스크에서 물리 메모리에 적재하는 대신, 초기에 필요한 것들만 적재하는 전략이다. 한 번도 접근이 되지 않는 페이지는 물리 메모리에 적재되지 않는다. 프로세스 내 개별 페이지들은 '페이저(pager)'에 의해 관리가 되는데, 페이저는 프로세스 실행에 실제로 필요한 페이지들만 메모리에 읽어오기 때문에 사용이 안될 페이지를 가져오는 시간과 메모리의 낭비를 줄일 수 있다.
페이지 부재 트랩(Page Fault)
요구 페이징에서 프로그램에 대한 모든 내용이 물리 메모리에 올라오지 않기 때문에 메모리에 없는 페이지에 접근하려할 때 페이지 부재 트랩이 발생한다.
페이지 부재 트랩이 발생하면 원하는 페이지를 저장 장치에서 가져오게 된다.(물리 메모리가 가득 찬 상태라면, 페이지 교체가 이뤄진다.)
페이지 교체 알고리즘을 클릭하여 페이지 교체 알고리즘에 대해 알 수 있다.
쓰레싱(Thrashing)
메모리에 페이지 부재율이 과도하게 높아지는 현상으로 심각한 성능의 저하를 일으킨다.
운영체제는 CPU 이용율이 떨어질 때, 새로운 프로세스를 추가해서 멀티프로그래밍 정도(degree of multiprogramming)를 높이려 하는데, 이 때, 전역 페이지 교체 알고리즘으로 페이지 교체가 일어나기 때문에 쓰레싱이 일어나게 된다.
또한 CPU 이용률이 최대값이고, 멀티프로그래밍 정도(degree of multiprogramming)를 더 높일 경우에도 쓰레싱이 일어나게 된다.
쓰레싱을 해결하기 위해서는 '각 프로세스가 필요로 하는 최소한의 프레임 개수를 보장'하고 '페이지 프레임을 늘림'으로서 프로세스가 쓰레싱을 유발했더라도 다른 프로세스로 부터 페이지 프레임을 뺏어올 수 없도록 해야한다.
나올 수 있는 면접 질문
가상 메모리란?
요구 페이징이란?
쓰레싱의 정의와 해결방안?
참고 url
기여자
HelloNaks
📦