[OSTEP] Virtualization) 20. Advanced Page Tables

0

OSTEP 운영체제

목록 보기
14/19
post-thumbnail

[OSTEP] 20. Advanced Page Tables

이 포스팅은 <<Operating Systems: Three Easy Pieces>>, Remzi H. Arpaci-Dusseau & Andrea C. Arpaci-Dusseau을 읽고 개인 학습용으로 정리한 글입니다.

CH 23. 페이징: 더 작은 테이블

  • 선형 페이지 테이블은 크기가 크며 메모리를 과도하게 차지한다
    -> 어떻게 페이지 테이블의 크기를 줄일 수 있을까?

1. 간단한 해법: 더 큰 페이지

  • 페이지 크기를 n배 증가시키면, 페이지 테이블의 크기가 1/n으로 감소된다

  • 페이지 크기의 증가는 내부 단편화(internal fragmentation)을 증가시킨다
    -> 페이지 내부의 낭비 공간 증가
    -> 컴퓨터 시스템의 메모리가 금방 고갈

  • 결국 대부분의 컴퓨터 시스템들은 비교적 작은 페이지를 사용한다
    -> 일반적으로 4KB(x86) 또는 8KB(SPARCv9) 사용

2. 하이브리드 접근 방법: 페이징과 세그멘트

  • 힙과 스택에서 실제로 전체 공간 중 작은 부분만 사용되는 경우
    -> 페이지 테이블 대부분이 비어있게 됨

페이징과 세그멘트 결합

  • 프로세스 전체 주소 공간을 위한 하나의 페이지 테이블을 두는 대신, 논리 세그멘트마다 따로 페이지 테이블을 두자
    -> 코드, 힙, 스택 세그멘트에 대해 각각의 페이지 테이블을 둔다

  • 베이스 레지스터: 세그멘트의 페이지 테이블의 시작 주소 저장
    바운드 레지스터: 세그멘트의 페이지 테이블의 끝을 나타냄

  • 4KB 페이지를 갖는 32비트 가상 주소 공간이 4개의 세그멘트로 나뉘어 있다고 가정

3. 멀티 레벨 페이지 테이블

4. 역 페이지 테이블 (inverted page table)

  • 프로세스당 하나의 페이지 테이블 대신 하나의 시스템에 하나의 역 페이지 테이블을 유지한다

  • 페이지 테이블: 가상 주소 상의 페이지 -> 물리 메모리의 페이지

  • 역 페이지 테이블: 물리 메모리의 페이지 -> 가상 주소 상의 페이지
    -> 역 페이지 테이블의 각 항목은 해당 물리 페이지를 사용 중인 프로세스 번호 & 해당 가상 페이지 번호를 가짐

  • 역 페이지 테이블에서는 주소 변환을 위해 전체 테이블을 검색해서 원하는 가상 주소 페이지를 갖는 항목을 찾아야 한다
    -> 탐색 속도 향상을 위해 주로 해쉬 테이블 사용

5. 페이지 테이블을 디스크로 스와핑하기

  • 이제까지는 페이지 테이블이 커널이 소유하고 있는 물리 메모리 영역에 존재한다고 가정하였음

  • 어떤 시스템들은 페이지 테이블들을 커널 가상 메모리에 존재시키고,
    시스템의 메모리가 부족할 경우, 페이지 테이블들을 디스크로 스왑(swap)하기도 한다

profile
Be able to be vulnerable, in search of truth

0개의 댓글