지금까지 살펴본 것을 다시 복기 해보자.
각 프로세스 마다 page table이 하나씩 존재하는데, page table이 크기가 너무 커서 메모리에 존재
그 page table에 매번 접근 하자니 memory에 두번 access 하는 것이 되어 overhead 가 커지게 되는 문제가 생겼다.
이를 해결하기 위해 TLB를 만들어 cache 처럼 사용하자는 아이디어를 지금까지 살펴 보았다.
32-bit address space 를 가정해보자.
4KB 크기의 page와 4 byte page table entry 라고 했을 때 아래 그림과 같다.
먼저 4KB = 2^12이므로 offset에 해당하는 bit 수가 12개 이고 나머지 20 bit에 해당하는 부분이 VPN을 나타내게 된다.
즉 page table entry 수가 2^20개가 되고 한 entry 크기가 4바이트라고 했으므로
따라서 page table size는 2^32/2^12 * 4byte = 4MB가 되게 된다.
사이즈가 너무 크다,, 너무 많은 메모리를 사용하게 되므로 효율적이지 못하다.
그렇다면 page 크기를 늘려서 entry 수를 조금 줄여보는 방법은 어떨까?
한 페이지 크기를 16KB라고 해보자. 그럼 2^14에 해당하는 크기 이므로 offset bit이 14 bit이 되고, 32 bit address space 이므로 나머지 18bit이 VPN을 의미하게 된다.
ㄱ럼 아래 그림처럼 표현되고 page table size는 1 MB로 줄어들게 된다.
하지만 이렇게 되면 문제가 또 있다.
페이지 크기가 크게 되면 page 내부의 internal fragmentation이 발생하게 되며 memory 낭비가 심해지게 된다.
그럼 이제 추가적인 상황을 더 생각해보자.
아래 그림은 16KB address space를 나타낸 것이고 14bit으로 표현 가능한 것이다. 이때 page 개수는 16개 이므로 4bit 가 VPN에 해당, 나머지 10bit 가 page offset을 의미한다.
위 그림을 보다시피 page table의 1/4 정도만 사용하고 나머지는 낭비 중임을 알 수 있다.
Virtual Address Space가 있는데 빈 공간이 너무 많은데 이를 전부 Page Table을 만든다고 생각해보자.
그렇다면 Page Table도 쓸모 없이 크게 만들게 된다.
그럼 사용하는 부분으로만 page table을 만들어서 작게 만들어 보자.
1. hybrid approach : paging and segments
segement와 paging을 결합하여 이용해보는 방법이 있을 수 있다.
아래 그림을 보자. 32bit virtual address space 이고 4KB page 크기 이므로 offset에 해당하는 bit는 12개 이다.
이떄 segment를 3개 활용해야 하므로 segment value에 해당하는 2 bit을 사용하고, 나머지 18 bit을 VPN value로 사용한다.
segment table을 만들어 code, heap, stack영역으로 segment를 나눈다. 그리고 base address, bound address 도 함께 저장하여 준다.
그리고 각 segement 별로 각각의 page table을 만드는 것이다. (segment 개수 = page table 개수)
base 에 해당하는 것이 해당 세그먼트에 해당하는 page table의 주소인 것이다.
이 경우는 무슨 문제가 있을까
heap 같은 경우는 여전히 중간에 비는 경우가 많다. 여전히 page table waste 는 많이 생길 수 밖에 없다.
그럼,,!
page table을 다시 page로 잘라서 paging 해보자.
->multi level page table
'CS > [OS]Operating System(OS 운영체제)' 카테고리의 다른 글
[OS] multi-level page tables (2) (0) | 2022.12.04 |
---|---|
[OS]Multi-level Page Tables (1) (0) | 2022.12.04 |
[OS] TLBs : Faster Translations-Issues (0) | 2022.11.29 |
[OS] TLBs : Faster Translations - HW-managed/SW-managed (0) | 2022.11.29 |
[OS] TLBs : Paging(Faster Translations) (0) | 2022.11.28 |