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

Bibliografia

https://pages.cs.wisc.edu/~remzi/OSTEP/vm-tlbs.pdf