- 가상메모리
- 다중 프로그래밍은 실현하기 위해서 많은 프로세스들을 동시에 메모리에 올려두어야 한다. 가상메모리는 프로세스 전체가 메모리 내에 올라오지 않더라도 실행이 가능하도록 하는 기법. 물리메모리가 프로그램보다 작아도 된다는 장점이 있다.
- 등장배경
- 실행되는 코드의 전부를 물리메모리에 존재시켜야 했고, 메모리 용량보다 큰 프로그램은 실행 시킬 수 없었다. 또한 페이지 교체 등의 성능 이슈가 발생.
- 그러던 중 가끔만 사용 되는 코드가 메모리를 차지한다는 것을 보고 이점을 활용하여 비효율적으로 전체 프로그램이 메모리에 올라와 있지 않아도 실행되게 만듦.
- 장점
- 물리 메모리 크기에 제약 받지 않음.
- 더 많은 프로그램을 동시에 실행 할 수 있게 됨. 이에 따라 응답시간은 유지되고, cpu이용률과 처리율은 높아진다.
- swap에 필요한 입출력이 줄어들기 때문에 프로그램들이 빠르게 실행.
- 하는일
- 가상메모리는 실제의 물리 메모리 개념과 사용자의 논리메모리 개념을 분리.
- 이로써 작은 메모리를 가지고도 얼마든지 큰 가상 주소공간을 프로그래머에게 줄 수 있게 됨.
- 가상주소공간
- 한 프로세스가 메모리에 저장되는 논리적인 모습을 가상메모리에 구현한 공간. 프로세스가 요구하는 메모리공간을 가상메모리에서 제공함으로서 현재 직접적으로 필요치 않은 메모리 공간은 실제 메모리에 올리지 않은 것으로 물리 메모리를 절약 할 수 있다.
- 예를 들어, 한 프로그램이 실행 되면 논리메모리로 100kb가 요구된다고 하자. 하지만 실행까지 필요한 메모리 공간(Heap, stack, 코드, 데이터) 의 합이 40kb 라면, 실제 메모리는 40kb만 올라가고 나머지 60kb는 필요할때 물리메모리에 요청한다.
- 프로세스간의 페이지 공유
- 가상메모리는
- 시스템 라이브러리가 여러 프로세스들 사이에 공유될 수 있도록 한다. 각 프로세스들은 공유라이브러리를 자신의 가상 주소공간에 두고 사용하는 것처럼 인식하지만, 라이브러리가 올라가 있는 물리 메모리 페이지들은 모든 프로세스들과 공유되고 있다.
- 프로세스들이 메모리를 공유하는 것을 가능하게 하고, 프로세스들은 공유메모리를 통해 통신 할 수 있다.(IPC) 이 또한, 각 프로세스들은 각자 자신의 주소공간처럼 인식하지만(공유라이브러리를 통해) 실제 물리메로는 공유되고 있다.
- Fork()를 통한 프로세스 생성 과정에서 페이지들이 공유하는 것을 가능하도록 한다.