. Traducoes-rapidas(TLBs)
Esse documento representa parte dos meus estudos acerca do Livro - Operational Systems Three Easy Pieces, de dominio publico.
Ha um problema em separar o address space em espacos pequenos de memoria. Existe um overhead grande por conta da quantidade de informacao necessaria para mapear os enderecos reais e virtuais. Isso desacelera tambem a traducao, visto que ha acesso continuo a Memoria Principal, ao inves de deixar tudo em cache no processador.
Paginacao: TLBs
Para agilizar este acesso, usaremos um sistema de caching (Geraldo momento), conhecido como translation-lookaside buffer (TLB). O Tlb faz parte da MMU (Memory Management Unit) (citada previamente) e simplesmente eh um cache de hardware que armazena traducoes mais utilizadas frequentemente (MFU) e remove, evidentemente, usando a politica LFU.
Algoritmo basico do TLB
VPN = (VirtualAddress & VPN_MASK) >> SHIFT; // extrair o VPN
(Success, TlbEntry) = TLB_Lookup(VPN); // verificar o TLB
if (Success == True){ // TLB Hit
if (CanAccess(TlbEntry.ProtectBits) == True) {
Offset = VirtualAddress & OFFSET_MASK;
PhysAddr = (TlbEntry.PFN << SHIFT) | Offset;
Register = AccessMemory(PhysAddr);
}
else
RaiseException(PROTECTION_FAULT)
}
else { // TLB Miss
PTEAddr = PTBR + (VPN * 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();
}
}Conteudo do TLB
Ele tem 32, 64, ou 128 entradas chamadas de completamente associativas. Tem bits especiais, o VPN e o PFN, assim como ref pro address space.
Context Switchs
Podemos ou limpar o buffer, para evitar conflitos de VPN, ou criar um Address Space Identifier (ASID).
Cache Replacement Policy
LRU ou random.
Uso real
// TODO

