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