페이징엔 문제가 있었다...
1. 페이지 테이블에 접근할때 성능저하 -> TLB로 어느정도 해결
2. 페이지 테이블의 크기
페이지 테이블이 크면 많은 메모리 공간을 차지...
EX) 페이지 크기가 4KB(2^12바이트), PTE는 각 4바이트인 32비트 주소공간(2^32바이트)
그렇다면 가상 페이지는 2^20개 존재, 이는 2^20*4바이트의 PTE를 의미...
일반 배열 페이지 테이블은 메모리를 과다하게 차지..
페이지 테이블이 너무 크고 메모리를 너무 많이 잡아 먹는다
페이지 테이블이 너무 크고 메모리를 잡아먹어!!
그럼.. 16KB 크기인 페이지,32비트 주소공간, 4바이트 PTE를 가정해보자
> 페이지 테이블 사이즈 = 2^32/2^14*4바이트 = 1MB(프로세스 당)
페이지 크기가 4배 증가했으니 PTE 크기가 1/4인건 당연..
그리고 페이지 크기 증가는 부작용이 있다...
문제점: 내부 단편화
그래서 많은 시스템들이 작은 페이지를 사용함
문제점. 페이지테이블의 대부분 공간이 사용되지 않는다.. 그냥 빈 공간 메모리 낭비!!
프로세스 전체 주소공간을 위해 하나의 페이지 테이블을 두는 대신,
세그멘트마다 따로 페이지 테이블을 두자!
베이스와 바운드를 사용하자!
세그멘트의 페이지테이블의 시작주소
를 가진다.그래서 프로세스 마다 3개의 페이지 테이블이 존재(코드 스택 힙)
프로세스가 실행할때, 각 세그멘트의 베이스 레지스터는 각 세그멘트 페이지 테이블의 시작 물리 주소를 가진다.
seg주소, VPN, Offset으로 가상 주소가 구성된다.
context switch시 각 레지스터(베이스,,바운드.. 각 영역마다 )들은 새로운 프로세스의 페이지테이블의 위치 값으로 변경됨
하드웨어가 페이지테이블에서 주소를 가져온다
페이징만 이용했을 때와 차이
하이브리드의 핵심: 세그멘트마다 레지스타 쌍이 따로 존재!
하이브리드도 문제가
=> 페이지 테이블 크기를 줄여야해
페이지 디렉토리 -> 페이지 테이블 엔트리 -> 페이지
linear 페이지 테이블을 트리와 같이 생각해보자
페이지 디렉터리
라는 자료구조를 사용해 페이지 테이블 각 페이지의 할당 여부와 위치를 파악한다ex 책 그림
linear 페이지 테이블은 중간부분의 공간은 사용하지 않는다
페이지 디렉터리에는 두개의 유효한 페이지가 있다
페이지 디렉터리를 이용해 어떤 페이지들이 할당되었는지를 관리한다
리니어에선 4*4 바이트
멀티레벨에선 페이지 디렉터리(4)+PDE(4*2) = 12바이트
준다!
페이지 디렉터리 엔트리(PDE)
로 구성된다64바이트 페이지를 갖는 16KB크기의 주소 공간(2^14비트), 4바이트 PTE
페이지가 2^6 바이트의 크기니 offset 6bit가 필요, 그럼 14비트 체계니 vpn은 8 bit를 차지
linear 페이지 일때는 2^8개의 PTE로 구성된다. 변함 없다.
6개의 페이지를 사용중이라 가정
페이지 테이블의 크기는 1KB(256*4바이트)
페이지가 64바이트의 크기를 지니니 페이지테이블(2^10)은 16개의 64바이트 페이지들로 분할된다
(2^4*2^6=2^10)
=> 각 페이지엔 16개의 PTE가 있다
(이해완료.. 페이지 테이블도 메모리에 들어가기때문에 페이지로 쪼개져야함
페이지 테이블의 크기는 (256*4바이트) 그런데 이게 메모리에 들어가야함
페이지 크기가 64바이트네? 그럼 페이지 테이블도 16개의 페이지로 쪼개짐)
2단계 멀티레벨 페이지 테이블로 구성해보자~
일단 페이지 디렉터리의 인덱스를 구성해야함.
페이지테이블은 256개인데 16개의 페이지로 나뉘어져있다.
디렉터리는 페이지 테이블의 각 페이지마다 필요!
=> 16개의 디렉터리 인덱스가 필요하다 VPN에서 4비트를 사용
페이지 디렉토리 인덱스
VPN에서 페이지 디렉터리 인덱스를 추출하면
PDE주소 = 페이지디렉터리베이스 + (PDIDEX*sizeof(PDE))
를 통해 PDE의 주소를 찾을 수 있다.
PDE의 valid가 invalid이면 주소 접근은 유효하지 않다.
valid라면 PDE가 가리키는 페이지 테이블의 페이지에서 PTE를 읽어야 한다.
=> VPN의 나머지 비트를 활용
페이지 테이블 인덱스(PTI)를 활용한다
PTE주소 = PFN + (PTI * sizeof(PTI))
32 비트 아키텍쳐, 4KB 페이지 사이즈
VPN은 나뉘어짐
장점
단점
Time-space trade off
멀티레벨 페이지 테이블의 목적은 페이지 테이블의 모든 분할된 부분들이 단일 페이지 크기에 맞도록
--
하나의 페이지에 128개의 PTE를 넣을 수 있음(7비트)
근데 페이지 디렉터리에 2^14개가 들어가게됨(14비트)
페이지 디렉터리를 위해 연속적인(페이지 크기가아닌) 공간이 필요,..
멀티레벨 페이지 테이블의 근본 취지가 훼손
페이지 테이블을 페이지 단위로 나누어 배치하도록
더 많은 트리 레벨을 설정 가능
--
TLB는 좋다
여러개의 페이지 테이블(프로세스 당 하나) 대신 시스템에 단 하나의 페이지 테이블만!
테이블은 물리 페이지를 가상 주소 상의 페이지로 변환
테이블의 각 항목은 해당 물리페이지를 사용 중인 프로세스 번호, 해당 가상 페이지 번호를 가짐
tradeoff
글이 33개 ㄷ ㄷ