가상 메모리, 페이지 테이블, TLB

jhj603·2025년 9월 25일
0

가상 메모리

가상 메모리 : 프로세스가 실제 물리 메모리(RAM)의 크기나 구조와 상관없이, 자신만의 거대하고 연속적인 메모리 공간(가상 주소 공간)을 가지고 있는 것처럼 보이게 하는 기술

개념 : 프로그램은 실제 주소가 아닌 논리적인 가상 주소 사용. 운영체제와 하드웨어(MMU)가 이 가상 주소를 실제 물리 주소로 실시간 변환

목표
1. 메모리 용량 확장 : 실제 물리 메모리보다 더 큰 프로그램을 실행할 수 있게 함.
2. 메모리 보호 : 각 프로세스는 자신만의 독립된 주소 공간을 가지기 때문에 다른 프로세스의 메모리를 침범할 수 없어 각 프로세스의 메모리 공간을 다른 프로세스로부터 보호함.


페이징

페이징 : 가상 메모리를 구현하는 가장 일반적인 방법. 가상 주소 공간과 물리 메모리를 페이지프레임이라는 고정된 크기의 블록으로 나눔.

  • 페이지 : 가상 메모리를 나누는 단위(Pintos에서는 보통 4KB)
  • 프레임 : 물리 메모리를 나누는 단위. 페이지와 크기가 같음.

요구 페이징 : 프로그램 실행에 필요한 페이지만 물리 메모리의 프레임에 올려놓고(loading), 나머지는 디스크에 보관


페이지 테이블

페이지 테이블 : 가상 주소를 물리 주소로 변환하기 위한 주소 변환 지도. 각 프로세스는 자신만의 페이지 테이블을 가지고 있음. CPU의 MMU(Memory Management Unit)라는 하드웨어가 이 테이블을 사용해서 주소 변환

역할 : 어떤 가상 페이지가 어떤 물리 프레임에 저장되어 있는지 일대일로 기록해둠.

위치 : 각 프로세스마다 하나씩 존재, 물리 메모리에 저장됨.

한계 : 메모리에 접근할 때마다 페이지 테이블을 확인해야 함. 메모리의 페이지 테이블을 보려고 다시 메모리에 접근해야 하니 속도가 느려지는 원인이 됨.
하드웨어 페이지 테이블은 주소 변환에 필요한 최소한의 정보(예 : 프레임 번호, 유효 비트, 쓰기 권한 등)만 담을 수 있음. 페이지가 디스크 어디에 저장되어 있는지, 원래 실행 파일의 어느 부분인지 등의 부가 정보는 저장할 수 없음.


보조 페이지 테이블(Supplemental Page Table, SPT)

보조 페이지 테이블(Supplemental Page Table, SPT) : 하드웨어 페이지 테이블이 담지 못하는 부가 정보를 저장하기 위한 추가 페이지 테이블

저장 정보
1. 페이지가 현재 물리 메모리에 있는지 아니면 스왑 디스크에 있는지
2. 스왑 디스크에 있다면 몇 번째 슬롯에 있는지
3. 페이지가 실행 파일의 일부인지? 그렇다면 파일의 어느 오프셋에서 얼마만큼을 읽어와야 하는지?
4. 페이지가 모두 0으로 채워져야 하는 'zero page'인지

역할 : 페이지 폴트가 발생했을 때, 운영체제는 SPT를 보고 해당 페이지를 어디서 어떻게 가져와야 할지 결정.


프레임 테이블

프레임 테이블 : 물리 메모리의 프레임들을 관리하기 위한 자료구조. 운영체제가 어떤 프레임이 현재 사용 중인지, 어떤 프로세스의 어떤 가상 페이지가 사용하고 있는지 등을 추적하기 위해 필요

역할 : 비어있는 프레임을 찾을 때 사용. 비어있는 프레임이 없다면, 어떤 프레임을 디스크로 내보낼지 결정하는 페이지 교체 정책을 수행할 때 사용


TLB(Translation Lookaside Buffer)

TLB : 페이지 테이블의 느린 속도를 보완하기 위한 고속의 주소 변환 캐시

개념 : CPU 안에 포함된 작고 매우 빠른 특별한 메모리. 최근에 변환된 가상 주소-물리 주소 매핑 정보를 저장해 둠.

목표 : 매번 RAM에 있는 페이지 테이블까지 찾아가는 수고를 덜어 주소 변환 속도를 높임

동작 원리 : CPU가 주소 변환을 할 때, 느린 페이지 테이블을 먼저 뒤지지 않고 빠른 TLB부터 확인


프로그램이 특정 가상 주소 V_ADDR에 접근하려고 할 때, 다음과 같은 순서로 일이 처리됨.
1. CPU가 TLB 확인

  • CPU는 V_ADDR에 대한 주소 변환 정보가 TLB에 있는지 확인
  • 만약 있다면(TLB Hit) 즉시 물리 주소를 얻어 메모리에 바로 접근. 페이지 테이블을 참조할 필요가 없으므로 매우 빠름
  • 만약 없다면(TLB Miss) 다음 단계 진행
  1. 페이지 테이블 확인
  • TLB에 정보가 없었기 때문에 하드웨어(MMU)가 RAM에 있는 페이지 테이블을 찾아감.
  • 페이지 테이블을 뒤져 V_ADDR에 해당하는 물리 주소를 찾음
  • 페이지 폴트(Page Fault) : 만약 페이지 테이블에도 해당 페이지가 RAM에 없다고 표시되어 있으면 페이지 폴트가 발생해 운영체제가 디스크에서 페이지를 가져오는 작업을 수행
  1. TLB 업데이트 및 메모리 접근
  • 페이지 테이블에서 성공적으로 물리 주소를 찾았다면 그 변환 정보(가상 주소 -> 물리 주소)를 TLB에 새로 기록(다음에 또 쓸 것을 대비)
  • 알아낸 물리 주소를 사용해 실제 메모리에 접근해 원하는 작업 수행
profile
자라나라 실력 실력

0개의 댓글