가상메모리에 대해 알아보기 전에 메모리란
메모리
- 메모리란 프로그램과 프로그램 수행에 필요한 데이터 및 코드를 저장하는 기억 장치
- 메모리는 크게 내부 기억장치인 주기억장치와 외부 기억장치인 보조 기억장치로 분류됨.
- 하드웨어 관점에서 메모리의 종류는 다음 사진과 같이 4가지가 존재하며 DRAM(RAM, DDR4) 등의 메모리와 CPU 안에 있는 레지스터와 캐시등을 주기억장치라고 하며 SSD, HDD는 보조 기억장치로 분류된다.

- CPU는 메인 메모리의 값만 참조할 수 있다(RAM).
- 즉 연산을 위해서는 메인 메모리에 해당 프로그램의 정보가 올라와야한다.
이후의 문제로 가상메모리의 등장…
- 초창기 컴퓨터에서는 사용 가능한 RAM의 용량이, 가장 큰 실행 프로그램의 주소 공간보다 커야 했다. 그렇지 않을 경우 메모리 부족 오류에 의해 해당 프로그램을 실행할 수 없었음.
- 이후 오버레이 기법이 등장하여 프로그램의 메모리 크기를 줄일 수 있었지만 여전히 메모리 부족 오류가 발생하였다.
가상 메모리
- 보조 기억 장치의 일부를 주 기억 장치로 활용하여 실제 주기억장치보다 큰 메모리 영역을 제공하는 방법
- 어떤 프로세스가 실행될 때 메모리에 해당 프로세스 전체가 올라가지 않고 실행에 필요한 일부분만 메모리 올라감
- 프로세스들의 내용(페이지) 중 현재 실행에서 덜 중요한 것들을 하드 디스크의 공간에 옮겨 놓음으로써 적은 양의 메모리로 큰 효율을 냄
Q. 가상 메모리는 그럼 개나소나 쓸 수 있나요?
A. 아니요 특수 메모리 관리 하드웨어인 MMU(Memory Management Unit)을 갖추고 있어야 합니다.
하드디스크의 내용(페이지)를 사용하려고 할 때 페이지 테이블을 사용하여 참조한다.
페이지
- 메모리를 효율적으로 사용하고자 프로세스를 일정 크기로 나눈 단위
요구 페이징 (Demand Paging)
물리 주소에 모든 메모리를 올리지 않고 CPU가 요청할 때 프로세스의 데이터를 물리 주소에 올림

이로 인한 긍정적 효과
- 현재 필요한 페이지만 메모리에 적재하기 때문에 메모리 사용량이 감소한다.
- 물리적 메모리 용량의 제약에서 벗어날 수 있게 해준다.
- 프로세스 전체를 메모리에 올리지 않기 때문에 입출력의 오버헤드가 줄어든다.
페이지 폴트 (Page Fault)
위와 같은 요구 페이징 방식으로 CPU가 프로그램을 실행하면 필요한 페이지가 물리 메모리에 없는 경우가 발생하게 되는데 이를 페이지 폴트라고 합니다.
페이지 폴트가 발생하면 아래와 같은 과정이 일어난다.

- invalid 페이지에 접근하면 MMU가 trap을 발생하여 운영체제에 알린다.
- 운영체제는 CPU의 동작을 잠시 멈춘다.
- 운영체제는 요구된 페이지를 가상 메모리에서 찾는다.
- 해당 페이지를 물리적 메모리의 빈 프레임에 로드한다.
- 페이지 테이블을 최신화한다.
- 중단되었던 CPU를 다시 시작한다.
3번 과정을 거쳤지만 ‘페이지 테이블에 올릴 빈 프레임이 없을 경우’ ? Page Replacement 알고리즘
- FIFO: FIFO 방식은 가장 먼저 메모리에 적재된 페이지를 먼저 내보낸다.
- OPT(Optimal replacement, 최적 교체): 미래를 보고 앞으로 가장 사용 안될 페이지를 교체해준다.
- LRU (Least Recently Used): 최근에 가장 오랫동안 사용되지 않은 페이지를 교체해준다.
- LFU (Least Frequently Used): 사용 빈도가 가장 적은 페이지를 교체해준다.
참고