실제 메모리 크기와 상관 없이 메모리를 이용할 수 있도록 가상의 메모리 주소를 사용하는 방법이다.
메모리의 크기는 한정되어있기 때문에 프로그램을 사용할 때 한정된 메모리의 크기를 고려해야한다.
가상메모리
는 실제 메모리보다 휠씬 큰 용량을 가지고 있다(10~20배).
가상메모리 용량 = 물리메모리(메인메모리) + 스왑영역(디스크 내)
그래서 프로그램 사용자들은 실제 메모리 용량이 아닌 가상 메모리 용량에 맞춰 프로그램을 사용할 수 있다.
프로그램이 실행될 때 반드시 프로그램 전체가 실제 메모리에 있을 필요는 없다. 현재 실행되어야 하는 부분만이 실제 메모리에 옮겨져 있으면 되는 것이므로 실제 메모리용량보다 큰 프로그램이 가상메모리를 통해 실행 가능하다.
컴퓨터공학 공부를 한다고 하자. 필요한 책은 수백권이나 책상에 올려놓을 수 있는 책은 10권에 불과하다. 그러나 책장을 마련해 다른 책들을 꽃아두고 필요할 때 책상으로 옮겨온다면 10권 이상의 책을 볼 수 있다!
대표적인 가상 메모리 기법으로 페이징(paging)
, 세그멘테이션(segmentation)
이 있다. 현대 운영체제에서는 두 가지 방식이 혼용되어 사용된다.
시작 물리 주소
와 세그먼트의 길이
를 저장한다.두 방식 모두 매핑 테이블 형태
로 관리 된다.
동적 분할
하는 메모리 관리 작업이 필요하기 때문이다.https://vmilsh.tistory.com/384 (가상메모리)
https://gamedevlog.tistory.com/85 (가상메모리)
https://uomustansiriyah.edu.iq/media/lectures/9/9_2019_01_04!09_25_00_AM.pdf (가상메모리 이미지)
https://m.blog.naver.com/dilector/221787085698 (가상메모리 이미지)
https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Operating%20System/Page%20Replacement%20Algorithm.md
https://github.com/haewon-park/csStudy/blob/main/OS/Paging%EA%B3%BC%20Segmentation.md