Cache e memoria virtuale - mappatura e tabelle delle pagine
In questa pagina 4
Le memorie hanno un compromesso capacità-velocità: più sono grandi, meno sono veloci. SRAM piccole e velocissime, DRAM più grandi e lente, dischi molto grandi e lenti (Memorie ROM e RAM - SRAM, DRAM e organizzazione dei chipUna memoria è un insieme di celle (word da più bit) con circuiteria di controllo. Classificazioni: sola lettura (ROM) o lettura/scrittura; ad accesso casuale (RAM), seriale (SAM) o ibrido (Flash); volatile (SRAM, DRAM) o non volatile. Una RAM $2^k\times n$ ha $k$ bit di indirizzo (indipendenti da $n$), $n$ bit dati, read/write e chip select. SRAM: cella bistabile (latch), veloce, senza refresh; DRAM: condensatore, più densa, con refresh. Organizzazione: decoder di riga e colonna (coincident selection), uscite tri-state, array di chip (più chip per più parole, più bit per più linee dati).Memorie ROM e RAM - SRAM, DRAM e organizzazione dei chip →). Per avere velocità e capacità si usa una gerarchia di memorie. Per i dettagli generali: Gerarchia di memoria e principio di localitàCaratteristiche delle memorie (posizione, capacità, unità di trasferimento, metodo di accesso, prestazioni, volatilità); compromesso costo-capacità-velocità e gerarchia a livelli; località temporale e spaziale con esempi; hit, miss e tempo medio di accesso con calcolo svolto.Gerarchia di memoria e principio di località →, Memoria cacheBlocchi, linee ed etichette; scomposizione dell'indirizzo; associazione diretta, completamente associativa e associativa a insiemi con calcolo dei campi; politiche di rimpiazzo (LRU, FIFO, casuale); politiche di scrittura (write-through, write-back con bit sporco, write-allocate); dimensione del blocco; cache multilivello e separate; come ridurre i miss; quesiti sui campi dell'indirizzo.Memoria cache →, Memoria virtualeIndirizzi virtuali e fisici, pagine e frame; traduzione con la tabella delle pagine e calcolo dei campi; page fault e sostituzione delle pagine; TLB e tempo di accesso effettivo; protezione e condivisione; confronto con la cache.Memoria virtuale →.
Gerarchia e località
La gerarchia funziona perché la CPU:
- usa spesso gli stessi dati (località temporale);
- usa spesso dati vicini (località spaziale), per esempio operazioni su vettori, i cui elementi sono in locazioni contigue.
Formula (tempo medio di accesso alla memoria). Perché la gerarchia sia efficace la CPU deve trovare i dati necessari il più possibile nella cache: cache hit = il dato è nella cache; hit rate = percentuale di hit. Altrimenti si ha un cache miss (miss rate) e i dati vanno recuperati in blocco dalle altre memorie. Un modello standard del tempo medio di accesso è : per ns, miss rate e penalità ns si ha ns.
Esempio. Con ns, miss rate e penalità ns: ns.
Tipi di cache
La cache contiene una copia di alcune locazioni della memoria principale. Il problema è dove mettere un dato della memoria principale. Tre soluzioni.
Mappatura diretta
Definizione (cache a mappatura diretta). Gruppi di locazioni contigue della memoria principale vengono mappate direttamente in una locazione della cache; i bit più significativi dell'indirizzo identificano il gruppo trasferito (tag). Semplice, ma l'hit rate non è molto elevato.
Esempio. Cache da word ( bit), indirizzo di cache a bit; memoria principale da word ( KB), indirizzo di word a bit. Gli ultimi tre bit dell'indirizzo di word sono l'indice della cache (la locazione), i bit più significativi sono il tag, memorizzato con il dato. All'accesso: si usa l'indice per scegliere la riga, si confronta il tag memorizzato con il tag dell'indirizzo: se uguali (e la riga è valida) hit, altrimenti miss: i dati sono trasferiti dalla memoria alla cache sostituendo la riga.
Esempio di accessi (indirizzi di word: ; indice , tag ):
| indirizzo | binario | indice | tag | esito (mappatura diretta) |
|---|---|---|---|---|
| 19 | 00010011 | 3 | 2 | miss |
| 20 | 00010100 | 4 | 2 | miss |
| 19 | 00010011 | 3 | 2 | hit |
| 51 | 00110011 | 3 | 6 | miss (sostituisce 19) |
| 19 | 00010011 | 3 | 2 | miss (sostituisce 51) |
| 51 | 00110011 | 3 | 6 | miss |
| 83 | 01010011 | 3 | 10 | miss |
| 19 | 00010011 | 3 | 2 | miss |
Un solo hit su . Con la mappatura diretta, se il programma accede continuamente a due locazioni con gli stessi 3 bit di indirizzo meno significativi (19, 51, 83 hanno tutti indice 3) si verificano miss continui (conflict miss).
Completamente associativa
Definizione (cache completamente associativa). L'associazione tra locazioni della memoria principale e della cache è arbitraria: qualunque dato può stare in qualunque riga. Il tag è l'indirizzo completo. Prestazioni ottime ma complessità alta: confrontare in sequenza tutti i tag non è fattibile, quindi si usa una memoria associativa che esegue il confronto in parallelo: la scrittura è convenzionale, la lettura è in parallelo; il segnale di match di ciascuna riga pilota la sua word line e l'OR di tutti i match è il segnale di hit/miss.
Esempio. Con indirizzi di word a bit il tag è l'indirizzo completo ( bit) e viene confrontato in parallelo con quello di tutte le righe.
Parzialmente associativa a vie
Definizione (cache associativa a vie). È una via di mezzo. Per ogni valore dei bit di ordine minore (indice dell'insieme) c'è un numero limitato di locazioni disponibili (per esempio ): la logica di match si semplifica molto. Una word può trovarsi solo in locazioni della cache (le vie dell'unico insieme che le corrisponde); buffer three-state collegano l'uscita appropriata al bus. Quindi in una cache a vie un dato proveniente dalla memoria centrale può essere immagazzinato in 2 locazioni distinte.
Esempio. Cache da righe a vie: insiemi, quindi insieme ; l'indirizzo va nell'insieme con tag .
Stessa sequenza di accessi su una cache a vie (8 righe = 4 insiemi da 2; insieme , tag , sostituzione LRU = si sostituisce la meno recente):
| indirizzo | insieme | tag | esito | contenuto dell'insieme dopo |
|---|---|---|---|---|
| 19 | 3 | 4 | miss | {4} |
| 20 | 0 | 5 | miss | {5} |
| 19 | 3 | 4 | hit | {4} |
| 51 | 3 | 12 | miss | {4, 12} |
| 19 | 3 | 4 | hit | {12, 4} |
| 51 | 3 | 12 | hit | {4, 12} |
| 83 | 3 | 20 | miss (via LRU: 4) | {12, 20} |
| 19 | 3 | 4 | miss | {20, 4} |
3 hit su 8: l'associatività elimina i conflitti tra 19 e 51.
Località spaziale e blocchi. Per sfruttare la località spaziale si portano in cache più locazioni contigue per volta (nell'esempio di una cache a 2 vie con blocchi da 4 word); le memorie dati della cache vengono replicate per i 4 word. Una cache da K ha un diagramma a blocchi con memorie tag, memorie dati, comparatori e MUX di uscita.
Memoria virtuale
Oltre che veloce, la memoria disponibile deve essere grande. Il concetto di memoria virtuale permette di mostrare a tutti i programmi l'intera dimensione della memoria principale e del disco: i programmi possono usare gli stessi indirizzi senza interferire. Un hardware dedicato esegue la mappatura tra memoria virtuale e fisica, garantendo la separazione dei processi. La gestione è facilitata dalla suddivisione della memoria in pagine.
Tabella delle pagine
Definizione (tabella delle pagine). La mappatura tra pagine virtuali e pagine fisiche è nella tabella delle pagine. Ogni riga ha, oltre al numero di pagina fisica (frame):
- valid: se , la pagina non corrisponde a codice o dati effettivi in memoria;
- dirty: se , c'è stata almeno una scrittura (la pagina andrà copiata su disco prima di essere sostituita);
- used: serve a gestire la sostituzione delle pagine.
Esempio di traduzione. Pagine da KB: l'indirizzo virtuale a 16 bit è diviso in numero di pagina (4 bit alti) e offset (12 bit); la traduzione sostituisce il numero di pagina con il frame, lasciando invariato l'offset. Tabella: pagina 0 frame 2 (valid); pagina 1: non valida; pagina 2 frame 7 (valid, dirty); pagina 3 frame 5 (valid).
| indirizzo virtuale | pagina | offset | esito | indirizzo fisico |
|---|---|---|---|---|
| 0x0010 | 0 | 0x010 | valid, frame 2 | 0x2010 |
| 0x3A7C | 3 | 0xA7C | valid, frame 5 | 0x5A7C |
| 0x2400 | 2 | 0x400 | valid, frame 7 | 0x7400 |
| 0x1FFF | 1 | 0xFFF | page fault | (dal disco) |
Tabella a due livelli, TLB e page fault
Con una struttura a due livelli (directory e tabella delle pagine) per recuperare un dato servono tre accessi alla memoria: la directory entry, la page table entry e infine l'operando o l'istruzione: troppo lento. Si introduce il Translation Lookaside Buffer (TLB), simile a una cache per la mappatura tra indirizzi virtuali e fisici: contiene le traduzioni delle pagine usate più di recente e, se la pagina è lì, la traduzione è immediata.
Definizione (page fault). Il page fault si ha quando la pagina richiesta non è in memoria (bit valid a 0): deve essere recuperata dal disco, con un tempo enormemente superiore a quello di una DRAM, per cui il sistema operativo gestisce il fault e sostituisce una pagina (se dirty la salva prima).
Esempio. Con la tabella dell'esempio, l'accesso a un indirizzo della pagina (valid ) provoca un page fault: la pagina va caricata dal disco.
Errori comuni
- Dire che in una cache a mappatura diretta un dato può stare in più locazioni: sta in una sola.
- Confondere il tag con l'indice: l'indice è nei bit meno significativi (sceglie la riga), il tag nei più significativi (si confronta).
- Considerare un cache miss e un page fault equivalenti: il miss è risolto dalla memoria principale, il page fault dal disco.
- Dimenticare che l'offset non cambia nella traduzione virtuale fisica.
- Credere che una cache veloce come la memoria principale sia utile: non ha senso, serve solo se è più veloce (a parità di prestazioni è inutile).
Versione ripasso
- Gerarchia: SRAM (piccole, veloci) DRAM disco, perché la CPU sfrutta la località temporale e spaziale (Memorie ROM e RAM - SRAM, DRAM e organizzazione dei chipUna memoria è un insieme di celle (word da più bit) con circuiteria di controllo. Classificazioni: sola lettura (ROM) o lettura/scrittura; ad accesso casuale (RAM), seriale (SAM) o ibrido (Flash); volatile (SRAM, DRAM) o non volatile. Una RAM $2^k\times n$ ha $k$ bit di indirizzo (indipendenti da $n$), $n$ bit dati, read/write e chip select. SRAM: cella bistabile (latch), veloce, senza refresh; DRAM: condensatore, più densa, con refresh. Organizzazione: decoder di riga e colonna (coincident selection), uscite tri-state, array di chip (più chip per più parole, più bit per più linee dati).Memorie ROM e RAM - SRAM, DRAM e organizzazione dei chip →).
- Tempo medio: ; esempio ns.
- Mappatura diretta: 8 locazioni, indirizzi a 8 bit; indice = 3 bit meno significativi, tag = 5 bit alti. Un solo posto possibile per ogni dato. Con gli accessi (tutti con indice 3 tranne 20) si ha un solo hit su 8: conflict miss.
- Completamente associativa: il tag è l'indirizzo completo, confrontato in parallelo con una memoria associativa; l'OR dei segnali di match dà hit/miss.
- A vie: un dato sta solo in locazioni dell'insieme che lo contiene. Cache da 8 righe a 2 vie: insieme , tag ; stessa sequenza, 3 hit su 8 (l'associatività elimina il conflitto tra 19 e 51).
- Località spaziale: si portano in cache blocchi di più word contigue.
- Memoria virtuale: la traduzione sostituisce il numero di pagina con il frame e lascia invariato l'offset. Esempio con pagine da 4 KB: (pagina 3, frame 5) ; pagina 1 non valida page fault.
- Tabella delle pagine: per ogni riga, frame e bit valid (0 = pagina non in memoria), dirty (1 = c'è stata una scrittura, va salvata su disco prima della sostituzione), used (per la sostituzione).
- Accessi alla memoria: con due livelli servono tre accessi (directory entry, page table entry, dato), troppo lenti: si usa il TLB, cache delle traduzioni recenti.
- Page fault: pagina non in memoria, da recuperare dal disco, con tempo molto superiore a quello di una DRAM.
- Errori: dato in più posti nella mappatura diretta; indice e tag scambiati (l'indice sceglie la riga, il tag si confronta); miss e page fault considerati uguali (il miss è risolto dalla memoria principale, il page fault dal disco).
- Diretta, esito per accesso (): miss, miss, hit, miss (sostituisce 19), miss (sostituisce 51), miss, miss, miss.
- A 2 vie, esito: miss, miss, hit, miss, hit, hit, miss (LRU sostituisce 4), miss.
- Traduzione: (pagina 0, frame 2) ; (pagina 2, frame 7) ; (pagina 1, non valida) page fault.
- Dirty: se è 1 la pagina va copiata su disco prima di essere sostituita.