TLB

Os processadores incluem um cache de acesso rápido usado para acelerar o processo de tradução de um endereço linear. Quando um endereço linear é usado pela primeira vez, o endereço físico correspondente é obtido através de acessos às Tabelas na RAM, um processo lento demais para se repetir a cada acesso à memória.
Para melhorar desempenho, este endereço linear e seu respectivo endereço físico são salvos na TLB para que acessos futuros a ele sejam feitos rapidamente.
A cada mudança de contexto, ou seja, troca de processo ativo em CPU, todas as entradas na TLB precisam ser anuladas. Isto acontece porque processo tem suas tabelas de páginas e, portanto, a correspondência entre endereço linear e físico varia entre processos. Os chips Intel não suportam TLBs assinadas para processos, mas suportam global pages, ou seja, páginas usadas por mais de um processo que, por isso, não são anuladas na TLB com a troca de contexto.
Anular a TLB e preenche-la novamente é um processo custoso. Por isso, o Linux o Lazy TLB Flushing: para evitar limpar o TLB desnecessariamente em sistemas multiprocessados que compartilham tabela de páginas, a limpeza da TLB pode ser adiada nas CPUs rodando threads do kernel.

Algumas funções para atuar na TLB são mostradas abaixo:

  • void flush_tlb_all(void): limpa toda a TLB.
  • void flush_tlb_Mm(struct mm_struct *mm): limpa todas as entradas da TLB que não são global pages;
  • void flush tlb range(struct mm struct *mm, unsigned long start,unsigned long end): limpa todas as entradas da TLB dentro de um determinado intervalo.
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License