가상 메모리란?

가상 메모리

메모리를 가상화하여 프로그램이 대용량의 단일 메모리를 사용하는 것처럼 보이게 하는 것.

가상 메모리의 필요성

  • 메모리 관리의 단순화
  • 안정성 보장: 프로그램이 메모리에 직접 접근하지 않기 때문에 기본적으로 프로그램간 메모리가 분리된다.
  • 주기억장치의 효율적 관리: 운영체제는 프로그램이 사용하지 않는다고 판단되는 가상 메모리 영역을 압축하거나, 스왑하여 실제 메모리의 공간을 확보할 수 있다.

가상 메모리 동작 원리

  1. 프로세스는 가상 메모리 공간을 할당 받는다. 가상 메모리는 페이지라고 하는 고정 크기의 블록으로 나뉘어져 있다. 물리적 메모리도 같은 크기의 페이지 프레임으로 나뉜다.
  2. 프로그램이 실행되는 동안 MMU(Memory Management Unit)가 메모리 주소를 찾는다. 페이지 테이블1을 통해 데이터에 접근한다.
  3. 페이지 폴트2가 발생하면 데이터를 스와핑(Swapping)3한다.

페이지 교체 알고리즘

  • 오프라인 알고리즘(LFD, Longest Forward Distance): 가장 먼 미래에 참조되는 페이지와 현재의 페이지를 바꾸는 알고리즘.
  • FIFO(First In First Out): 가장 먼저 저장된 페이지부터 교체하는 방법.
  • LRU(Least Recently Used): 최근에 사용되지 않은 페이지를 바꾸는 방법.
  • LFU(Least Frequently Used): 가장 참조 횟수가 적은 페이지를 교체하는 알고리즘.
  • NUR(Not Used recently): 일명 clock 알고리즘. 시계 방향으로 돌면서 0을 찾고, 0을 찾은 순간 해당 페이지를 교체한 후에 해당 부분을 1로 바꾸는 알고리즘. 만약 한 바퀴 도는 동안 사용되지 않으면 0이 된다.


1페이지 테이블: 가상 주소와 실제 주소를 매핑한 테이블. 속도 향상을 위해 캐싱계층인 TLB(Translation Lookaside Buffer)를 사용한다.
2페이지 폴트: 접근하려는 데이터가 주기억 장치가 아니라 보조기억 장치(스왑 공간)에 존재하는 것.
3스와핑: 데이터를 필요에 따라 메모리와 스왑 영역 사이에서 이동시키는 것. 페이지 교체 알고리즘을 사용한다.