가상 메모리란 뭘까? 컴퓨터마다 물리 메모리(실제 메모리)의 크기가 다른데 가상 메모리는 물리 메모리의 크기와 상관없이 프로세스에 커다란 메모리 공간을 제공한다.
가상 메모리 또한 0번지부터 시작하는 연속된 메모리 공간을 가진다.
논리 주소와 가상 주소 차이점
논리 주소는 물리 메모리의 주소 공간에 비례한다.
가상 주소는 물리 메모리 공간이 아닌 가상의 주소 공간을 가진다.
32bit CPU의 최대 메모리 크기는 4GB이다. 각각 4GB 주소 공간을 차지하는 10개의 프로세스를 동시에 실행하려면 40GB의 메모리가 필요한데 가상 메모리 시스템에서는 어떤 작업이 이루어질까?
이 경우 가상 메모리 시스템에서는 물리 메모리 내용의 일부를 스왑 영역으로 옮기고 작업을 마치면 메모리로 가져오는 작업을 진행한다.
즉, 가상 메모리에서 메모리 관리자가 사용할 수 있는 메모리의 전체 크기는 물리메모리와 스왑 영역을 합한 크기이다. 이 때 가상 주소를 실제 메모리의 물리 주소로 변환하는데 이를 동적 주소 변환(Dynamic Address Translation, DAT)이라고 한다.
다음으로 가상 메모리의 분할 방식에 대해 알아보자. 가상 메모리 시스템에서는 운영체제를 제외한 나머지 메모리 영역에 일반 프로세스를 할당한다. 가상 메모리 시스템에서 가변 분할 방식을 이용한 메모리 관리 기법은 세그먼테이션, 고정 분할 방식을 이용한 메모리 관리 기법은 페이징이라고 한다.
가상 메모리 시스템에서 가상 주소는 물리 주소나 스왑 영역 중 한 곳에 위치하며, 메모리 관리자는 가상 주소와 물리 주소를 일대일 매핑 테이블로 관리한다. 매핑 테이블로 관리하면 가상 주소가 물리 메모리의 어느 위치에 있는지 알 수 있다.
프로세스 A는 물리 메모리의 세그먼트 0에 위치하고 프로세스 B는 세그먼트 1에 위치한다. 한편 프로세스 D는 스왑 영역에 위치한다. 만약 프로세스 A의 값이 필요하다면 세그먼트 0에서 원하는 데이터를 가져오면 된다.