2012-01-24 17 views
8

Esiste una guida decente che spiega come utilizzare le tabelle TLB (Translation Lookaside Buffers) su un nucleo ARM1176JZF-S?Utilizzo ARM11 Translation Lookaside Buffer (TLB)?

Dopo aver esaminato la documentazione tecnica relativa a quella piattaforma ARM, non ho ancora idea di cosa sia un TLB o che aspetto abbia. Per quanto ho capito, ogni voce TLB mappa una pagina virtuale in una pagina fisica, consentendo di rimappare e controllare i permessi di memoria.

A parte questo, non ho assolutamente idea di come usarli.

  • Quale struttura ha una voce TLB? Come posso creare nuove voci?
  • Come si gestisce la VM nelle opzioni di contesto per i thread dello spazio utente? Come faccio a garantire che tali thread possano accedere solo a pagine specifiche assegnate ai processi principali (applica la protezione della memoria)? Salvare lo stato TLB per ogni contesto?
  • Perché ci sono due TLB? Cosa posso utilizzare per il MicroTLB se può contenere solo 10 voci? Sicuramente, ho bisogno di più di 10.
  • Si dice che una delle parti del TLB principale è "un array completamente associativo di otto elementi, che è bloccabile". Cos'è quello? Posso avere solo 8 voci per il TLB principale?

Grazie in anticipo. Sarò davvero felice se qualcuno fornisce una spiegazione di cosa sono i TLB. Attualmente sto lavorando a un memory mapper per il mio kernel, e ho praticamente raggiunto un punto morto.

+0

Stai scrivendo il tuo sistema operativo? Se stai usando un sistema operativo esistente, si prenderanno cura di questi dettagli per te. Potrebbe essere necessario impostare 1-2 TLB a mano durante l'avvio, ma successivamente il kernel del sistema operativo si prenderà cura di esso. – gravitron

+0

@gravitron Sto eseguendo il porting di un kernel esistente (Darwin) sulla piattaforma ARM. Il kernel si basa su un insieme di funzioni HAL che astraggono tutte le interazioni con la piattaforma (gestione fisica della memoria, switch di contesto, cache, eccezioni ecc.) –

+0

Una risposta semplice è il ** TLB ** è per un ** MMU ** tabella di pagina come ** cache ** è a ** memoria **; Vale a dire. il ** TLB ** è una cache ** MMU **. micro-TLB -> cache L1, ecc. È interessante notare che il comportamento VIVT/PIPT ecc della cache probabilmente influenzerà il funzionamento del TLB come descritto da * ninjalj *. –

risposta

15

Il manuale di riferimento tecnico per ARM1176JZF-S sembra essere DDI 0301. Tale documento contiene tutti i dettagli specifici per lo specifico core ARM.

Non ho ancora idea di cosa sia un TLB o che aspetto abbia. Per quanto ho capito, ogni voce TLB mappa una pagina virtuale in una pagina fisica, consentendo di rimappare e controllare i permessi di memoria.

Un TLB è una cache della tabella di pagina. Alcuni processori consentono l'accesso diretto al TLB, pur non conoscendo le tabelle delle pagine (ad es. MIPS), mentre altri conoscono le tabelle delle pagine e utilizzano internamente TLB che il programmatore non vede per lo più (ad es. X86). In questo caso, il TLB viene gestito dall'hardware e il programmatore di sistema deve solo preoccuparsi di fare in modo che i registri TTB (Translation Table Base) puntino verso la tabella della pagina e invalidare il TLB in posizioni appropriate.

Quale struttura ha una voce TLB? Come posso creare nuove voci?

Fatto da hardware. In caso di errore TLB, la MMU sposta la tabella delle pagine e riempie il TLB da lì.

Come si gestisce la VM nelle opzioni di contesto per i thread dello spazio utente?

Alcune piattaforme hanno TLB che semplicemente associano indirizzi virtuali a indirizzi fisici (ad es. X86). Su queste piattaforme, devi eseguire un flush TLB completo su ogni switch di contesto. Altre piattaforme (MIPS, questa specifica core ARM) (ASID, indirizzo virtuale) si abbinano agli indirizzi fisici. Un ASID è un identificatore specifico dell'applicazione, cioè un identificativo per un processo. La MMU usa un registro per sapere quale ASID usare (penso che sia il registro ID di contesto in questo caso). Poiché potrebbero esserci più processi rispetto agli ASID, occasionalmente potrebbe essere necessario riciclare un ASID (assegnandolo a un processo diverso) e eseguire un flush di TLB (questo è ciò che l'operazione Invalidate TLB by ASID è per).

Perché ci sono due TLB? Cosa posso utilizzare per il MicroTLB se può contenere solo 10 voci? Sicuramente, ho bisogno di più di 10.

Questo è esattamente per lo stesso motivo per cui si dispone di piccole cache di livello 1 separate per istruzioni e dati. Dal momento che si tratta di cache, non è necessario più di 10 (anche se avere più potrebbe migliorare le prestazioni).

Si dice che una delle parti del TLB principale è "un array completamente associativo di otto elementi, che è bloccabile". Cos'è quello? Posso avere solo 8 voci per il TLB principale?

Alcune pagine di memoria (ad esempio alcune parti del kernel) sono accessibili molto spesso. È opportuno bloccarli, in modo che non vengano espulsi dal TLB. Inoltre, nei sistemi in tempo reale, una mancata TLB o una mancanza della cache possono introdurre alcune imprevedibili imprevedibili. Quindi, c'è un'opzione per bloccare un numero di voci TLB. Il TLB principale ha più voci, ma solo quelle 8 sono bloccabili.

+0

Ottima risposta. Grazie mille! –

+0

Grazie per i dettagli che cosa è ARM ACID ASID. Sembra come domini * * e * PID * più vecchi. –