가상 메모리 : 프로세스가 실제 물리 메모리(RAM)의 크기나 구조와 상관없이, 자신만의 거대하고 연속적인 메모리 공간(가상 주소 공간)을 가지고 있는 것처럼 보이게 하는 기술
개념 : 프로그램은 실제 주소가 아닌 논리적인 가상 주소 사용. 운영체제와 하드웨어(MMU)가 이 가상 주소를 실제 물리 주소로 실시간 변환
목표
1. 메모리 용량 확장 : 실제 물리 메모리보다 더 큰 프로그램을 실행할 수 있게 함.
2. 메모리 보호 : 각 프로세스는 자신만의 독립된 주소 공간을 가지기 때문에 다른 프로세스의 메모리를 침범할 수 없어 각 프로세스의 메모리 공간을 다른 프로세스로부터 보호함.
페이징 : 가상 메모리를 구현하는 가장 일반적인 방법. 가상 주소 공간과 물리 메모리를 페이지와 프레임이라는 고정된 크기의 블록으로 나눔.
요구 페이징 : 프로그램 실행에 필요한 페이지만 물리 메모리의 프레임에 올려놓고(loading), 나머지는 디스크에 보관
페이지 테이블 : 가상 주소를 물리 주소로 변환하기 위한 주소 변환 지도. 각 프로세스는 자신만의 페이지 테이블을 가지고 있음. CPU의 MMU(Memory Management Unit)라는 하드웨어가 이 테이블을 사용해서 주소 변환
역할 : 어떤 가상 페이지가 어떤 물리 프레임에 저장되어 있는지 일대일로 기록해둠.
위치 : 각 프로세스마다 하나씩 존재, 물리 메모리에 저장됨.
한계 : 메모리에 접근할 때마다 페이지 테이블을 확인해야 함. 메모리의 페이지 테이블을 보려고 다시 메모리에 접근해야 하니 속도가 느려지는 원인이 됨.
하드웨어 페이지 테이블은 주소 변환에 필요한 최소한의 정보(예 : 프레임 번호, 유효 비트, 쓰기 권한 등)만 담을 수 있음. 페이지가 디스크 어디에 저장되어 있는지, 원래 실행 파일의 어느 부분인지 등의 부가 정보는 저장할 수 없음.
보조 페이지 테이블(Supplemental Page Table, SPT) : 하드웨어 페이지 테이블이 담지 못하는 부가 정보를 저장하기 위한 추가 페이지 테이블
저장 정보
1. 페이지가 현재 물리 메모리에 있는지 아니면 스왑 디스크에 있는지
2. 스왑 디스크에 있다면 몇 번째 슬롯에 있는지
3. 페이지가 실행 파일의 일부인지? 그렇다면 파일의 어느 오프셋에서 얼마만큼을 읽어와야 하는지?
4. 페이지가 모두 0으로 채워져야 하는 'zero page'인지
역할 : 페이지 폴트가 발생했을 때, 운영체제는 SPT를 보고 해당 페이지를 어디서 어떻게 가져와야 할지 결정.
프레임 테이블 : 물리 메모리의 프레임들을 관리하기 위한 자료구조. 운영체제가 어떤 프레임이 현재 사용 중인지, 어떤 프로세스의 어떤 가상 페이지가 사용하고 있는지 등을 추적하기 위해 필요
역할 : 비어있는 프레임을 찾을 때 사용. 비어있는 프레임이 없다면, 어떤 프레임을 디스크로 내보낼지 결정하는 페이지 교체 정책을 수행할 때 사용
TLB : 페이지 테이블의 느린 속도를 보완하기 위한 고속의 주소 변환 캐시
개념 : CPU 안에 포함된 작고 매우 빠른 특별한 메모리. 최근에 변환된 가상 주소-물리 주소 매핑 정보를 저장해 둠.
목표 : 매번 RAM에 있는 페이지 테이블까지 찾아가는 수고를 덜어 주소 변환 속도를 높임
동작 원리 : CPU가 주소 변환을 할 때, 느린 페이지 테이블을 먼저 뒤지지 않고 빠른 TLB부터 확인
프로그램이 특정 가상 주소 V_ADDR
에 접근하려고 할 때, 다음과 같은 순서로 일이 처리됨.
1. CPU가 TLB 확인
V_ADDR
에 대한 주소 변환 정보가 TLB에 있는지 확인V_ADDR
에 해당하는 물리 주소를 찾음가상 주소 -> 물리 주소
)를 TLB에 새로 기록(다음에 또 쓸 것을 대비)