컴퓨터마다 물리 메모리, 즉 실제 메모리의 크기가 다르다. 가상 메모리는 크기가 다른 물리 메모리에서 일관되게 프로세스를 실행할 수 있는 기술이다.

가상 메모리란⁉️

메모리의 크기는 컴퓨터마다 다른데 운영체제가 물리 메모리의 크기에만 의존한다면 2GB의 메모리에서 동작하는 프로그램이 1GB의 메모리에서는 동작하지 않을 수 있다.

현대 메모리 관리의 가장 큰 특징은 물리 메모리의 크기와 프로세스가 올라갈 메모리의 위치를 신경 쓰지 않고 프로그래밍하도록 지원한다는 것이다. 이러한 메모리 시스템을 가상 메모리라고 부른다.

가상 메모리의 크기와 주소

가상 메모리 시스템의 모든 프로세스는 물리 메모리와 별개로 자신이 메모리의 어느 위치에 있는지 상관없이 0번지부터 시작하는 연속된 메모리 공간을 가진다. 이는 물리 메모리 관리에서 소개한 논리 주소와 유사하지만 한 가지 차이점이 있다. 논리 주소는 물리 메모리의 주소 공간에 비례하고, 가상 주소는 물리 메모리 공간이 아닌 가상의 가상의 주소 공간을 가진다는 것이다.

가상 메모리의 구성

가상 메모리의 구성

이론적으로 가상 메모리는 무한대의 크기이다. 그러나 실제가상 메모리의 최대 크기는 컴퓨터 시스템이 가진 물리 메모리의 최대 크기로 한정된다.

그런데 가상 메모리는 실제로 사용할 수 있는 최대 크기의 제약에도 불구하고 어떻게 이론적으로 무한대의 크기가 있는 것처럼 구현할 수 있을까?

32bit CPU의 최대 메모리 크기는 4GB이다. 이 시스템에서 각각 4GB 주소 공간을 차지하는 10개의 프로세스를 동시에 실행하려면 운영체제를 포함하여 적어도 40GB의 메모리가 필요하다. 이 경우 가상 메모리 시스템에서는 물리 메모리의 내용 중 일부를 하드디스크의 이부 공간, 즉 스왑 영역으로 옮긴다. 스왑 영역하드디스크에 존재하지만 메모리 관리자가 관리하는 영역으로 옮긴다. 스왑 영역은 하드디스크에 존재하지만 메모리 관리자가 관리하는 영역으로서 메모리의 일부이며, 가상 메모리의 구성 요소 중 하나이다. 메모리 관리자는 물리 메모리의 부족한 부분을 스왑 영역으로 보충한다. 즉 물리 메모리가 꽉 찼을 때 일부 프로세스를 스왑 영역으로 보내고(스왑아웃), 몇 개의 프로세스가 작업을 마치면 스왑 영역에 있는 프로세스를 메모리로 가져온다.(스왑인)

동적 주소 변환 (run-time binding)

가상 메모리의 메모리 분할 방식

(세그먼테이션, 페이징, 세그먼테이션-페이징)