본문 바로가기

CS/[OS]Operating System(OS 운영체제)

[OS] TLBs : Faster Translations - HW-managed/SW-managed

TLB Miss가 일어났을 때 어떻게 처리를 하는가?

누군가 Page table을 읽어서 VPN + PFN을 TLB에 넣어주는 역할이 필요하다. 

그렇디면 이것을 누가 해주느냐  바로 HW가 처리 해주는 경우와 SW가 처리해 주는 경우 두가지가 있다.

 

먼저 HW가 처리해 주는 경우를 살펴 보자.

Hardware-managed TLB(mostly on CISC machine)

이 경우에는 먼저

(1) HW가 page table이 memory의 어디에 위치해 있는지 알고 있어야 하고,

(2) 그것들의 exact format도 미리 알고 있어야 한다.

 

그것들을 알고 있다면 page table에 접근하여 hw가 직접 내용을 decoding 하여 PFN을 extract하고 PFN에 대해 mapping 하여 TLB에 올리고 retry instruction을 진행한다.

코드는 아래와 같다.

10번째 줄 코드에 PTBR이 page table의 주소(위치)를 의미하는 것이고 PTE의 size, 즉 page table entry의 사이즈를 알고 해당 VPN 값만 큼 곱해준 값을 PTBR에 더해 table에 접근하는 것이다.

 

두번째로 SW가 처리해 주는 경우를 살펴보자.

Software-managed TLB(on RISC machine)

이 경우에는 TLB가 miss 가 진행 되면 그냥 HW가 exception을 발생시켜서 trap handler 가 TLB miss를 처리하도록 하는 것이다.

 

아래가 코드 이다.

TLB HIT 부분의 코드는 동일 하지만 TLB MISS의 코드는 RaiseException(TLB_MISS) 한줄만 존재한다.

즉 exception을 발생시키고 끝내는 것이다.