가상 메모리란?
가상 메모리
메모리를 가상화하여 프로그램이 대용량의 단일 메모리를 사용하는 것처럼 보이게 하는 것.
가상 메모리의 필요성
- 메모리 관리의 단순화
- 안정성 보장: 프로그램이 메모리에 직접 접근하지 않기 때문에 기본적으로 프로그램간 메모리가 분리된다.
- 주기억장치의 효율적 관리: 운영체제는 프로그램이 사용하지 않는다고 판단되는 가상 메모리 영역을 압축하거나, 스왑하여 실제 메모리의 공간을 확보할 수 있다.
가상 메모리 동작 원리
- 프로세스는 가상 메모리 공간을 할당 받는다. 가상 메모리는
페이지
라고 하는 고정 크기의 블록으로 나뉘어져 있다. 물리적 메모리도 같은 크기의페이지 프레임
으로 나뉜다. - 프로그램이 실행되는 동안 MMU(Memory Management Unit)가 메모리 주소를 찾는다. 페이지 테이블1을 통해 데이터에 접근한다.
- 페이지 폴트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스와핑: 데이터를 필요에 따라 메모리와 스왑 영역 사이에서 이동시키는 것. 페이지 교체 알고리즘
을 사용한다.