Virtual Memory
키워드
MMU(메모리관리장치)
Page Table
TLB
Page Fault
Swapping
가상 메모리
- 가상 메모리는 메모리 관리 기법의 하나로 컴퓨터가 실제로 이용 가능한 메모리 자원을 추상화하여 사용자들에게 매우 큰 메모리로 보이게 만드는 기법이다.
- 가상주소(logical address)가 주어지며, 실제 메모리상에 있는 주소를 실제 주소(physical address)라고 한다. 메모리관리장치(MMU)에 의해 실제 주소로 변환되며, 이 덕분에 실제주소를 의식할 필요 없이 프로그램을 구축할 수 있다.
- 가상 메모리는 가상 주소와 실제 주소가 매핑되어 있고 프로세스의 주소 정보가 들어있는 Page Table로 관리된다. 이때 속도 향상을 위해 TLB를 쓴다.
- TLB는 메모리와 CPU 사이에 있는 주소 변환을 위한 캐시이다. Page Table에 있는 리스트를 보관하며 CPU가 페이지 테이블까지 가지 않도록 해 속도를 향상시킬 수 있는 캐시 계층이다.
스와핑
- 만약 가상 메모리에는 존재하지만 실제 메모리인 RAM에는 현재 없는 데이터나 코드에 접근할 경우 페이지 폴트가 발생한다.
- 이때 메모리에서 당장 사용하지 않는 영역을 하드디스크로 옮기고 하드디스크의 일부분을 마치 메모리처럼 불러와 쓰는 것을 스와핑(swapping)이라고 한다.
- 이를 통해 마치 페이지 폴트가 일어나지 않은 것처럼 만든다.
페이지 폴트
- 페이지 폴트(page fault)란 프로세스의 주소 공간에는 존재하지만 지금 이 컴퓨터의 RAM에는 없는 데이터에 접근할 경우 발생
- 페이지 폴트와 그로 인한 스와핑은 다음 과정으로 이루어짐
- CPU는 물리 메모리를 확인하여 해당 페이지가 없으면 트랩을 발생해서 운영체제에 알린다.
- 운영체제는 CPU의 동작을 잠시 멈춘다.
- 운영체제는 Page Table을 확인해서 가상 메모리에 페이지가 존재하는지 확인하고, 없으면 프로세스를 중단하고 현재 물리 메모리에 비어 있는 프레임이 있는지 찾는다. 물리 메모리에도 없다면 스와핑이 발동됨.
- 비어 있는 프레임에 해당 페이지를 로드하고, Page Table을 최신화.
- 중단되었던 CPU를 다시 시작한다.
스레싱
스레싱(thrashing)은 메모리의 페이지 폴트율이 높은 것을 의미하며, 이는 컴퓨터의 심각한 성능 저하를 초래한다.

위 이미지 출처
- 스레싱은 메모리에 너무 많은 프로세스가 동시에 올라가게 되면 스와핑이 많이 일어나서 발생
- 다음과 같은 악순환이 반복되어 스레싱이 일어남
페이지 폴트가 일어나면 CPU 이용률이 낮아짐
-> 운영체제는 CPU의 가용성을 더 높이기 위해 더 많은 프로세스를 메모리에 올리게 됨
-> 페이지 폴트 일어남
해결 방법
- 메모리를 늘린다
- HDD를 사용한다면 SSD로 바꾼다.
- 작업 세트
- 프로세스의 과거 사용 이력인 지역성(locality)을 통해 결정된 페이지 집합을 만들어 미리 메모리에 로드하는 것. 미리 로드하면 탐색에 드는 비용을 줄일 수 있고 스와핑 또한 줄일 수 있다.
- PFF(Page Fault Frequency)
- 페이지 폴트 빈도를 조절하는 방법
- 상한선과 하한선을 만드는 방법
- 상한선에 도달하면 프레임을 늘리고, 하한선에 도달한다면 프레임을 줄인다.