다중 프로그래밍을 실현하기 위해서는 많은 프로세스들을 동시에 메모리에 올려두어야 함.
가상메모리는 프로세스 전체가 메모리 내에 올라오지 않더라도 실행이 가능하도록 하는 기법임
한 프로세스가 메모리에 저장되는 논리적인 모습을 가상 메모리에 구현한 공간임.
프로세스가 요구하는 메모리 공간을 가상 메모리에서 제공함으로써 현재 직접적으로 필요치 않은 메모리 공간은 실제 물리 메모리에 올리지 않아서 메모리를 절약할 수 있음
예시
한 프로그램이 실행되며 논리 메모리로 100KB가 요구되었다고 하자. 하지만 실행까지 필요한 메모리 공간인 Heap, Stack, 코드, 데이터 의 합이 40KB면 실제 물리 메모리에는 40KB만 올라가있고 나머지 60KB는 필요하면 물리 메모리에게 요구하는 것
✔️ 시스템 라이브러리가 여러 프로세스들 사이에 공유될 수 있도록 함
✔️ 프로세스들이 메모리를 공유하는 것을 가능하게 하고, 프로세스들은 공유 메모리를 통해 통신할 수 있음
✔️ fork()를 통해서 페이지들이 공유되는 것을 가능하게 함
요구 페이징 : 프로그램 실행 시작 시에 프로그램 전체를 디스크에서 물리 메모리에 적재하는 대신, 초기에 필요한 것들만 적재하는 전략
요구 페이징을 사용하는 가상 메모리에는 실행과정에서 필요해질 때 페이지들이 적재 됨. 한 번도 접근되지 않은 페이지는 물리 메모리에 적재되지 않음.
프로그램 실행 시에 모든 항목이 물리 메모리에 올라오지 않기 때무에 프로세스의 동작에 필요한 페이지를 요청하는 과정에서 page fault가 발생하면, 원하는 페이지를 가져오게 됨.
하지만 메모리를 모두 사용중이라면 페이지 교체가 이뤄져야 함
FIFO, OPR, LRU, LFU, MFU 등이 있음