Search
Duplicate
🍎

[운영체제] 메모리 가상화 - 멀티 레벨 페이징

간단소개
페이징의 한계 중 페이지 테이블 공간 관리를 개선한 기법을 알아보자
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
운영체제
Scrap
태그
메모리
9 more properties
“운영체제 : 아주 쉬운 세가지 이야기”를 읽으면서 핵심 내용을 정리하였습니다. 이화여대 반효경 교수님의 운영체제 강의를 듣고 복습 차원에서 책 한권을 완독해보고자 합니다. 잘못된 정보가 있다면 댓글 남겨주시면 감사하겠습니다!

페이징의 한계 - 공간

페이지 테이블이 크면 많은 메모리 공간을 차지하게 된다. 페이지 크기가 4KB이고 32비트 주소공간을 가진 시스템에서 페이지 테이블의 크기는 약 4MB 이다. 이는 프로세스 한개 당 필요한 페이지 테이블이기 때문에 프로세스 수가 증가함에 따라 엄청난 메모리를 차지하게 된다.
아래에서는 어떻게 페이지 테이블의 크기를 줄일 수 있을 지 알아보게 될 것 이다.

간단한 해법 : 더 큰 페이지

페이지의 크기를 4KB에서 16KB로 증가 시키게 되면 페이지 테이블의 크기는 1/4 줄어서 1MB가 될 것이다. 하지만 큰 페이지 테이블을 사용하게 되면 내부 단편화가 일어나 내부의 낭비 공간이 생기게 된다. 해당 낭비 공간으로 인해 시스템의 메모리가 금방 고갈되는 현상이 발생한다.

멀티 레벨 페이지 테이블

선형 페이지 테이블을 트리 구조로 표현한 방식이다. 매우 효율적이기 때문에 많은 현대 시스템에서 사용중이다.

아이디어

선형 페이지 테이블에서는 실제 메모리가 할당되지 않은 부분에 대해서도 모두 페이지 테이블 엔트리를 저장하고 있기 때문에 메모리 낭비가 있다. (위 그림의 선형 페이지 테이블에서 valid bit가 0인 부분)
이부분을 아껴볼 수 없을까?

구현 방법 : 페이지 디렉토리(page directory)의 사용

페이지 디렉토리의 구성
페이지 디렉토리 항목 (Page Directory Entries, PDE)
유효 비트 : 해당 항목이 가르키고 있는 페이지들중 최소 1개는 유효함
페이지 프레임 번호(Page Frame Number, PFN)
페이지 디렉토리 구성 방법
1.
페이지 테이블을 페이지 크기의 단위로 나눈다.
2.
페이지 크기 단위에 유효하지 않은 항목만 있으면 해당 페이지를 할당하지 않는다.
3.
페이지 디렉토리를 확인하면 페이지 테이블의 어떤 페이지들이 할당되었는지 관리 할 수 있다.

장점

1.
사용된 주소 공간의 크기에 비례하여 페이지 테이블 공간이 할당된다. 작은 크기의 페이지 테이블로 주소공간을 표현할 수 있다.
2.
페이지 크기로 페이지 테이블을 분할 함으로서 메모리 관리가 용이함
a.
선형 테이블에서는 전체 테이블 크기만큼 연속된 메모리가 필요함 → 공간 찾기 어려움
b.
페이지 테이블의 페이지들이 물리 메모리안에 산재해 있더라도 페이지 디렉토리로 찾아 갈 수 있음

단점

1.
TLB 미스시, 두번의 메모리 로드가 발생한다.
a.
페이지 디렉터리 접근 + PTE 접근
2.
페이지 테이블 검색이 복잡해진다.
a.
메모리 자원의 절약을 위해 페이지 테이블 검색이 복잡해진 경우

예제

조건
64바이트 페이지를 갖는 16KB 크기의 작은 주소 공간. 14비트 가상 주소 공간을 사용
선형 페이지 테이블은 2^8개(256)의 엔트리를 가짐. PTE는 4바이트. 총 크기는 1KB
2단계 페이지 테이블로 구성
페이지 테이블을 페이지 크기로 나누기 : 총 16개로 나눠짐 (16 x 64 = 1024)
페이지 디렉토리 인덱스(page-directory index, PDIndex)
PDEAddr = PageDirBase + (PDIndex * sizeof(PDE))
페이지 테이블 인덱스(Page-table index, PTIndex)
PTEAddr = (PDE.PFN << SHIFT) + (PTIndex * sizeof(PTE))
절약한 메모리
선형 페이지 테이블에서 16 페이지 사용
2단계 페이지 테이블에서 3페이지 사용
페이지 디렉토리 1개 + code, heap 용 1개 + stack용 1개

멀티 레벨 페이지로 확장

위의 예제에서는 2단계 페이지 테이블을 사용하였는데 더 큰 주소 공간에서는 2단계로 나누는 것으로는 메모리 공간을 아끼자는 취지의 다단계 페이징의 장점을 얻을 수 없다. 따라서 파일 디렉토리 자체를 멀티 페이지로 나누어서 트리의 단계를 늘리는 방법을 사용할 수 있다.