가상 메모리

가상 메모리 또는 가상 기억 장치(, virtual memory, virtual storage)는 메모리 관리 기법의 하나로, 컴퓨터 시스템에 실제로 이용 가능한 기억 자원을 이상적으로 추상화하여 사용자들에게 매우 큰 (주) 메모리로 보이게 만드는 것을 말한다. 각 프로그램에 실제 메모리 주소가 아닌 가상의 메모리 주소를 주는 방식이다.

이러한 방식은 멀티태스킹 운영 체제에서 흔히 사용되며, 실제 주기억장치보다 큰 메모리 영역을 제공하는 방법으로도 사용된다.

가상적으로 주어진 주소를 가상 주소(virtual address) 또는 논리 주소(logical address) 라고 하며, 실제 메모리 상에서 유효한 주소를 물리 주소(physical address) 또는 실주소(real address)라고 한다. 가상 주소의 범위를 가상 주소 공간, 물리 주소의 범위를 물리 주소 공간이라고 한다.

가상 주소 공간은 메모리 관리 장치(MMU)에 의해서 물리 주소로 변환된다. 이 덕분에 프로그래머는 가상 주소 공간상에서 프로그램을 짜게 되어 프로그램이나 데이터가 주메모리상에 어떻게 존재하는지를 의식할 필요가 없어진다. 대부분의 현대적 아키텍처와 운영 체제는 가상 메모리 기능을 제공하며, 각 응용 프로그램에 더 적합한 메모리 관리를 위해 어도비 포토샵과 같은 일부 응용 프로그램은 스스로 가상 메모리를 관리하기도 한다.

가상 메모리의 개념은 1957년에 발표되었다. 실제 적용된 것은 맨체스터 대학교가 Atlas용으로 1961년에 개발한 것이 최초이다. 1965년에 MIT가 개발한 멀틱스 시스템 이후 본격적으로 채용되기 시작했다.

가상 메모리는 크게 나누어 세그먼트(segment) 방식과 페이징 방식의 2종류가 있다. 예를 들어 MC68000 시스템에서는 68451(세그먼트(segment) 방식)과 68851(페이징 방식) 두 가지의 MMU가 준비되어 있었다.

역사 
1940년대와 1950년대에 모든 대형 프로그램들은 오버레이와 같은, 1차, 2차 기억 장치를 위한 로직을 포함해야 했다. 1차 메모리의 확장을 위해서만이 아니라, 프로그래머들이 쉽게 사용할 수 있도록 확장하기 위해서 가상 메모리가 도입되었다. 멀티프로그래밍과 멀티태스킹을 허용하기 위해, 수많은 초기의 시스템들은 가상 메모리 없이 여러 프로그램들 사이에 메모리를 나누었으며, 레지스터를 경유하는 PDP-10 초기 모델을 예로 들 수 있다.

가상 메모리의 개념은 1956년 베를린 공과대학교에서 독일의 물리학자 프리츠 루돌프(Fritz-Rudolf Güntsch)가 처음 개발하였으며, 《Logical Design of a Digital Computer with Multiple Asynchronous Rotating Drums and Automatic High Speed Memory Operation》이라는 그의 박사 논문에서  6개의 100 워드 블록의 1차 코어 메모리 및 1,000개의 100 워드 블록의 주소 공간, 1차 메모리와 2차 드럼 메모리 간에 블록을 자동으로 이동하는 하드웨어를 갖춘 머신을 기술하였다.
페이징은 160,000 워드의 1차 코어 메모리를 추가적인 96,000 워드의 2차 드럼 메모리와 병합함으로써 아틀라스 컴퓨터의 작업 메모리를 확장하는 방법의 하나로 맨체스터 대학교에서 최초로 구현되었다. 최초의 아틀라스는 1962년에 도입되었지만 작업 중인 페이징 견본은 1959년에 개발되었다. 1961년, 버로프사는 페이징 대신 세그멘테이션을 지원하는 B5000이라는 독자적으로 가상 메모리를 갖춘 최초의 상용 컴퓨터를 출시하였다.

인위적 연속성 
인위적 연속성(artificial continuity)이란 가상기억장치의 개념에서 가상공간의 연속적 주소가 실제 물리적인 공간상에서 연속일 필요가 없다는 것을 뜻하는 말이다. 사상 표를 통해서 가상기억장치의 주소로부터 실기억장치의 주소를 알 수 있다.

같이 보기 

 물리 메모리, 물리 주소
 메모리 주소
 주소 공간
 가상 주소 공간
 CPU 설계
 페이징
 메모리 관리
 메모리 할당
 보호 모드

각주 

 
컴퓨터 시스템