TLB Basic Algorithm
This lesson outlines the basic algorithm that the hardware follows for a virtual address translation.
We'll cover the following...
The code snippet below shows a rough sketch of how hardware might handle a virtual address translation, assuming a simple linear page table (i.e., the page table is an array) and a hardware-managed TLB (i.e., the hardware handles much of the responsibility of page table accesses; we’ll explain more about this below).
Press + to interact
VPN = (VirtualAddress & VPN_MASK) >> SHIFT(Success, TlbEntry) = TLB_Lookup(VPN)if (Success == True) // TLB Hitif (CanAccess(TlbEntry.ProtectBits) == True)Offset = VirtualAddress & OFFSET_MASKPhysAddr = (TlbEntry.PFN << SHIFT) | OffsetRegister = AccessMemory(PhysAddr)elseRaiseException(PROTECTION_FAULT)else // TLB MissPTEAddr = PTBR + (VPN * sizeof(PTE))PTE = AccessMemory(PTEAddr)if (PTE.Valid == False)RaiseException(SEGMENTATION_FAULT)else if (CanAccess(PTE.ProtectBits) == False)RaiseException(PROTECTION_FAULT)elseTLB_Insert(VPN, PTE.PFN, PTE.ProtectBits)RetryInstruction()
In case of a TLB hit
The algorithm the hardware follows works like this: first, extract the virtual ...