가상메모리(Virtual Memory System)에 대해 알아보자

가상메모리 (Virtual Memory System)

1. 메모리

가상메모리에 대해 알아보기 전, 먼저 메모리란 무엇일까?

메모리란 프로그램과 프로그램 수행에 필요한 데이터 및 코드를 저장하는 장치이다. 메모리는 크게 내부 기억장치인 주기억장치와 외부 기억장치인 보조 기억장치로 분류된다.

  • 주기억장치 : 레지스터, 캐시
  • 보조기억장치 : SSD, HDD

2. 가상메모리 등장배경

  • 초창기 컴퓨터에서는 RAM 용량은 가장 큰 실행 어플리케이션의 주소 공간보다 커야 했다. 그렇지 않을 경우 메모리 부족 오류로 해당 어플리케이션을 실행할 수 없었다.
  • 이후, 프로그래머가 일부분만 기억장치에 올려 실행하도록 지정할 수 있는 오버레이 기법이 사용되었다. 해당 기법은 메모리를 덜 사용했지만, 시스템이 충분한 메모리를 갖추고 있지 않으면 결국 메모리 부족 오류가 발생했다.
  • 어플리케이션을 사용하는데 얼마나 많은 메모리가 필요한지 집중하지 않고, 어플리케이션을 실행하는데 최소한 얼만큼의 메모리가 필요한가 집중하여 문제를 해결하는 가상메모리 기법이 탄생했다.
  • 즉, 운영체제가 물리 메모리보다 큰 프로세스를 실행시키기 위해 가상메모리가 탄생했다.

3. 가상메모리

정의

가상메모리란, 메모리가 실제 메모리보다 많아 보이게 하는 기법으로 어떤 프로세스가 실행될 때 메모리에 해당 프로세스 전체가 올라가지 않더라도 실행이 가능하게 한다. 어플리케이션이 실행될 때, 실행에 필요한 일부분만 메모리에 로드하고, 나머지는 디스케 두고 필요할 때마다 교체하면서 사용한느 방식이다. 즉 디스크가 RAM의 보조 기억장치처럼 작동하는 것이다.

결국 빠르고 작은 기억장치(RAM)을 크고 느린 기억장치(디스크)와 병합하여, 하나의 크고 빠른 기억장치(가상메모리)처럼 동작하게 하는 것이다.

가상 메모리르 구현하기 위해서는 컴퓨터가 특수 메모리 관리 하드웨어인 MMU(Memory Management Unit)를 갖추고 있어야만 한다.

논리주소와 가상주소

프로그램/프로세스 내에서 사용하는 주소를 논리주소라고 한다. 논리주소를 가상주소라고도 하는데 둘은 같은 의미이다

  • 컴파일러 입장 : 프로그램 내에서 코드와 변수의 주소는 프로그램 내에서의 상대적인 주소이기 때문에 논리주소라고 부르는 것이 적합
  • 운영체제 입장 : 가상메모리를 다루는 운영체제 입장에서는 프로세스의 가상 주소 공간 내에서 사용되는 주소이기 때문에 가상주소라고 부르는 것이 적합

MMU

  • 가상주소를 물리주소로 변환하고, 메모리를 보호하는 기능을 수행
  • MMU를 사용하면 CPU가 각 메모리에 접근하기 이전에 메모리 주소 번역 작업이 수행됨
  • 메모리를 일일히 가상주소에서 물리주소로 번역하면 작업 부하가 너무 높아지므로, MMU는 RAM을 여러 부분(page)로 나눠 각 페이지를 하나의 독립된 항목으로 처리
  • 페이지 및 주소 번역 정보를 기억하는 작업기 가상 메모리를 구현하는 데 결정적인 절차이다.