크래프톤 정글 일지

[PintOS] Virtual Memory - 메모리 가상화, TLB

나한나한나한나 2024. 6. 1. 13:24

목표

프로그램이 자신의 전용 메모리를 소유하고 그 안에 자신의 코드와 데이터가 있다는 환상을 만드는 것

개요

프로그램 관점에서 주소 공간은 주소 0부터 시작하여 최대 16KB까지이다. 프로그램이 생성하는 모든 메모리 참조는 이 범위 내에 있어야 한다. 메모리 가상화를 위해 운영체제는 프로세스를 물리 메모리 주소 0이 아닌 다른 곳에 위치시키고 싶다. 어떻게 하면 프로세스 모르게 메모리를 다른 위치에 재배치 하느냐가 우리가 해결해야 할 문제이다. 프로세스 주소 공간이 실제로는 다른 물리 주소에 배치되어 있을 때, 주소 0번지부터 시작하는 가상 주소 공간의 환상을 어떻게 제공할 수 있을까?

여러 기법들 - base and bound, segmentation, paging

자세한 내용은 OSTEP 책을 참조하기 바람

  • base and bound
    • 하드웨어의 도움을 받아 가상 주소를 물리 주소로 변환
  • segmentation
    • base and bound의 일반화
    • 가변 크기의 조각들로 분할(코드, 스택, 힙)
  • paging
    • 동일 크기 조각들로 분할(페이지, 페이지 프레임)
    • VPN, PFN, PTE

TLB

페이징은 성능 저하를 유발할 수 있다. 페이징은 주소 공간을 작은 크기(페이지)로 나누고 각 페이지의 실제 위치(매핑 정보)를 메모리에 저장한다. 매핑 정보를 저장하는 자료구조를 페이지 테이블이라 한다. 매핑 정보 저장을 위해 큰 메모리 공간이 요구된다. 페이지 테이블 접근을 위한 메모리 읽기 작업은 엄청난 성능 저하를 유발한다. 

주소 변환 속도를 어떻게 향상할까? - TLB.

  • VM의 꽃
  • 주소 변환 캐시(address-translation cache)
  • 칩(MMU)의 일부, 즉 하드웨어
  • 가상 메모리 참조 시, 하드웨어는 먼저 TLB에 원하는 변환 정보가 있는지를 확인한다. 만약 있다면 페이지 테이블을 통하지 않고 변환을 (빠르게) 수행한다. TLB를 도입함으로써, 페이징이 "사용 가능"한 가상 메모리 기법이 된다.