June 13, 2021
한 프로세스의 크기는 물리 메모리의 크기보다 클 수 없다. 프로세스는 항상 메모리에 적재되어 있어야하기 때문.
그런데, 반드시 모든 프로세스가 항상 메모리에 올라와 있어야하는가? -> No. 왜냐하면 모든 프로세스가 항상 동시에 실행되는 것은 아니기 때문.
예를 들어, 워드 프로세스와 웹 브라우저를 동시에 실행시켜놓고, 웹 서핑만 계속하는 경우, 워드 프로세스가 반드시 메모리에 올라와있어야 할 이유는 없음.
또한 현재 실행되고 있는 프로세스일지라도, 반드시 모든 코드가 메모리에 올라올 필요는 없음. 예를 들어, 예외처리를 위한 코드, 잘 사용되지 않는 기능을 위한 코드, 필요 이상으로 크게 할당된 배열 등, 당장 필요하지 않는 내용들이 존재한다.
따라서 프로세스가 저장되는 공간을 보조 저장 장치까지 확장해서 프로세스를 보조 저장 장치에 저장하여, 필요할때만 메모리에 올려서 사용하면, 물리 메모리보다 더 큰 크기의 프로세스를 실행하는 것도 가능함. 이것이 가상 메모리.
(출처: Operating System Concepts 10th ed.)
이렇게 당장 필요하지 않은 프로세스 영역을 보조 저장 장치로 내쫓는 것을 스왑-아웃(swap-out), 보조 저장 장치에 저장된 프로세스를 메인 메모리로 올리는 것을 스왑-인(swap-in), 그리고 보조 저장 장치에 프로세스가 저장되는 영역을 스왑 영역이라고 한다.
요구 페이징(demand-paging), 요구 세그먼트(demand-segment) 등 OS마다 세부적인 구현 방법은 다르다.
Turnaround Time과 Response Time이 늘어나지 않으면서 CPU 이용률과 처리량을 높일 수 있다.
프로세스간 메모리 공유가 가능해진다.
프로그램 사용 중에 메모리 공간에 대해 신경쓰지 않아도 된다.