: 모든 process마다 page table이 하나씩 있음.
page table : 4byte entry
-> Page table은 너무 큼
: 16KB 페이지와 4byte page table entry가 있다고 가정 (page 하나를 위한 entry하나)
-> Big pages는 internal fragmentation 유발

: 대부분의 page table들은 사용되지 않음
-> page table의 의미없는 공간 줄이기 : Segmentation, Paging

: VPN에서 상위 두개를 빼서 seg
SN = (VirtualAddress & SEG_MASK) >> SN_SHIFT
VPN = (VirtualAddress & VPN_MASK) >> VPN_SHIFT
AddressOfPTE = Base[SN] + (VPN * sizeof(PTE))

: page table을 page-sized units로 쪼갬,

: Linear Page Table의 PFN 203 & 203은 invalid하기 때문에 할당되지 않았음 -> page table을 page크기의 단위로 나누고 해당 page table의 page invalid하다면 메모리에 할당하지 않음

: address space가 16KB(2^4, 2^10 -> 14bits),
page size가 64bytes(6bit) ->
offset도 6bits, VPN = 14-6 = 8bits

: page directory는 page table의 page마다 하나의 Entry 필요함.
page directory의 entry가 invalid하면 예외 발생
-> page directory entry가 valid하다면 이 PDE가 가리키는 page table의 page에서 page table entry 가져옴
-> 그때부터 page table index를 그 page table을 가리키는 index로 사용할 수 있음 !!!


VPN = (VirtualAddress & VPN_MASK) >> SHIFT // Virtual Page Number를 추출해냄
(Success,TlbEntry) = TLB_Lookup(VPN) // TLB가 이 VPN에 대한 translation을 보유하고 있는지 확인
if(Success == True)
if(CanAccess(TlbEntry.ProtectBits) == True)
// if문 만족 시 해당 TLB 항목에서 page frame number, 원하는 physical address와 access memory를 추출
Offset = VirtualAddress & OFFSET_MASK
PhysAddr = (TlbEntry.PFN << SHIFT) | Offset
Register = AccessMemory(PhysAddr)
else RaiseException(PROTECTION_FAULT);
else // full multi-level lookup 수행
else // Page Directory Index를 추출
PDIndex = (VPN & PD_MASK) >> PD_SHIFT
PDEAddr = PDBR + (PDIndex * sizeof(PDE))
// Page Directory Entry를 가져옴
PDE = AccessMemory(PDEAddr)
if(PDE.Valid == False)
// if문 만족 시 : Page Directory Entry의 valid flag를 체크해 true가 되면, page table로 부터 page table entry를 가져옴
RaiseException(SEGMENTATION_FAULT)
else // PDE가 valid (PTE를 Page table에서 가져옴)
PTIndex = (VPN & PT_MASK) >> PT_SHIFT
PTEAddr = (PDE.PFN << SHIFT) + (PTIndex * sizeof(PTE))
PTE = AccessMemory(PTEAddr)
if(PTE.Valid == False)
RaiseException(SEGMENTATION_FAULT)
else if(CanAccess(PTE.ProtectBits) == False)
RaiseException(PROTECTION_FAULT);
else
TLB_Insert(VPN, PTE.PFN , PTE.ProtectBits)
RetryInstruction()

[page table은 process마다 page table가지고 있어야 함. 사용되지 않는 page가 있어도 page 최대 개수만큼 page table entry가 있어야함]
-> Inverted Page Table 등장