Appunti su Memoria Virtuale, Tlb, Cache...

Appunti per il corso universitario di Architettura degli elaboratori, riferito all'architettura MIPS
Redatti all'università di Venezia

questa pagina e' realizzata da Lorenzo Baloci & Alessio Zennaro


In questa pagina trovate una veloce introduzione al funzionamento della memoria virtuale (cache, tlb, pagine, ecc). Puo' esservi utile per un ripasso prima di un esame o per capire un po' di piu' cosa accade quando il vostro computer fa un accesso in memoria. Gli esempi sono stati fatti studiando l'architettura MIPS ma i concetti rimangono validi anche in genere.
Nel caso abbiate dubbi o vogliate segnalare gli innumerevoli errori presenti nel testo potete utilizzare il modulo di contatto disponibile su http://www.xelon.it

Accesso in memoria su sistemi con memoria virtuale

L’indirizzo fisico si ottiene a partire dall’indirizzo virtuale.
Viene composto da i bit di physical address contenuti nella TLB (o nella page table, notare che la TLB non è altro che una cache della memoria virtuale) sommati ai bit di offset contenuti nell’indirizzo virtuale.

La procedura completa di accesso ad un dato in memoria con cache ad indirizzo fisico è quindi la seguente:

  1. Si prende l’indirizzo virtuale, si tolgono gli n-bit meno significativi dell’offset (dipendente dalla dimensione della pagina log2dim_pag) e si confrontano i restanti bit (virtual page number) con le TAG contenute nella TLB.

    Si può avere:

    1. TLB hit: si prendono gli m-bit del physical page number (chiamate anche physical address) che insieme agli n-bit dell’offset compongono l’indirizzo fisico (n+m bit)
    2. TLB miss: si accede alla page table come si accedeva alla TLB (tramite il virtual page number) e, in caso di page hit, si carica la corrispondente entry nella TLB, a questo punto la CPU può accedere nuovamente alla TLB e caricare l’indirizzo fisico. In caso di page fault la gestione passa al SO e può genere o una segmentation fault (la pagina non è valida) oppure essa viene caricata dalla memoria secondaria.
  1. In possesso dell’indirizzo fisico si accede alla cache scomponendo tale indirizzo in:
    • OFFSET

      Serve per accedere al byte corretto all’interno del blocco di cache.
      Dipende dalla dimensione del blocco di cache ed è composto dagli n-bit meno significativi del physical address dove n=log2dim_blocco

    • INDEX

      Indirizza l’entry (blocco o insieme di blocchi in caso di n-way associative) a cui dobbiamo accedere nella cache.
      Dipende dalla dimensione della cache ed ha quindi m-bit dove m= log2num_blocchi (eventualmente divisi per il numero di insiemi in caso di associatività)

    • TAG

      La TAG serve a riconoscere se il blocco indirizzato da INDEX è effettivamente presente in cache (gestisce le collisioni dovute alla funzione di hash che associa gli indirizzi fisici della memoria principale alle entry della cache) e anche in caso di associatività per riconoscere il blocco corretto di un insieme.
      La TAG è formata dai p-bit rimanenti dell’indirizzo fisico quindi p=#bit physical address - #bit INDEX - #bit OFFSET

  1. Accedendo alla cache si può avere:

    • Cache hit

      In tal caso la cache è già in grado di fornire il dato di memoria richiesto

    • Cache miss

      Bisogna accedere alla memoria principale (sicuri di trovare il dato perché esso o era già presente oppure è stato caricato a seguito di page fault precedente) e quindi caricarlo in cache.

Da notare che nel caso in cui la memoria principale o la cache siano piene, nel momento in cui si andrà a caricare un nuovo dato il sistema seguirà una politica di rimpiazzo dei blocchi.

 

Memoria Virtuale:
memoria virtuale

 

TLB completamente associativa:
tlb completamente associativa

Ritorna sopra