Sistemi a Microprocessore - Dipartimento di Ingegneria dell
Transcript
Sistemi a Microprocessore - Dipartimento di Ingegneria dell
Corso di Laurea Ingegneria dell’Informazione Sistemi a Microprocessore A.A. 2007-2008 Prof. Ing. Ivan Bruno Sistemi a Microprocessore La Memoria 1 La Memoria La memoria in un calcolatore serve per immagazzinare dati e le istruzioni dei programmi da eseguire I principali tipi di memorie che si possono trovare su un microcontrollore, e su un calcolatore in genere, sono: ROM (Read Only Memory) : programmata permanentemente dal costruttore, non modificabile RAM (Random Access Memory) : memoria volatile di lettura e scrittura EEPROM (Electrically EPROM) : memoria non volatile, scrittura e cancellazione di celle entrambe elettriche FLASH : memoria non volatile, variante delle EEPROM, scrittura e cancellazione entrambe elettriche, non di singole celle, ma di blocchi (updating +veloce) 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 3 Parametri di Valutazione Dimensione: definita in bit o byte. Talvolta fornita in modo tale da descrivere l’architettura interna. Es.: 64K x 4 bit: 65536 celle di 4 bit Velocità: Tempo di accesso: intervallo di tempo intercorso tra la richiesta della lettura e la disponibilità del dato Tempo di ciclo: intervallo di tempo minimo che intercorre tra due operazioni Altri Parametri: Potenza Dissipata, Costo, Integrazione 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 4 2 Interfaccia Generica di una Memoria Una Memoria è in generale accessibile attraverso un Registro indirizzo (MAR) ed un registro Dati (MDR) Un Segnale R/W indica se l’operazione è di lettura o scrittura In Lettura: L’indirizzo viene messo in MAR il dato letto viene recuperato da MDR. 08/11/2007 Architettura della memoria MAR R/W MDR In Scrittura: L’indirizzo viene messo in MAR il dato in MDR. Sistemi a Microprocessore A.A. 2007-2008 5 Principali tecnologie per la RAM Le memorie RAM sono di due tipi Memorie statiche: Static Random Access Memory (SRAM) Memorie dinamiche: Dynamic Random Access Memory (DRAM) Memorie statiche Memorie dinamiche Il singolo elemento corrisponde ad un flip-flop Il singolo elemento corrisponde ad un condensatore ed un transistor (dopo pochi millisecondi le informazioni vengono perse) L’informazione è memorizzata sotto forma di carica del condensatore Richiedono un refresh periodico dell’informazione Per ottimizzare la realizzazione indirizzi di riga e indirizzi di colonna vengono passati sullo stesso canale in successione Le memorie statiche sono (rispetto a quelle dinamiche) Più veloci Più costose (6 transistor per bit) Persistenti (non è richiesto il refresh) Più affidabili. 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 6 3 Ciclo Operativo nelle memorie Statiche 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 7 Ciclo Operativo nelle memorie Dinamiche Tempo di Ciclo RAS CAS Indirizzo RIGA COLONNA WRITE DATO VALIDO DATO Tempo di Accesso Nota: I Segnali RAS,CAS e WRITE sono negati. 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 8 4 Struttura di una memoria Statica 16x8 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 9 Una Memoria Statica 1K x 8 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 10 5 DRAM: multiplazione degli indirizzi Dato l’elevato impaccamento delle DRAM il numero di pin di I/O è un problema E` usuale multiplare nel tempo l’indirizzo delle righe e delle colonne negli stessi fili Normalmente le memorie non sono indirizzabili al bit, per cui righe e colonne si riferiscono a byte e non a bit Es. una memoria 2M X 8 (21 bit di indirizzo) può essere organizzata in 4096 righe (12bit di indirizzo) per 512 colonne (9bit di indirizzo) di 8 bit ciascuno 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 11 Organizzazione di una DRAM 2M X 8 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 12 6 Una Memoria Dinamica 1M x 1 RAS Latch Indirizzo RIGA Decodificatore di RIGA ... Array di celle di memoria 32x32 Se nse / Write Indirizzo Se nse / Write Se nse / Write CS R/W Latch Indirizzo RIGA Decodificatore di COLONNA CAS 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 13 DRAM: modo di accesso veloce Spesso i trasferimenti da/per la memoria avvengono a blocchi (o pagine) Nello schema appena visto, vengono selezionati prima 4096 bytes e poi tra questi viene scelto quello richiesto E’ possibile migliorare le prestazioni semplicemente evitando di “riselezionare” la riga ad ogni accesso se le posizioni sono consecutive Questo viene chiamato “Fast Page Mode” (FPM) e l’incremento di prestazioni può essere significativo 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 14 7 Memoria 4M x 32 Start Busy Refresh Contatore Refresh Multiplexer di Indirizzo ... Array di celle di memoria 4x8 R/W Indirizzo Decodificatore di COLONNA 08/11/2007 RAS CAS Controllo Refresh Controllo delle temporizzazione Row/Column Refresh Ack Refresh Req Controllo Accesso Sistemi a Microprocessore A.A. 2007-2008 Dati 15 DRAM sincrone (SDRAM) Le DRAM visto prima sono dette “asincrone” perchè non esiste una precisa temporizzazione di accesso, ma la dinamica viene governata dai segnali RAS e CAS Il processore deve tenere conto di questa potenziale “asincronicità” in caso di rinfresco in corso può essere fastidiosa Aggiungendo dei buffer (latch) di memorizzazione degli ingressi e delle uscite si può ottenere un funzionamento sincrono, disaccoppiando lettura e scrittura del rinfresco e si può ottenere automaticamente una accesso FPM pilotato dal clock 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 16 8 Organizzazione base di una SDRAM 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 17 SDRAM: esempio di accesso in FPM 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 18 9 Organizzazione delle memorie La memoria ideale dovrebbe essere a capacità infinita, tempo di accesso nullo e costo e consumo nullo. Nei casi reali l’organizzazione del calcolatore comprende diversi tipi di memorie con caratteristiche diverse Alcune memorie sono dedicate, ossia sono progettate per contenere specifici tipi di dati (es la EPROM o flash di bootstrap) Altre memorie sono general-purpose e si può accedervi mediante specifici metodi di indirizzamento per leggere o scrivere dati di qualsiasi tipo. Il loro impiego dipende dalle loro caratteristiche e da come il dato viene impiegato durante il funzionamento del calcolatore 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 19 Organizzazione delle memorie 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 20 10 Organizzazione delle memorie Organizzazione gerarchica (tipica dei calcolatori generalpurpose) La CPU vede un solo tipo di memoria, indirizzata direttamente tramite un identificatore (indirizzo) L’hardware (MMU) e il sistema operativo gestiscono invece un insieme di memorie organizzate gerarchicamente che contengono repliche dei dati in modo che la CPU trovi ad ogni accesso il dato utile nella memoria più veloce possibile Gerarchia di memorie: La memoria del calcolatore e’ organizzata gerarchicamente in modo da comprendere poche memorie a bassa capacità ed alti costi ma molto veloci e molta memoria più lenta e di capacità maggiore 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 21 Organizzazione delle memorie 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 22 11 Organizzazione delle memorie Nella gerarchia di memoria i dati sono temporaneamente trasferiti in memorie sempre più veloci. L’obiettivo e’ di organizzare le politiche di piazzamento ed accesso dei dati in modo tale da avere i dati più frequentemente usati, o in generale più “utili” virtualmente sempre nelle memorie più veloci. 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 23 Organizzazione delle memorie La memoria interna alla CPU è costituita dai registri ed è caratterizzata da: alta velocità (comparabile con quella del processore) e limitate dimensioni (al più qualche migliaio di byte). La memoria centrale o principale è caratterizzata da,dimensioni molto maggiori della memoria interna alla CPU (fino a qualche Gbyte) ma tempi di accesso più elevati. È accessibile in modo diretto tramite indirizzi. Nei sistemi attuali un livello di memorie cache e’ stato inserito tra CPU e memorie centrali Memorie secondarie: In un calcolatore esistono diverse memorie secondarie (o memorie di massa) ad alta capacità bassi costi e non volatili 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 24 12 Organizzazione delle memorie 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 25 Organizzazione delle memorie 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 26 13 Organizzazione delle memorie Regola base dell'efficienza è rendere di massima velocità il caso più frequente Sfruttamento della località spaziale e temporale Principio di località un programma in ogni istante utilizza una porzione limitata dello spazio di indirizzamento Località spaziale: accedendo ad un dato è assai probabile che si debba accedere ad altri dati localizzati “vicino” nello spazio di indirizzamento Località temporale: accedendo ad un dato è assai probabile che si debba riaccedere ad esso in un tempo “vicino” 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 27 Organizzazione delle memorie Dati che inizialmente si trovano ad un livello più basso (loc. temporale) conviene spostarli in memorie più veloci (loc. spaziale) conviene spostare anche i dati vicini I programmi NON vedono la gerarchia ma referenziano i dati come se fossero sempre in memoria centrale (a parte per i registri che sono nominati esplicitamente) perciò bisogna mantenere il più vicino possibile alla CPU dati utilizzati più recentemente. La gerarchia delle memorie deve prevedere in successione memorie sempre più larghe e più lente per mantenere i dati nei livelli più alti proporzionatamente alla previsione della frequenza d’uso. 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 28 14 Blocchi di locazione di memoria Gerarchia di memoria: più livelli Blocco: unità di informazione minima scambiata fra livelli (ex: 32 bytes) Hit: un accesso alla memoria che trova l'informazione cercata nel livello superiore (accesso veloce) Hit Rate: frequenza di accessi trovati nel livello superiore (h) Miss Rate: (1 - h) caso di insuccesso (non trovo il dato nella memoria adiacente/livello superiore) devo andare nel livello inferiore (accesso più lento) Hit Time: tempo di accesso al livello superiore Th 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 29 Blocchi di locazione di memoria Miss Penalty: tempo per rimpiazzare un blocco nel livello superiore più il tempo per fornirlo alla CPU. Il "miss penalty“, Tmp, può anche essere scomposto nei tempi per reperire il primo dato di un blocco più il tempo per trasferire gli altri. Comprende certamente un Th e un “overhead” nel caso di miss (Tmiss) Tacc = h Th + (1-h)Tmp Tmp = Th + Tmiss allora Tacc = Th + (1-h)Tmiss Il Tmiss comprende il tempo per reperire il blocco nella gerarchia di livello più basso più (eventualmente trascurabile) il tempo per rimpiazzare i dati dal livello alto al livello più basso (se il livello più alto deve essere “svuotato”, cioè se devo salvare i dati che sono in esso presenti, operazione di write-back) 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 30 15 Gerarchia: esempio Supponiamo un sistema a due livelli in cui per accedere al primo livello (memoria centrale) il tempo di accesso sia 0.1 microsec (100 ns) per ogni dato e per accedere al secondo (ad esempio HD) sia di 0.1 msec. Quando si accede al secondo livello il dato deve essere copiato nel primo. Ipotizziamo che le probabilità di trovare il dato al primo livello siano del 95% (h). Trascuriamo il tempo necessario al processore per capire dove si trova il dato (trascurabile rispetto al tempo di accesso). Quanto è il tempo di accesso medio? (In microsec) Tacc= 0.95 0.1 + 0.05 (0.1 +100)= 0.095+5.5= 5.1 microsec Basta un 5% di penalizzazione di miss che tutto l’accesso medio è fortemente rallentato, nel caso specifico di ben 5 volte Circa 103 differenza di dimensioni (es. 10K – 10M) Circa 103 differenza di tempo di accesso (es. 10-7s – 10-4s) 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 31 Gerarchia di memorie Parametri di progettazione gerarchia di memoria: Quanti livelli di gerarchia che dimensione e velocità per ogni livello ogni tipo di memoria si definisce in base al 1) Piazzamento del blocco (o funzione di traduzione o mapping): dove può essere allocato il blocco al livello corrente 2) Identificazione del blocco: come si può ritrovare il blocco a livello corrente 3) Rimpiazzamento del blocco: come si sceglie quale blocco sostituire 4) Strategia di scrittura Ad esempio a livello di registri L’identificazione è nominale (mov ax,15) il piazzamento e rimpiazzamento, scrittura e’ definito dal compilatore 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 32 16 Memoria centrale Memoria centrale è la memoria fisicamente e logicamente collegata direttamente alla CPU. Dal punto di vista della gerarchia: 1) Piazzamento del blocco: deciso dall’indirizzo nell’istruzione 2) Identificazione del blocco: indirizzo (sw, compilatore, SO, traduzione diretta) 3) Rimpiazzamento del blocco: deciso dal codice 4) Strategia di scrittura: deciso dal codice Il software (applicativo + SO) ha il controllo dello spazio di indirizzamento Nota la mappa della memoria La CPU legge e scrive su memoria centrale mandando un indirizzo fisico della dimensione pari al suo bus di indirizzi (spazio di indirizzamento) per l’8086 ad esempio 20 bit, creo un indirizzo di 20 bit (indirizzo 1 M). 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 33 Organizzazione di un sistema con memoria cache La memoria centrale e la memoria cache sono organizzate in blocchi di parole o di byte, di ugual dimensione La memoria cache contiene copie di blocchi della memoria centrale, oppure blocchi liberi ad ogni blocco di cache è associato un bit - valid - che indica se il blocco è significativo o libero Il sistema di gestione della cache è in grado di copiare (caricare) blocchi dalla memoria centrale alla memoria cache oppure di ricopiare (scaricare) blocchi dalla memoria cache alla memoria centrale tramite un’apposita unità funzionale Il processore accede sempre e comunque prima alla memoria cache L’uso della memoria cache per incrementare le prestazioni del sistema di memoria sfrutta il principio di località dei programmi 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 34 17 Funzionamento base Istruzioni Il processore deve leggere un’istruzione Se il blocco che contiene l’istruzione da prelevare si trova in cache, l’istruzione viene letta e eseguita Se l’istruzione non si trova in cache: il processore sospende l’esecuzione il blocco contenente l’istruzione viene caricato dalla memoria centrale in un blocco libero della memoria cache il processore preleva l’istruzione dalla cache e prosegue l’esecuzione Dati Il processore deve leggere un dato dalla memoria cache: si procede come visto per la lettura di istruzioni Il processore deve scrivere un dato in memoria: si procede in modo simile ma esiste il problema della coerenza tra memoria cache e memoria centrale (scrittura differita o non differita) 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 35 Memoria cache: definizioni Hit: un accesso alla memoria che trova l'informazione cercata nella cache Miss: quando non si ha un hit e si deve accedere alla memoria centrale Hit Rate (tasso di hit): frequenza (h) di accessi trovati in cache (rapporto tra il numero di hit in cache e il numero totale di riferimenti) Miss Rate: (m) caso di insuccesso ovvero non trovo il dato nella memoria cache (rapporto tra il numero di miss in cache e il numero totale di riferimenti) Vale la relazione m=(1 - h) 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 36 18 Memoria cache: definizioni Hit Time: tempo di accesso alla cache Tc Miss Penalty: tempo per rimpiazzare un blocco nella cache più il tempo per fornirlo alla CPU. Il "miss penalty“, Tp, può anche essere scomposto nei tempi per reperire il primo dato di un blocco più il tempo per trasferire gli altri. Comprende certamente un Th e un “overhead” nel caso di miss (Tmiss) Tacc = h Tc + (1-h)Tp Tmp = Tc + Tmiss allora Tacc = Tc + (1-h)Tmiss 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 37 Memoria cache: Posizionamento 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 38 19 Memoria Cache: funzionamento E’ necessario tenere traccia dei dati in cache Un catalogo (directory) consente di ricercare il dato in base all’indirizzo generato dalla CPU La struttura del catalogo dipende dall’organizzazione della cache E’ importante definire la quantità di dati letti dalla memoria e portati in cache in presenza di un miss Vale il principio di Località spaziale Memoria cache e centrale sono viste come insiemi di blocchi di dimensione fissa dette linee La linea è un’unità trasferita in blocco per ridurre il tempo medio di trasferimento dei singoli dati Il tempo di penalizzazione Tp è: Tp = TRam+Tcache Tcacheè il tempo impiegato per trasferire in cache la linea che contiene la parola indirizzata 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 39 Memoria Cache: Organizzazione Nell’organizzazione della cache è importante l’associazione tra le linee della memoria centrale e quella della cache Quale posizione in cache verrà occupata da una linea letta dalla memoria centrale Tre tipi di organizzazione Cache a mappatura diretta Cache completamente associativa Cache parzialmente associativa o setassociative 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 40 20 Memoria Cache: progettazione Quanto visto si riassume come segue: Metodo di indirizzamento Metodo di identificazione come localizzare un blocco di memoria centrale all’interno della cache Metodo di scrittura (coerenza) come scegliere il blocco della cache in cui copiare un blocco di memoria centrale (mapping) come comportarsi quando si deve scrivere una parola contenuta in un blocco della memoria cache Metodo di sostituzione come si sostituiscono blocchi della cache per liberare spazio 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 41 Cache: a mappatura diretta Ogni blocco della memoria centrale è caricabile in un solo blocco della cache Più blocchi di memoria centrale possono essere caricati nello stesso blocco di memoria cache (conflitti) Mapping: il blocco di indice (indirizzo) j della memoria centrale è caricabile solo nel blocco di indice (indirizzo): resto div intera di j/n° blocchi della cache 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 42 21 Cache: a mappatura diretta Si assuma: Una cache di capacità L=2l linee Linee di W=2w parole Una capacità C = LxW parole Una memoria centrale di dimensione B = 2b blocchi, multipla della dimensione della cache L’indirizzo di una parola è 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 43 Cache: a mappatura diretta Il contenuto del campo lungo b bit (IB) può essere visto come numero d’ordine del blocco di memoria Il contenuto del campo lungo l bit (IL) come numero di linea nel blocco Quello del campo lungo w bit (IW) come numero di parola entro la linea IB|0|0 -> indirizzo base del blocco IB|IL|0 -> indirizzo della linea nel blocco IB|IL|Iw -> indirizzo della parola nella linea 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 44 22 Cache: a mappatura diretta Con la mappatura diretta tutte le B linee in posizione IL dentro un qualunque blocco di memoria sono mappate sulla stessa linea di cache 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 45 Cache: a mappatura diretta La cache è fatta da due parti (banchi): TAG RAM (banco sx) Rappresenta il catalogo dei dati contenuto nell’altro banco Ogni posizione ha dimensione pari a quella del campo IB dell’indirizzo generato dalla CPU DATA RAM (banco dx) 08/11/2007 Contiene i dati Ogni posizione ha la dimensione di una linea di cache Sistemi a Microprocessore A.A. 2007-2008 46 23 Cache: a mappatura diretta Il campo IL identifica la posizione della linea in DATA RAM e TAG RAM Il valore del TAG RAM è confrontato con IB Se uguali, il dato è in cache e letto direttamente dal DATA RAM La linea di hit è asserita e abilita l’uscita dal multiplexer della parola Se diversi, si ha la linea di hit disasserita (miss) e inizia il processo di lettura della memoria centrale della linea contente la locazione indirizzata. IB è copiato nella TAG RAM e la linea letta rimpiazza quella esistente in DATA RAM 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 47 Cache: a mappatura diretta La ricerca in TAG e in DATA RAM avviene in parallelo In caso di HIT, il segnale di OE rende disponibile la parola letta Si ipotizza che al multiplexer sia presente una intera linea e che si selezioni la parola indirizzata Di solito DATA RAM è fatta di L x W parole e la parola si trova esattamente all’indirizzo IL|Iw Quando un programma esegue ripetutamente un ciclo che con coinvolge due blocchi di memoria a ogni passaggio da un blocco all’altro le linee di cache sono sostituite Æ Calo delle prestazioni 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 48 24 Cache: a mappatura diretta Esempio: Memoria centrale da 4Gbyte, cache a mappatura diretta da 1KByte, blocchi da 32Byte Accesso a memoria a byte: blocchi da 32 byte: 5 bit di indirizzo per identificare il singolo byte cache di 32 blocchi (1Kbyte/32byte): 5 bit di indirizzo per identificare il blocco 22 bit di etichetta = 32 (4Gbyte) - 10 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 49 Cache: a mappatura diretta Esempio Indirizzi di memoria a 32 bit Cache a mappatura diretta: blocco costituito da una parola di 4 byte 1024 blocchi (210) Struttura dell’indirizzo di memoria: Bit 0 e 1 per individuare il singolo byte nella parola Bit 2-11 per individuare il blocco di cache Bit 12-31 come etichetta 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 50 25 Cache: a mappatura diretta Esempio: Memoria centrale 4Gigabyte (32 bit indirizzo) Accesso a memoria a parole da 32 bit Blocchi da 4 parole (16 byte): 2 bit per parola nel blocco, 2 bit per byte nella parola Memoria cache da 16kparole: 12 bit per indirizzare un blocco (n° blocchi = 214/22) Etichetta da 16 bit 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 51 Cache: a mappatura diretta 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 52 26 Cache a mappatura diretta: Esercizio Si consideri un calcolatore con memoria centrale di 64KB, indirizzabile a byte (parola=1Byte) e dimensione di blocco di 8Byte. Si assuma di usare una cache a mappatura diretta di 256Byte: a) dire in quali campi gli indirizzi di memoria sono suddivisi ai fini della cache e quali sono le dimensioni (in numero di bit) di ogni campo R: La memoria ha dimensione 64KB = 216 Byte, quindi un indirizzo è costituito da 16 bit. I 16 bit saranno suddivisi nei campi Etichetta, Linee, Parola. Poiché una parola è costituita da 1Byte ed un blocco da 8Byte = 23 B, il campo Parola sarà di 3 bit. Il numero di linee della cache è calcolato dividendo la sua capacità per la dimensione di blocco: 256B/8B = 32 = 25 , quindi il campo Linee sarà di 5 bit. I rimanenti (16 - 5 - 3) = 8 bit saranno dedicati al campo Etichetta. 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 53 Cache a mappatura diretta: Esercizio Si consideri un calcolatore con memoria centrale di 64KByte, indirizzabile a byte (parola=1Byte) e dimensione di blocco di 8Byte. Si assuma di usare una cache a mappatura diretta di 256Byte: b) dire in quale linea verrebbero memorizzati i byte con i seguenti indirizzi: 111Bhex C334hex D01Dhex AAAAhex R: ricordando che un indirizzo è suddiviso nel seguente modo 08/11/2007 111Bhex Æ 0001 0001 0001 1011 Æ linea 3 C334hex Æ 1100 0011 0011 0100 Æ linea 6 D01Dhex Æ 1101 0000 0001 1101 Æ linea 3 AAAAhex Æ 1010 1010 1010 1010 Æ linea 21 Sistemi a Microprocessore A.A. 2007-2008 54 27 Cache completamente associativa Una linea di memoria può essere copiata in qualunque posizione della cache Il TAG RAM si comporta come una memoria CAM (Content Addresable Memory) Ogni linea di memoria in cache ha un indirizzo univoco Ix memorizzato nella TAG RAM La TAG RAM è costituita da L posizioni di t=(b+l) bit ciascuna Il campo Ix dell’indirizzo viene confrontato in parallelo con il contenuto (tutte le linee) della TAG RAM. Se Ix è presente si ha un hit e il valore è letto dalla cache, altrimenti si va in memoria centrale 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 55 Cache completamente associativa Rispetto alla mappatura diretta: In caso di miss occorre individuare quale linea sostituire tra le L possibili Algoritmi di rimpiazzamento Si cerca la linea della DATA RAM dopo che è conclusa la ricerca in TAG RAM. Tempo di accesso maggiori Complessità hardware maggiore Costo maggiore 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 56 28 Cache completamente associativa 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 57 Cache parzialmente associativa Definizione: Si definisce Grado di Associatività di una cache il numero di posizioni del catalogo che devono essere confrontate con il campo IB. La cache a mappatura diretta ha grado di associatività pari a 1. La cache completamente associativa ha un grado di associatività pari al numero di linee di cache. Se il grado di associatività è n si parla di memoria cache a n vie. 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 58 29 Cache parzialmente associativa: 2 vie 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 59 Cache parzialmente associativa : 2 vie La parte bassa dell’indirizzo seleziona la parola effettivamente indirizzata Le due linee di hit0 e hit1 abilitano o meno uno dei due selettori Ciascuna linea di memoria può essere mappata in due differenti linee di cache: banco dx o sx. In caso di miss occorre scegliere in quale via deve essere copiato la linea di memoria A parità di condizioni le prestazioni sono comparabili con la mappatura diretta 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 60 30 Cache parzialmente associativa : 4 vie A 4 vie: ogni blocco di memoria centrale può essere caricato in 4 blocchi di cache, quindi la dimensione di ogni gruppo è di 4 blocchi Memoria centrale 4Gbyte: 32 bit Memoria cache 1K parole (1 parola=4byte), blocchi da 1 parola Organizzazione dell’indirizzo: Bit 0 e 1 per indirizzare i byte Numero blocchi nella cache = dimensioni della cache/dimensioni del blocco= 210/1 = 210 Numero di gruppi nella cache= numero di blocchi/ dimensioni del gruppo = 210/22 = 28 Bit 2-10 indice del gruppo nella cache Bit 31-11 etichetta 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 61 Cache parzialmente associativa : 4 vie 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 62 31 Esercizio Cache 1 Si consideri una cache di 4KB con associazione a gruppi a 8 vie ( 8-way set associative) in congiunzione con una memoria centrale di 1MB. Supponendo che un blocco sia di dimensione 64B, si dica come un indirizzo di memoria è suddiviso in campi e a quanto ammonta la dimensione di ogni campo. 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 63 Esercizio Cache 1 Soluz.: trattandosi di una cache con associazione a gruppi, l’indirizzo di memoria centrale deve essere suddiviso nei campi tag, set, e parola. la memoria centrale è di 1MB, cioè 220 byte; pertanto un indirizzo di memoria centrale è espresso in 20 bit. la dimensione del campo parola è individuato univocamente dall dimensione del blocco, che è di 64B, cioè 26 byte; pertanto il campo parola è di 6 bit. una cache di 4KB possiede 212 byte; ogni linea deve contenere un blocco e quindi impegna 26 byte; quindi la cache contiene 212 /26 = 26 linee. Poiché un insieme deve contenere 8 linee, il numero di insiemi della cache è pari a 26/23 =23 . Pertanto il campo set è di 3 bit. la dimensione del campo tag sarà dunque: 20 -3 -6 = 11 bit 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 64 32 Esercizio Cache 2 Si consideri una cache di 16KB con associazione a gruppi a 4 vie ( 4-way set associative) e dimensione di linea di 32B. Supponendo che il campo tag sia di 12 bit, si dica quale è la dimensione massima (in byte) di memoria principale che la cache è in grado di gestire, assumendo il singolo byte come unità di indirizzamento della memoria. 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 65 Esercizio Cache 2 Soluz.: per calcolare la quantità massima di memoria principale gestibile, bisogna calcolare il numero di bit totali che esprimono una generica locazione di memoria. trattandosi di una cache con associazione a gruppi, l’indirizzo di memoria centrale deve essere suddiviso nei campi tag, set, e parola. sappiamo che il campo tag è di 12 bit; quindi occorre calcolare la dimensione dei campi set e parola. la dimensione del campo parola è individuato univocamente dalla dimensione del blocco, che è di 32B, cioè 25 byte; pertanto il campo parola è di 5 bit. una cache di 16KB possiede 214 byte; ogni linea deve contenere un blocco e quindi impegna 25 byte; quindi la cache contiene 214/25 = 29 linee. Poiché un insieme deve contenere 4 linee, il numero di insiemi della cache è pari a 29/22 =27 . Pertanto il campo set è di 7 bit. quindi la dimensione massima di memoria gestibile è: 212+7+5, cioè 16MB 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 66 33 Cache: Il problema della scrittura Un’operazione di scrittura può generare un hit o un miss come un’operazione di lettura Miss in scrittura Si pone il problema se portare la linea di memoria in cache o no: Write allocate: richiede la selezione della linea di cache dove copiare la linea di memoria (Algoritmi di rimpiazzamento) Write non-allocate: la scrittura avviene direttamente in memoria centrale all’indirizzo generato. Si preferisce il Write non-allocate poiché le operazioni di scrittura si verificano con frequenza minore (percentuale più bassa) rispetto a quelle di lettura e i dati possono essere sparsi (indirizzi non contigui e distanti) 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 67 Cache: Il problema della scrittura Hit in scrittura In cache abbiamo una copia dei dati presenti in memoria centrale Æ un’operazione di scrittura renderebbe inconsistente il contenuto della cache con la memoria centrale Due tipi di aggiornamento (scrittura): 08/11/2007 immediato (write through) a posteriori o differito (write-back o copy-back) Sistemi a Microprocessore A.A. 2007-2008 68 34 Cache: write through Tutte le scritture in cache vengono fatte anche in memoria Si mantiene la consistenza Influenza negativamente le prestazioni Incrementa il traffico sul bus di sistema Sconsigliato per sistemi multiprocessore a bus condiviso Alcune architetture prevedono un buffer di appoggio in scrittura: Si scrive prima in cache e poi in modo asincrono in memoria Problema legato allo svuotamento Efficace per scritture “isolate” Va in saturazione se le scritture sono fatte su grossi blocchi di dati Æ la sua presenza è allora ininfluente 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 69 Cache: write back L’informazione viene scritta solo in cache. La memoria viene aggiornata solo quando avviene la sostituzione del blocco. Si accede in scrittura in cache Il processore non viene rallentato Non si genera traffico sul bus Il catalogo deve tenere traccia delle linee modificate dentro la cache (dirty bit) La marcatura di una linea (modificata), candida la linea ad essere rimpiazzata e verrà copiata in memoria Se una linea non è marcata il controllore di cache esegue il caricamento della linea dalla memoria centrale. 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 70 35 Cache: Lo stato della linea di cache In seguito ad una scrittura differita occorre tener traccia della possibile modifica nella linea di cache Occorre definire un’informazione di stato che può variare in relazione alla tecnica di gestione utilizzata E’ sufficiente un bit per segnare la validità All’avvio del sistema tutte le linee sono invalide Al caricamento di una linea dalla memoria la corrispondente linea in linea è segnata valida In seguito ad una richiesta di trasferimento in memoria sul canale DMA, le linee di cache non corrispondono ai blocchi in memoria (perché sono stati cambiati) Occorre invalidare queste linee La ricerca in cache di un dato implica la verifica della validità del dato Æ validità della linea 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 71 Cache: Lo stato della linea di cache Sistemi multitasking e memoria virtuale Al termine dell’esecuzione di un processo il S.O sceglie quale processo attivo mettere in esecuzione In seguito all’intervento del gestore della memoria centrale, il nuovo processo può sovrapporsi sullo spazio indirizzi ancora presenti in cache ma relativi al processo terminato. Le linee esistenti non sono più valide Per evitare di invalidare tutta la cache, si può abbinare al bit di validità l’identificativo del processo La ricerca di un dato in cache prevede il confronto del bit di validità e la verifica dell’ID del processo con quello correntemente in esecuzione Il costo di tale cache è maggiore dovuto alla memoria aggiuntiva necessaria per gestire l’identificatore del processo che riferisce alla linea. 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 72 36 Cache: Algoritmi di rimpiazzamento Gli algoritmi di rimpiazzamento sono necessari con cache con un’associatività superiore a uno. La mappatura diretta ha un rimpiazzamento implicito con il funzionamento stesso. Si introduce un controllore che determina quale linea rimuovere (su base algoritmica) Tutti gli algoritmi si basano sull’uso di contatori Il numero di contatori combinato alla loro dimensione fornisce una misura della complessità della logica usata per il rimpiazzamento Si considera una cache associativa a N vie con L linee per via 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 73 Cache: Algoritmi di rimpiazzamento La generica posizione è indicata con IL in corrispondenza della quale si trova le N linee corrispondenti alla N vie Le vie sono numerate da 0 a N-1 Le linee (allineate lungo le N-1 vie) sono indicate come l0, l1, …, lN-1 li,j indica linea i sulla via j Vi,j indica il bit di validità associato a li,j (1 = linea valida). In totale si hanno LxN bit di validità. In presenza di più miss sulla stessa linea occorre stabilire un criterio di selezione Definizione: Si definisce via prioritaria la via più a sinistra (con indice più basso) tra tutte quelle non valide. 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 74 37 Cache: Algoritmi di rimpiazzamento Algortimi possibili: LRU (Least Recently Used) FIFO (First In First Out) Si rimpiazza la linea non utilizzata da più tempo, è molto probabile che il codice/dati nella linea sono poco frequentati dall’esecuzione del programma Complessi e costosi da realizzare Si assume un modello di esecuzione del programma di tipo sequenziale Media complessità RAND (Random) Si rimpiazza in modo casuale Semplice da realizzare 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 75 Cache: Sostituzione randomica In caso di miss occorrerebbe generare un numero a caso compreso tra 0 e N-1. Considerando che i miss avvengono in modo casuale rispetto a tutte le linee di cache Æ Si usa un contatore C unico per la cache Il contatore è modulo N-1 La scelta della linea da rimpiazzare (miss) avviene guardando prima tra le linee non valide La generazione casuale prevede una rete logica complessa Se le N linee alla posizione l sono tutte valide si seleziona la linea sulla via il cui numero d’ordine uguaglia il contatore. Il contatore viene quindi aggiornato. In caso di hit non succede niente 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 76 38 Cache: Sostituzione randomica Hit: non succede niente; Miss: esistono linee non valide? Sì: j Å indice della via prioritaria No: j Å C Sostituzione lj; C Å (C+1)modN; VljÅ1 Nota: La sostituzione di una linea comporta l’affermazione del bit di validità 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 77 Cache: algoritmo LRU Ad ogni posizione IL di cache si assegna una lista ordinata di riferimenti In testa alla lista è riportata la linea riferita più di recente In coda quella riferita meno di recente La lista richiede N posti e ogni posto corrisponde ad un contatore modulo N. In totale si hanno L x N contatori Ogni contatore richiede un numero di bit pari a: ⎡log 2 N ⎤ Nel caso di 2 vie serve un solo bit e in totale quindi N 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 78 39 Cache: LRU – Metodo dello stack Si assuma una cache a 4 vie Lo stack per ogni posizione IL è di 4 posizioni (vie) e ciascuna è gestita da un registro a 2 bit S0 contiene la via riferita di recente e S3 quella meno recente Lo schema seguente considera solo il caso di hit e non tiene conto del valid bit. Il segnale hclk (hit clock) è l’impulso che deriva dall’avvenuto hit. In j si ha il numero d’ordine della via su cui è avvenuto l’hit 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 79 Cache: LRU – Metodo dello stack L’aggiornamento dello stack in caso di hit prevede: Il numero di via j passa in S0 e si sposta a destra la parte che sta alla sinistra del registro che conteneva j. Es: 08/11/2007 Hit su l0 e stato dello stack pari a 1302 La configurazione diventa 0132 Sistemi a Microprocessore A.A. 2007-2008 80 40 Cache: LRU – Metodo dello stack L’aggiornamento dello stack in caso di miss con linee tutte valide prevede: Portare l’uscita di S3 in S0 e far scorrere a destra S0, S1 e S2 La gestione del valid bit comporta una complicazione nell’hardware 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 81 Cache: LRU – Metodo dei contatori per linea Si assume una cache a 4 vie Ad ogni linea è associato un contatore per gestire l’ordine di riferimento Si assume di rimpiazzare la linea non valida con via di ordine minore Nella tabella: C0, C1, C2 e C3 sono i contatori 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 82 41 Cache: LRU – Metodo dei contatori per linea In caso di hit si aggiornano i contatori Incrementando i contatori di valore più basso di quello della linea su cui si ha lo hit Si azzera il contatore In caso di miss Selezionare la prima riga non valida, o in mancanza, la linea con il contatore uguale a N1 Aggiornare i contatori come si fosse stato un hit sulla linea e portare il bit di validità a 1 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 83 Cache: LRU – Metodo dei contatori per linea Sia Cli (l=0,…,L-1; i=0,…N-1) il generico contatore preso dalla matrice di contatori C di dimensione L x N Si indichi con Vlj il generico bit di validità preso dalla matrice V di pari dimensioni Si ha: Hit: j Å numero di via su cui si verifica lo hit per ogni i tale che Cli < Clj : Cli Å (Cli +1)modN; Cli Å 0 Miss: esistono linee vuote? Sì: j Å via prioritaria; No: j Å i tale che Cli = N-1; per ogni i tale che Cli < Clj : Cli Å (Cli +1)modN; Cli Å 0; Vlj Å 1 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 84 42 Cache: LRU – Metodo dei contatori per linea L’algoritmo LRU basato sui contatori è molto costoso Occorrono molti contatori e una logica di controllo Problemi di spazio sull’integrato della CPU 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 85 Cache: pseudo LRU Algortimo introdotto nella CPU Intel 486 Cache associativa a 4 vie Ogni via 2 KB, 16 Byte per linea per un totale di 128 linee per via Politica di scrittura: write-through/write-non allocate (le operazioni di scrittura aggiornano la cache solo in caso di hit di scrittura) Il rimpiazzamento si basa su 3 bit per la linea invece di 8 (come richiesto nel caso dei contatori, pari a 4) I tre bit B0, B1 e B2 (bit LRU) sono utilizzati per creare un albero di decisione e aggiornati in caso di hit (lettura e scrittura) o miss in lettura Con l0, l1, l2 e l3 si indicano le linee nella generica posizione IL relative alle 4 vie 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 86 43 Cache: pseudo LRU In presenza di un hit si aggiornano i bit B0, B1 e B2 seguendo lo schema seguente: Per avere un hit nella via 2 il valore dei bit assume la seguente configurazione: B0 0 1 1 B1 0 1 B2 0x1 0 l0 l1 l2 l3 08/11/2007 il bit B1 non viene modificato e rimane settato al valore che aveva prima dello hit. Ovvero, si aggiustano i solo i bit che Permettono di determinare la via più recente. Sistemi a Microprocessore A.A. 2007-2008 87 Cache: pseudo LRU Albero di decisione Decisione in caso di Miss 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 88 44 Cache: pseudo LRU 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 89 Cache: LRU vs Pseudo Nel caso dell’evento 10, l’algoritmo LRU sostituisce l1 mentre lo pseudo LRU l2 Lo pseudo LRU a seguito di un miss che sostituisce in una delle due vie di sinistra predispone la sostituzione per un miss successivo sulle vie di destra Esempio: tutte le linee valide 4 hit ai gruppi l0, l1, l2, l3 in successione Æ Stato dei bit 000 Cosa succede se avvengono due miss? Partendo da 100 Hit Æ 110 Hit Æ 100 Hit Æ 001 Hit Æ 000 Viene sostituito l0 ed i bit aggiornati a 110 Viene sostituito l2 invece di l1 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 90 45 Cache: tecnica FIFO La tecnica FIFO tiene conto solo dell’ordine di ingresso in cache Occorre disporre un contatore per linea che conti modulo N Nel caso di una cache a 4 vie a N blocchi per via occorrono N contatori modulo 4 Counter C0 0 Line 0 1 Line 0 2 Line 0 3 Line 0 Ci Line i Line i Line i Line i N Vie 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 91 Cache: tecnica FIFO Quando la cache è vuota i contatori sono resettati (sono a 0) Al primo miss su la linea i il relativo contatore Ci viene messo a 1 ed indica che al prossimo miss la via da utilizzare è la 1. Il blocco desiderato viene caricato nella via 0 Nel caso in questione i contatori sono a 2 bit Æ in totale 2N bit L’algoritmo FIFO deve quindi: In caso di hit lasciare tutto invariato In caso di miss: 08/11/2007 Controlli che esistano linee NON VALIDE tra quelle del generico insieme di linee i in caso affermativo elimina la linea della via prioritaria (quella più a sx) Se non esistono linee NON VALIDE sull’insieme di linee selezionato, si seleziona la via più vecchia indicata dal contatore; la nuova linea viene caricata e il contatore incrementato di 1 Sistemi a Microprocessore A.A. 2007-2008 92 46 Cache: tecnica FIFO In virtù di quanto detto, l’algoritmo si può scrivere come: Hit: non succede niente Miss: esistono linee vuote? sì: CÅ via prioritaria sostituzione della riga in colonna C CÅ(C+1)modN (bit di validità della linea Å 1) 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 93 Cache: tecnica FIFO Implementazione hw Miss i C o u n t e r Decoder 0 W0 1 W1 2 W2 3 W3 Write 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 94 47 Cache: Analisi Prestazioni Il tempo medio di accesso alla memoria in presenza della cache è dato dalla eq. Tacc = h tc + m tp h tasso di hit, m tasso di miss (m=1-h) tc tempo di accesso in cache tp tempo di penalizzazione (somma del tempo di latenza della memoria centrale e del tempo necessario al trasferimento della linea in cache L’equazione presenta 4 grandezze che forniscono altrettanti criteri di ottimizzazione 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 95 Cache: Analisi Prestazioni Criteri di ottimizzazione: Massimizzare il tasso di hit Minimizzare il tempo di accesso all’informazione in cache (minimo tempo di hit) Minimizzare il ritardo dovuto a un miss (minimo tempo di penalizzazione) Minimizzare il tempo necessario per la gestione della coerenza delle cache per i sistemi multiprocessori o in sistemi con più livelli di cache 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 96 48 Cache: Effetto della cache sulle prestazioni Si consideri il MIPS come indice di prestazione Indicato con Tpi il tempo medio per eseguire completamente un’istruzione (fetch + decodifica/esecuzione) espresso in µs (microsecondi) si ha MIPS = 1 / Tpi Se il prelievo e la decodifica/esecuzione non si sovrappongono si può considerare Tpi = Tm + (nex/f) Dove 08/11/2007 Tm è il tempo medio di accesso alla memoria nex è il numero medio di cicli di clock per decodificare ed eseguire l’istruzione f è la frequenza di clock Sistemi a Microprocessore A.A. 2007-2008 97 Cache: Effetto della cache sulle prestazioni Indicato con N il numero di cicli dalla CPU per leggere in memoria e con Nw gli eventuali cicli di attesa: Tm = (N + Nw)/f Pertanto sostituendo si ha MIPS = f/(N + Nw+nex) Il massimo di prestazione si ha per N=1 e Nw=0 Nel caso di N=1 e nex=1 un ciclo di attesa abbatte del 33% le prestazioni Con pipeline dove N+ nex=1 un ciclo di attesa dimezza le prestazioni 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 98 49 Cache: Effetto della cache sulle prestazioni - Conclusioni Una cache ben progettata deve avere un tc che consenta di accedere in un ciclo di clock in caso di hit e un Tacc molto basso Su Tacc influiscono m e tp Questi parametri risentono della dimensione, dell’organizzazione e la modalità di gestione della cache 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 99 Cache – Elementi che influenzano le prestazioni Il miss rate m è influenzato principalmente da: La dimensione della cache La dimensione della linea Il grado di associatività Tuttavia vanno considerati: L’algoritmo di rimpiazzamento Il precarimento La scrittura in memoria centrale (write-through/copy back) Cache divisa o unificata Cache su più livelli Il posizionamento della cache (cache fisica o virtuale) La multiprogrammazione Le operazione di I/O Single o multi core 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 100 50 Cache: La dimensione della cache A dimensioni maggiori corrisponde una probabilità maggiore di trovare l’informazione 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 101 Cache – Elementi che influenzano le prestazioni: la dimensione della linea A dimensioni maggiori della linea corrisponde un aumento della capacità della cache di giovare della località spaziale ma diminuisce il numero di linee allocate in cache con conseguente diminuzione della probabilità di ritrovare l’informazione in tempi successivi (diminuisce la località temporale) All’aumentare della dimensione si ha un ritardo nella lettura dalla memoria con maggiore probabilità di copiare dati inutili (istruzioni non eseguite e dati non utilizzati) La dimensione di linea è il compromesso tra un alto h e un basso tp 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 102 51 Cache – Elementi che influenzano le prestazioni: Associatività Con l’aumentare del grado di associatività migliorano le prestazioni Diminuiscono i conflitti tra le linee nella stessa posizione relativa Æ diminuisce m Ma aumentano i tempi di ricerca della linea Più alto è il grado di associatività e più la logica di gestione si complica Rispetto alla mappatura diretta h è più alto nelle cache associative La differenza tende ad annullarsi al crescere della dimensione della cache 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 103 Cache – Elementi che influenzano le prestazioni: Associatività Il problema del trashing nelle cache associative si manifesta quando un programma in esecuzione copre più di una linea Li in differenti blocchi di memoria In presenza di cicli ripetuti o salti tra queste linee si assiste ad un’attività di continuo caricamento nella stessa posizione di cache Poiché costa meno accedere ad una parola direttamente in memoria che trasferire una linea di cache Æ abbassamento delle prestazioni Per cache abbastanza grandi la probabilità che avvenga ciò è molto bassa Se comparate con le cache a mappatura diretta, quest’ultime sono: Meno costose (non c’è la logica di rimpiazzamento) Il tempo di accesso è inferiore (manca la logica) Il rimpiazzamento è guidato dal tipo di orgnizzazione 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 104 52 Cache – Elementi che influenzano le prestazioni: gli algoritmi di rimpiazzamento L’algoritmo LRU è quello che offre le prestazioni migliori Le cache attuali sono a associative con gestione LRU o semplificata a 2, 4 o 8 vie. Il prelievo della linea: Gli algoritmi prevedono che la linea sia caricata quando è effettivamente richiesta (demand fecthing) Si può operare una tecnica di prefetch delle linea se si tiene conto della località temporale Un miss su una qualunque linea rende molto probabile un miss sulla linea successiva. Si può prelevare sia la linea richiesta che quella successiva 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 105 Cache – Elementi che influenzano le prestazioni: gli algoritmi di rimpiazzamento Il prefetch: Sono possibili 2 realizzazioni 1. Utilizzo di un controllore e un buffer 2. Trasferire direttamente in cache anche la linea successiva Vantaggi: Diminuisce il tasso di miss nelle cache di grandi dimensioni Il controllore legge la linea richiesta e la successiva Il buffer contiene la linea successiva in attesa che serva E’ stato stimata una riduzione del 75-80% Svantaggi: 08/11/2007 Complessa logica del controllore Aumenta la memory pollution (inquinamento della memoria cache). La memoria contiene dati inutili mai utilizzati. Sistemi a Microprocessore A.A. 2007-2008 106 53 Cache – Elementi che influenzano le prestazioni: Cache divisa o unificata Conviene avere una cache per i dati e una per le istruzioni? Gli accessi alle istruzioni hanno un alto grado di località e sono di sola lettura: 08/11/2007 Æ una cache istruzioni ha un h relativamente più elevato Æ in presenza di pipeline occorre però raddoppiare la larghezza di banda del bus per consentire il fetch e la lettura/scrittura di un dato contemporaneamente Æ uso inefficiente dovuto alla variazione da programma a programma della percentuale di memoria utilizzata dai dati e dalle istruzioni Sistemi a Microprocessore A.A. 2007-2008 107 Cache – Elementi che influenzano le prestazioni: Cache divisa o unificata E’ stato provato sperimentalmente che una cache unificata si adatta meglio nella gestione dati e istruzioni Una cache unificata ha prestazioni superiori di una cache divisa di pari dimensioni La cache del 486 era unificata Il pentium ha una cache divisa 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 108 54 Cache – Elementi che influenzano le prestazioni: aggiornamento memoria centrale Write back Le scritture sono eseguite alla velocità della cache Scritture multiple nella cache richiede una gestione logica complessa e conveniente in ambienti multiprocessore Write through Logica più semplice Garantisce una coerenza dei dati rispetto a quelli presenti nella memoria di livello inferiore Valido per ambienti multiprocessore 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 109 Cache – Elementi che influenzano le prestazioni: Cache multilivello La cache serve a ridurre il divario di velocità tra CPU e memoria centrale La necessità di grosse dimensioni per contenere informazioni utili si scontra con le esigenze di velocità Æ si introducono livelli di cache successivi Cache a 2 livelli: La cache di primo livello è più veloce e tiene il passo della CPU Il secondo livello sarà di dimensioni maggiori per soddisfare la maggior parte delle richieste verso la memoria centrale 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 110 55 Cache – Elementi che influenzano le prestazioni: Cache multilivello La velocità del primo livello influenza la frequenza del clock della CPU La velocità del secondo livello si riflette unicamente sulla penalizzazione nei miss sul primo livello 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 111 Elementi che influenzano le prestazioni: Cache multilivello Per una cache a due livelli il tempo medio di accesso diventa: Tacc = h1 x tc1+ m1 x (h2 x tc2 + m2 x tp) tc2 (tempo di accesso al secondo livello) comprende il tempo di trasferimento da livello 2 al livello 1 tp è la combinazione del tempo di accesso al livello 2 e quello necessario per trasferire il blocco dalla memoria centrale Il miss rate sul secondo livello è misurato sui miss nel primo livello ovvero: Tasso di fallimenti locali: numero di fallimenti nel secondo livello diviso il numero totale di accesso allo stesso livello (m2) Tasso di fallimenti globali: numero dei fallimenti nella cache diviso il numero totale di accessi generati dalla CPU (m1 x m2) 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 112 56 Elementi che influenzano le prestazioni: Cache multilivello In accordo all’organizzazione gerarchica della memoria la cache di secondo livello è più grande della cache di primo livello Se la differenza nelle dimensioni del primo livello e secondo livello è: piccola Æ aumenta il tasso di fallimento Elevata Æ il tasso di fallimento globale è circa uguale a quella di una cache mono livello di pari dimensioni (la somma delle dimensioni dei 2 livelli) La dimensione del livello 2 deve essere più vicina a quella della memoria centrale 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 113 Elementi che influenzano le prestazioni: posizionamento della cache Se si considerano sistemi con memoria virtuale occorre posizionare la cache rispetto al MMU (Memory Management Unit) Sono possibili due soluzioni: 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 114 57 Elementi che influenzano le prestazioni: posizionamento della cache Cache fisica (Soluzione 1): La cache sta a valle del traduttore di indirizzi virtuali/logici in indirizzi fisici (486 e Pentium) Cache virtuale (Soluzione 2) La cache è posta tra la CPU e l’MMU e si utilizzano gli indirizzi virtuali/logici Se il dato appartiene a una linea (nello spazio degli indirizzi logici) presente in cache si ha un hit e non si deve tradurre niente perché l’informazione è in cache (Sun SPARC) 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 115 Elementi che influenzano le prestazioni: posizionamento della cache Cache Fisica vs Virtuale Cache fisica: Pro Cache Virtuale PRO: più semplice, costa meno, è espandibile CONTRO: negli hit occorre tradurre gli indirizzi da logico a fisico PRO: negli hit non si traducono gli indirizzi CONTRO: il problema dell’address aliasing Address Aliasing Lo stesso indirizzo virtuale può appartenere a una molteplicità di spazi di indirizzi, relativi a differenti processi. 08/11/2007 Il dato fornito dalla cache deve quindi corrispondere al processo in esecuzione Sistemi a Microprocessore A.A. 2007-2008 116 58 Elementi che influenzano le prestazioni: posizionamento della cache Soluzioni all’Address Aliasing Soluzione 1: Si invalida la cache (flush) in seguito al cambio di contesto (context switching o task switching) Serve un meccanismo automatico di invalidazione o lasciata al S.O. (in questo caso la macchina deve fornire una istruzione di invalidazione) Soluzione 2: Cache virtuale multicontesto: ad ogni linea di cache è associato un process tag per identificare il processo correntemente in esecuzione e quindi la linea ad esso corrispondente Efficiente ma costosa 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 117 La Memoria Gestione della Memoria Virtuale 59 La memoria virtuale Con riferimento alla gerarchia di memoria, la memoria virtuale riguarda la memoria centrale e la memoria di massa Il funzionamento della memoria virtuale si basa sul principio di località (spaziale e temporale) E’ stata introdotta per consentire l’esecuzione in modo trasparente dei programmi di dimensione superiore alla memoria centrale La gestione della memoria nei computer attuali è gestita dall’unità MMU (Memory Management Unit) Traduce l’indirizzo “logico” ( o “virtuale”) generato dalla CPU in indirizzo fisico in memoria centrale Fornisce i meccanismi di protezione degli accessi: controlla ed evita che gli indirizzi di un processo appartengano ad un altro processo Costituisce il supporto Hardware sul quale si appoggia il S.O. per la gestione complessiva del sistema 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 119 La memoria virtuale: Sistema Operativo (richiami) La struttura di un sistema operativo, tipicamente, è quella a cipolla: 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 120 60 La memoria virtuale: Sistema Operativo (richiami) L’hardware è dunque “ricoperto” da una serie di strati di software. Ciascun livello: – usa le funzionalità di quello sottostante – fornisce servizi al livello che segue nella gerarchia – gestisce delle risorse mediante politiche invisibili ai livelli superiori 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 121 La memoria virtuale: Sistema Operativo (richiami) Il livello più basso è quello del kernel (nucleo). Questa parte del sistema operativo si occupa di gestire l’esecuzione dei programmi. Un programma in esecuzione è detto processo. Il kernel distribuisce le risorse di calcolo tra i vari processi attivi. 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 122 61 La memoria virtuale: Sistema Operativo (richiami) Una prima distinzione è dunque tra quei sistemi che eseguono un processo per volta e quelli in grado di gestirne diversi “contemporaneamente”. Questi ultimi sono detti multitasking. multitasking I sistemi operativi possono inoltre essere distinti in base al modo in cui gestiscono i processi: 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 123 La memoria virtuale: Sistema Operativo (richiami) • batch: i processi vengono raggruppati in lotti; • interattivi: l’input viene elaborato subito per poi richiedere di nuovo l’intervento dell’utente; • time-sharing: il “tempo” del processore viene suddiviso in intervalli, e questi sono assegnati ciclicamente ai vari processi che lo richiedono; • real-time: i processi devono restituire comunque un risultato entro un certo tempo (che abbiano o meno avuto accesso alle risorse richieste). 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 124 62 La memoria virtuale: Sistema Operativo (richiami) Non tutti i processi sono attivi nello stesso momento; un processo può trovarsi in uno di tre stati: • in esecuzione: esecuzione sta utilizzando il processore; • in attesa: attesa sta aspettando il risultato di un evento esterno, come un’operazione di I/O; • pronto: pronto è potenzialmente in condizione di utilizzare la CPU. 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 125 La memoria virtuale: Sistema Operativo (richiami) Un processo in esecuzione può cambiare stato per tre diverse ragioni: • l’esecuzione termina o viene terminata; • il processo richiede l’utilizzo di un’altra risorsa, e viene messo in attesa; • la CPU viene assegnata ad un altro processo. 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 126 63 La memoria virtuale: Sistema Operativo (richiami) E’ il sistema operativo, dunque, a gestire lo stato dei vari processi. Perché tutto funzioni, è però necessario che ciascun processo non si accorga di aver “perso” l’uso del processore; a questo scopo, l’esecuzione deve venire ripresa esattamente dal punto in cui si era interrotta. 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 127 La memoria virtuale: Sistema Operativo (richiami) Nei sistemi time-sharing, nel sospendere/riattivare un processo è necessario salvare/caricare tutte le informazioni (Context Switch) in/da un’area di memoria denominata Task Control Block (TCB): Valori dei registri della CPU Program Counter e altro Il S.O. assegna un identificatore a ciascun processo e utilizza alcune liste: La lista dei processi ready La lista dei processi bloccati in attesa di essere ripristinati (a seguito di un evento) Le liste in questione sono liste di TCB 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 128 64 La memoria virtuale: Sistema Operativo (richiami) Dal momento che la memoria di sistema (RAM) è una risorsa finita, nell’allocarla ai vari processi il sistema operativo deve risolvere vari problemi: • trovare spazio per i vari processi; • “rilocare” il codice caricato in memoria; • ridurre la frammentazione. • gestire la protezione 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 129 La memoria virtuale: Sistema Operativo (richiami) A B A B C In memoria sono caricati i processi A e B. Anche C viene caricato in memoria. C Il processo B termina, e libera la memoria. A D C 08/11/2007 Il processo D non trova spazio, anche se la memoria libera complessiva sarebbe sufficiente. Sistemi a Microprocessore A.A. 2007-2008 130 65 La memoria virtuale: Sistema Operativo (richiami) Esistono diverse soluzioni alla situazione appena presentata. A A C C D Si “compatta” la memoria: il processo C viene spostato, liberando così spazio contiguo a sufficienza per D. 08/11/2007 Da questo nasce un altro problema: è necessario aggiornare i riferimenti ai dati in memoria (di C) con i nuovi indirizzi. Sistemi a Microprocessore A.A. 2007-2008 131 La memoria virtuale: Sistema Operativo (richiami) Il sistema operativo può riservare un’area di un disco per lo swapping. swapping A B D A B C C In memoria sono presenti A, B, e C. D non trova spazio. 08/11/2007 C viene copiato su un disco dal gestore della memoria. Sistemi a Microprocessore A.A. 2007-2008 C D D viene caricato in memoria. 132 66 La memoria virtuale: Sistema Operativo (richiami) E’ necessario suddividere la memoria in blocchi. Ci sono 3 soluzioni: • di dimensione fissa(pagine fisiche). I programmi da caricare dovranno essere divisi in pagine logiche. •di dimensione variabile (segmenti) •segmenti con paginazione Memoria (RAM) 0 1 2 3 4 1 2 3 5 6 9 E 4 6 8 Esempio di pagine fisiche 0 5 7 08/11/2007 Processi 7 8 9 F G Sistemi a Microprocessore A.A. 2007-2008 133 La memoria virtuale: Formalizzazione Al fine di definire formalmente cosa sia la memoria virtuale è necessario introdurre i seguenti concetti: Sia V={v0, …, vn-1} lo spazio di indirizzamento di un programma P. Tali indirizzi sono detti indirizzi virtuali o logici Sia M={m0, …, mm-1} lo spazio di memoria fisica Sia f una funzione di mappatura che traduce ad ogni istante di tempo t un indirizzo virtuale v in un indirizzo di memoria fisica m. 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 134 67 La memoria virtuale: Formalizzazione La funzione identifica il meccanismo di traduzione/mappatura fra un indirizzo virtuale ed un indirizzo fisico; Se l’oggetto di indirizzo v non è in memoria centrale (sarà comunque nella memoria di massa) allora si ha un fault Il programma P che ha generato v viene sospeso fino all’avvenuto caricamento in memoria dell’oggetto indicato da v e la mappa verrà aggiornata Lo spazio degli indirizzi virtuali è indipendente dalle dimensioni della memoria e per il programmatore è virtualmente illimitato Tuttavia il limite pratico è determinato dalla capacità di indirizzamento della CPU 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 135 La memoria virtuale: Formalizzazione La funzione di mappatura può essere realizzata tramite una tabella in memoria, i cui indirizzi equivalgono agli indirizzi virtuali, mentre il contenuto identifica gli indirizzi fisici, come rappresentato nella seguente figura: L’utilizzo di una tabella è ovviamente totalmente inefficace, in quanto per ogni indirizzo virtuale è necessario associare una riga della tabella, e quindi la tabella andrebbe ad occupare uno spazio in memoria maggiore di quella realmente disponibile. 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 136 68 La memoria virtuale: Paginazione Lo spazio degli indirizzi è diviso in blocchi (detti pagine logiche) di dimensione fissata e sottomultipli dello spazio di indirizzamento. In blocchi di uguale dimensione (pagine fisiche) è divisa anche la memoria fisica (è quindi necessario che la pagina sia un sottomultiplo intero della memoria fisica) Le pagine che non possono essere salvate in memoria fisica, a causa della sua limitata dimensione, sono collocate temporaneamente nella memoria di massa e da lì recuperate in caso di bisogno. 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 137 La memoria virtuale: Paginazione Per motivi di efficienza è quindi opportuno che la dimensione delle pagine sia anche un multiplo intero del cluster (minima unità di memorizzazione) su disco. Fissati quindi i tre dati a disposizione (spazio di indirizzamento, dimensione della memoria fisica e dimensione del cluster su disco) è possibile stabilire anche la dimensione della pagina. In genere le pagine hanno una dimensione compresa fra 512 byte e 32 Kbyte. Nella figura seguente è rappresentato lo schema di mappatura delle pagine virtuali sulle pagine fisiche o sulla memoria di massa Pagina 1 Pagina 2 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 138 69 La memoria virtuale: Paginazione Il compilatore traduce il programma in uno spazio di indirizzi virtuale lineare, illimitato Il codice viene suddiviso in pagine dal linker o dal programma di caricamento Ai fini della traduzione, un indirizzo virtuale viene interpretato come composto di due campi che contengono rispettivamente: Il numero di pagina logica Lo scostamento entro la pagina 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 139 La memoria virtuale: Paginazione Esempio: consideriamo uno spazio virtuale di 4 GByte (32 bit per gli indirizzi), con pagine di 4 KByte, possiamo pensare l’indirizzo virtuale come suddiviso in due parti: la parte meno significativa composta da 12 bit (12 bit permettono di individuare 4096 indirizzi), e la parte più significativa composta dai rimanenti 20 bit, che permettono di indirizzare 1048576 distinte pagine di memoria. Per individuare la locazione 1037 all’interno della pagina 104567, avremo, dopo la conversione in base 2 dei precedenti valori, la seguente schematizzazione: 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 140 70 La memoria virtuale: Paginazione Applicando il procedimento inverso, il seguente indirizzo virtuale: Identifica: la locazione (010110001001)2=(1417)10 della pagina (00000111011011100101)2=(30437)10 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 141 La memoria virtuale: PMT su singolo livello Il processo di traduzione della locazione di inizio pagina virtuale in inizio pagina fisica viene effettuato dalla PMT (Page Map Table) In corrispondenza di ciascun numero di pagina logica (VPN, Virtual Page Number) fornisce il numero di pagina fisica (RPN) ovvero l’indirizzo fisico della prima posizione della pagina in memoria centrale La PMT risiede in memoria fisica e l’indirizzo dell’inizio della PMT è contenuto in un registro del processore detto RP (Root Pointer) o CR3 nei processori della famiglia Intel. VPN è usato come indice nella PMT 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 142 71 La memoria virtuale: PMT su singolo livello 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 143 La memoria virtuale: PMT su singolo livello Ogni elemento di PMT è detto Page Table Element (PTE) e rappresenta un descrittore di pagina. Esso contiene: l’indirizzo fisico della corrispondente pagina fisica informazioni ausiliarie (PROT): bit P: indica la presenza o meno della pagina in memoria fisica Nell’esempio a pp. 138 per la pagina P1 il bit indicherà che non è in memoria e i bit del descrittore perdono di significato. In seguito alla generazione di un indirizzo interno ad una pagina che non è in memoria centrale si ha un page fault. Si genera un’interruzione gestita dal S.O. che provvede al caricamento della pagina dal disco e all’aggiornamento del bit P. bit A: indica se la pagina in questione è stata indirizzata o meno. Il S.O. legge periodicamente il valore di A e se vale 1lo azzera. In questo modo il S.O. costruisce una statistica che descrive l’utilizzo della pagina, e che può essere usata come politica di rimpiazzamento, per esempio utilizzandola per l’algoritmo LRU. 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 144 72 La memoria virtuale: PMT su singolo livello informazioni ausiliarie (PROT): bit M: indica se la pagina è stata modificata (M=1) o meno. Se il contenuto della pagina nella sua permanenza nella memoria centrale viene modificato (scrittura) allora occorre aggiornare la copia sulla memoria di massa. Essa va aggiornata prima che questa usata per un’altra pagina logica (di un altro processo). Se non viene modificata, allora può essere rimpiazzata da un’altra pagina logica e non è necessario l’aggiornamento in memoria di massa uno o più bit ACC: che indicano i diritti di accesso alla pagina da parte dei processi in esecuzione sulla macchina Sono utilizzati per la protezione e il controllo degli accessi. Ad esempio per definire se la pagina è: non scrivibile da programmi utente (es. la pagina è del S.O.) esclusiva di un processo (es. dll parte dati) condivisa da più processi (es. dll parte istruzione) 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 145 La memoria virtuale: PMT su singolo livello Considerazioni: I limiti di questo approccio sono: Supponendo di avere un indirizzamento a 32 bit e pagine di 4 Kbyte, si ha un indirizzo fatto da 20 bit per il numero di pagina e 12 per lo scostamento. l’occupazione di memoria della PMT La difficoltà a mantenere uno spazio di memoria contiguo in uno spazio virtuale e paginato. Siamo costretti a memorizzare nella PMT i 20 bit dell’indirizzo dell’inizio della pagina fisica più i bit addizionali (supponendo che essi occupino altri 6 bit), ottenendo quindi un totale di 26 bit per pagina Al contrario della TAG della cache, che viene normalmente realizzato in hardware e quindi con una dimensione in bit esattamente pari a quella desiderata, la PMT risiede in memoria e quindi l’occupazione in bit è un multiplo intero della dimensione minima di memorizzazione (il byte), costringendoci quindi ad utilizzare 4 byte (1 per lo stato e 3 per la pagina fisica) per ogni locazione della PMT. 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 146 73 La memoria virtuale: PMT su singolo livello Dal momento che nella PMT ci sono quindi 220=104567 righe da 4 byte otteniamo un’occupazione complessiva di 4 Mbyte, decisamente troppo elevata rispetto alla memoria fisica normalmente installata in un calcolatore. D’altra parte dal momento che la PMT risiede in memoria centrale, e la memoria centrale è paginata, sembra necessario, oltreché opportuno paginare anche la PMT. La necessità di paginare la PMT porta a considerare la possibilità di introdurre un livello ulteriore nella PMT, creando così le premesse per utilizzare una PMT multilivello che ottimizzi lo spazio occupato su disco. 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 147 La memoria virtuale: PMT su 2 livelli Per ovviare alla enorme occupazione di memoria della PMT e per garantirne la paginazione, si divide in due livelli la PMT, secondo lo schema rappresentato in figura: 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 148 74 La memoria virtuale: PMT su 2 livelli La PMT di primo livello è una pagina di memoria che contiene gli indirizzi di inizio pagina delle PMT di secondo livello, le quali contengono a loro volta gli indirizzi di inizio delle pagine fisiche. L’indirizzo virtuale è diviso in tre parti, in cui, scorrendo dai bit più significativi a quelli meno significativi, abbiamo l’offset all’interno della PMT di primo livello, l’offset all’interno della PMT di secondo livello, e l’offset all’interno della pagina. Il processore mantiene all’interno di un proprio registro (RP) l’indirizzo della PMT di primo livello, a cui somma l’offset del Livello 1 per ottenere l’indirizzo all’interno della PMT di primo livello da cui leggere l’indirizzo di inizio pagina di secondo livello. Tale valore è un puntatore in memoria all’inizio della pagina di secondo livello, al quale viene aggiunto l’offset di secondo livello per determinare quale riga della PMT di secondo livello contenga l’indirizzo di inizio di pagina fisica. Per ottenere l’indirizzo fisico non dobbiamo fare altro che sommare ad esso l’offset all’interno della pagina fisica. 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 149 La memoria virtuale: PMT su 2 livelli Permette la riduzione dell’occupazione di memoria della PMT: mentre nel caso precedente avevamo che la dimensione della PMT era invariante rispetto alla memoria effettivamente utilizzata, adesso le pagine di secondo livello vengono create dinamicamente solo quando necessario. Si consideri una memoria indirizzata a 32 bit e pagine di 4 KByte. Si assuma che i campi relativi al primo livello e al secondo siano di 10 bit. In questo modo: 08/11/2007 La tabella di livello 1 è fatta da 1024 linee che riferiscono ad altrettante tabelle di secondo livello. Se una pagina di secondo livello corrisponde effettivamente ad una pagina di memoria, la pagina di secondo livello potrà contenere 1024 righe da 4 byte (l’indirizzo fisico), La tabella di primo livello allora sarà capace di gestire 1024 pagine da 4 Kbyte per un totale di 4 Mbyte di memoria. Sistemi a Microprocessore A.A. 2007-2008 150 75 La memoria virtuale: PMT su 2 livelli Con i dati utilizzati in precedenza abbiamo che per individuare l’offset all’interno di una pagina fisica sono necessari 12 bit, mentre per individuare una delle righe della PMT sono necessari 10 bit (ricordiamo che le righe per ogni pagina della PMT sono 1024, per le assunzioni fatte sulla dimensione di pagina). L’indirizzo virtuale è perciò scomponibile secondo il seguente schema: 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 151 La memoria virtuale: PMT su 2 livelli La tabella a 2 livelli consente di far fronte alla richiesta in modo adattativo: quando un programma richiede l’allocazione di memoria può essere necessario allocare tabelle di secondo livello: si alloca una pagina fisica e si inserisce il relativo descrittore nella tabella di livello 1. Nel caso in cui il programma richieda più di 4 Mbyte viene creata una seconda riga nella pagina di primo livello ed una seconda pagina di secondo livello, capace, unitamente alla prima già presente, di gestire fino ad 8 Mbyte di memoria. A regime la memoria conterrà sia le pagine di programma, sia le pagine corrispondenti alle tabelle (Alberi di Traduzione). Anche il S.O. risulterà paginabile per quei programmi e parti che non richiedono spazi di memoria fissi o non paginabili (es: vettore delle interruzioni) 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 152 76 La memoria virtuale: TLB Il TLB (Translation Lookaside Buffer) è una cache realizzata in hardware che associa ad un indirizzo di pagina virtuale una riga della PMT. Nel TAG di questa cache è contenuto l’indirizzo di pagina logica più un bit di validità, mentre nel campo DATA è contenuta una riga di PMT. Nel caso di PMT su due livelli sono memorizzate in cache soltanto le righe delle PMT di secondo livello, visto che la tabella di primo livello è considerata solo come tabella di transizione per la decodifica. 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 153 La memoria virtuale: TLB Lo schema del TLB è rappresentato di seguito: TAG contiene: il numero della pagina logica il bit di validità (V) DATO contiene: Il numero della pagina fisica I bit di protezione (PROT) e il bit M indicatore di modifica Gli indicatori devono essere allineati a quelli della PMT In caso di page fault: 1. 2. 3. 08/11/2007 La pagina viene caricata in memoria Viene costruito il relativo descrittore in PMT Si costruisce il relativo elemento in TLB Sistemi a Microprocessore A.A. 2007-2008 154 77 La memoria virtuale: TLB Nel caso in cui la pagina di memoria non venga indirizzata da lungo tempo: Il riferimento in TLB può essere utilizzato per un’altra pagina Un nuovo riferimento alla pagina precedente genera un miss in TLB e la costruzione del nuovo riferimento utilizzando direttamente i dati in PMT Le dimensioni sono inferiori alla cache interna alla CPU: Un elemento in TLB relativo a una pagina viene costruito al primo indirizzamento della pagina o come nel caso di sopra. Il principio di località suggerisce che i riferimenti successivi a quello che ha richiesta la costruzione in TLB saranno con alta probabilità all’interno della stessa pagina 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 155 La memoria virtuale: Dimensione Pagina Come dimensionare la pagina? Considerazioni: Pagine grandi agevolano il trasferimento dati dalla memoria di massa: Riduce il tempo di latenza del disco (posizionamento sul settore) Il tempo di trasferimento è quello dominante La dimensione di una PMT è direttamente proporzionale al numero di pagine: per grandi pagine occorrono pochi descrittori Æ PMT piccole Æ TLB piccole Grandi dimensioni introducono però spreco di memoria e la frammentazione interna cioè pagine non usate 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 156 78 La memoria virtuale: Dimensione Pagina Il problema della frammentazione: Esempio: La frammentazione è irrilevante se le dimensioni della memoria centrale sono alte Si consideri un processo strutturato in tre segmenti (codice, dati e stack) Mediamente l’ultima pagina per ciascun segmento risulta per metà vuota Æ 1,5 pagine sprecate per processo. Nel caso di pagine da 4 KByte, memoria di 64MB e 40 processi attivi (come quello di sopra) lo spreco totale è dato da 1,5x4x40 = 240 KB che rapportati a 64MB è pari a 0.4% di spreco Valori tipici 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 157 La memoria virtuale: Tabella delle pagine Invertita Una tabella delle pagine invertita (IPT) è caratterizzata da: Ha un numero di elementi pari al numero di pagine fisiche Ogni elemento (PTE) contiene il numero di pagina virtuale (VPN) e non quello fisico (RPN) insieme alle informazioni di protezione L’indicizzazione avviene tramite funzione hash La chiave di ricerca è VPN e la funzione hash produce un’associazione tra VPN e posizioni in IPT La funzione genera per ogni chiave k un indice h compreso tra 0 e R-1, dove R indica il numero totale di linee della tabella 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 158 79 La memoria virtuale: Tabella delle pagine Invertita 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 159 La memoria virtuale: Tabella delle pagine Invertita Si ha quindi una relazione 1:1 tra PTE e pagine fisiche Se il campo VPN del PTE in posizione x contiene il valore y, allora la pagina virtuale y è mappata sulla pagina fisica. L’hit avviene se il valore di VPN del PTE determinato dalla funzione hash è uguale al VPN in ingresso usato come chiave di ricerca. In caso contrario si ha un fault Poiché il numero di chiavi (indirizzi virtuali) è molto maggiore della dimensione di IPT, si può avere che differenti indirizzi virtuali siano indicizzati allo stesso modo (collisione): ki≠kj Æ h(ki) = h(kj) La codifica hash garantisce fornisce una complessità di ricerca O(1) rispetto alle tecniche binarie O(log n) Esistono diverse definizioni di funzioni hash e non esiste una funzione hash ideale 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 160 80 La memoria virtuale: Tabella delle pagine Invertita Gestione delle collisioni Si introducono delle liste di elementi internamente alla IPT mediante puntatori 08/11/2007 In corrispondenza di una collisione si cerca una posizione alternativa dove collocare il nuovo VPN Individuata la posizione si inserisce il riferimento (puntatore) del nuovo indice nel campo puntatore della posizione precedente Il meccanismo può iterare fino a che non si trova una posizione libera La posizione libera viene identificata utilizzando delle tecniche di scansione lineare ad esempio: [h(k)+j]modR con j=0,1,… Se non ci sono posizioni libere si prosegue con il rimpiazzamento (es. algoritmo LRU) Sistemi a Microprocessore A.A. 2007-2008 161 La memoria virtuale: Tabella delle pagine Invertita In questo caso si ha: Hit se IPT[h].VPN=VPN in caso contrario occorre seguire la catena Il miss si ha quando si raggiunge il valore NULL Æ non si è trovato alcun elemento. NULL 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 162 81 La memoria virtuale: Tabella delle pagine Invertita Algoritmo LRU per IPT Il S.O. gestisce una lista (lista LRU) per ricordare l’ordine degli accessi. In caso di page fault 08/11/2007 S.O riordina la lista in modo da tenere di conto dei riferimenti tra due page fault (il precedente e quello corrente) La lista LRU riferisce a pagine reali Sistemi a Microprocessore A.A. 2007-2008 163 La memoria virtuale: Tabella delle pagine Invertita – catene lunghe Può accadere di dover seguire una lunga catena per trovare il VPN cercato. Potenzialmente esiste il rischio che la tabella si riempia quando su una stessa posizione si mappa un numero di indirizzi virtuali pari al numero di elementi in tabella. Il problema delle catene lunghe comporta inevitabilmente una degradazione delle prestazioni, questo nonostante una soluzione con TLB La navigazione delle catene avviene se il TLB non fornisce la traduzione. 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 164 82 La memoria virtuale: Tabella delle pagine Invertita – catene lunghe Una soluzione al problema è l’utilizzo di un Hash Anchor Table (HAT) La tabella HAT (dimensioni più grandi rispetto all’IPT) consente di espandere la gamma dei valori hash 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 165 La memoria virtuale: Tabella delle pagine Invertita – catene lunghe I passi di traduzione sono: Hashing del PID e VPN per il calcolo dell’indice nella HAT Si individua l’indice della IPT da cui partire nella ricerca. Si guarda nella IPT se esiste il processo con il PID richiesto e la VPN. Se esiste, stop. (HIT) Se il PID o il VPN non corrispondono al valore in IPT (primo confronto) si prosegue nella catena di puntatori al successivo riferimento. Ancora, se esiste, stop (HIT), altrimenti si prosegue. Se non si trova un “match” valido allora si ha un MISS. “The surprising thing is that this can be reasonably efficient. If you can have a successful search in only a couple of probes on average, then fewer accesses are needed than to do a lookup in a page table that is more than a couple of levels deep.” 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 166 83 Hash Anchor Table Virtual Address VPN = 0x2AA70 Offset PID = 8 Hash 0 1 2 0x120C 0x120D 2 Hash anchor table 08/11/2007 PID 1 12 1 VPN 0x74094 0xFEA00 0x00023 Next 0x0012 --0x120D .. ...... .... 14 8 0x2409A 0x2AA70 0x0980 0x00A0 .. ..... match .... Sistemi a Microprocessore A.A. 2007-2008 167 Hashed Page Table Nella HPT le liste si costruiscono sulle righe senza usare i puntatori La dimensione di riga stabilisce la dimensione massima delle liste L’indice di hash è preso come indice di riga e la riga viene percorsa da sx a dx. Il miss avviene se nessuno dei PTE contiene il VPN In caso di hit il PTE fornisce il numero di pagina fisica. Vantaggi: Scansione più efficiente Organizzazione in uno spazio di memoria contiguo per le PTE (accesso vettorizzato) Svantaggi: L’algoritmo di rimpiazzamento utilizzato è LRU Rigida = soluzione statica 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 168 84 Hashed Page Table 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 169 La memoria virtuale: Segmentazione La paginazione offre uno spazio di indirizzamento uni-dimensionale Le pagine sono entità dissociate dalle esigenze e dalle strutture del programma (spazio di indirizzamento continuo) La segmentazione offre uno spazio di indirizzamento multidimensionale I segmenti hanno dimensione variabile sia nello spazio che nel tempo Normalmente la dimensione massima di un segmento è perlomeno un ordine di grandezza superiore alla dimensione di pagina Ogni segmento costituisce uno spazio di indirizzamento a se stante I segmenti sono entità strettamente legate alle strutture del programma Risponde ad esigenze diverse da e superiori a quelle della paginazione Separazione tra dati ed istruzioni Protezione di accesso più puntuale e specifica Ha maggiore costo di implementazione ma anche maggiore flessibilità Le dimensioni di segmento possono variare dinamicamente Separazione in segmenti codice, dati e stack Causa frammentazione esterna Può essere combinata con la paginazione Segmenti grandi possono essere paginati 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 170 85 La memoria virtuale: Segmentazione In un sistema segmentato, un indirizzo logico è composto da: Il selettore di segmento Lo scostamento all’interno del segmento La traduzione: 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 171 La memoria virtuale: Segmentazione Limiti: Nelle operazioni di I/O la dimensione di un segmento è in genere scorrelata rispetto alla dimensione dei blocchi-dati trasferiti. Pregi: Un segmento contiene codice autoreferenziale (intersegmento), cioè raramente si salta in altri segmenti, quindi la probabilità che l’esecuzione avvenga sempre nello stesso segmento è molto elevata. Di norma le applicazioni usano solo 3 segmenti: codice, dati e stack. L’impacchettamento delle funzioni in un unico segmento di codice (eseguito da un “buon” linker) riduce le operazioni di I/O relative al codice al solo caricamento del segmento La protezione è superiore alla paginazione, per il legame segmento-modulo di programma: 08/11/2007 Limitato context-switch Anche se le dimensioni sono grandi lo si legge solo una volta Facilita la condivisione di codice Sistemi a Microprocessore A.A. 2007-2008 172 86 La memoria virtuale: Segmentazione Difetti: Frammentazione esterna 08/11/2007 Poiché la dimensione dei segmenti non è costante, a seguito di allocazioni/deallocazioni si formano zone di memoria non utilizzate tra segmento e segmento, che prese singolarmente sono troppo piccole, ma sommate tra loro possono costituire un valido spazio per l’allocazione La deframmentazione o ricompattamento della memoria è una pratica sconsigliata per la complessità nella gestione e il tempo sprecato per effettuarla. Sistemi a Microprocessore A.A. 2007-2008 173 La memoria virtuale: Segmentazione 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 174 87 La memoria virtuale: segmentazione e paginazione Alcune architettura utilizzano entrambe: La segmentazione per suddividere convenientemente il programma in base alla struttura dello spazio virtuale La paginazione per garantire un’efficiente uso della memoria Si elimina la frammentazione esterna ma si ha quella interna. 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 175 La memoria virtuale: segmentazione e paginazione nel processore Intel 80386 A partire dalla cpu 80386, Intel ha introdotto la paginazione a valle della segmentazione Terminologia: Spazio lineare degli indirizzi Indirizzo lineare La memoria fisica è uno spazio di indirizzamento lineare, ad ogni byte corrisponde un indirizzo. (Con 32 bit si hanno 4GB, dal Pentium Pro in poi si hanno 36 bit con 64GB) E’ un indirizzo dello spazio lineare che identifica un byte in modo univoco in memoria fisica Indirizzo logico 08/11/2007 E’ dato da due componenti secondo la notazione SR:OFFSET, dove SR è il registro segmento e OFFSET lo scostamento intra segmento Sistemi a Microprocessore A.A. 2007-2008 176 88 La memoria virtuale: segmentazione e paginazione nel processore Intel 80386 Modo reale Modo protetto Si indirizza come l’8086 Più task contemporaneamenteÆ uso della protezione offerta dalla memoria virtuale Il registro di segmento non viene considerato come base dell’indirizzo in memoria ma come selettore di segmento La struttura della memoria virtuale del 386 e successivi è: 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 177 La memoria virtuale: 80386 Paginazione: Le pagine sono mantenute mediante PMT a due livelli La Page Directory (primo livello per il catalogo delle pagine Le Page Tables per le tabelle di secondo livello Le tabelle hanno tutte dimensione 4KByte 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 178 89 La memoria virtuale: 80386 Il registro CR3 contiene nei 20 bit più significativi l’indirizzo dell’inizio pagina della PMT di secondo livello, mentre i bit meno significativi sono posti a 0. Ogni riga (detta descrittore di pagina) delle PMT è composta da 4 byte disposti come segue, dei quali evidenziamo i bit più significativi, o che sono già stati trattati in precedenza: 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 179 La memoria virtuale: 80386 bit 0 (P): per la PMT di primo livello indica che la corrispondente PMT di secondo livello è in memoria, mentre per la PMT di secondo livello indica che la corrispondente pagina fisica è in memoria bit 5 (A): Per la PMT di primo livello indica che è stato fatto accesso ad una o più delle pagine indirizzate dalla corrispondente PMT di secondo livello sono state utilizzate. Per la PMT di secondo livello indica che si è fatto accesso ad una o più delle locazioni di memoria della pagina fisica a cui la PMT fa riferimento bit 3 (PWT): Page-level Write Through, quando asserito implica una politica di scrittura immediata in memoria per ogni scrittura della cache interna. Se negato, la logica di gestione della cache effettua scritture differite. bit 4 (PCD): Page-level Cache Disabled, se asserito rende non trasferibile nella cache interna il contenuto della pagina. Se disasserito abilita il trasferimento. bit 6 (D): Per la PMT di primo livello indica che una o più delle 1024 pagine associate alla corrispondente PMT di secondo livello è stata modificata durante la sua permanenza in memoria fisica. Per la PMT di secondo livello indica invece che una o più locazioni della corrispondente pagina fisica è stata modificata durante la sua permanenza in memoria fisica. bit 9-11 a disposizione del sistema operativo bit 12-31 indirizzo di pagina 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 180 90 La memoria virtuale: 80386 Nello schema seguente è invece rappresentata la procedura fisica per rintracciare un indirizzo fisico a partire dal corrispondente indirizzo virtuale. Si noti la presenza dei moltiplicatori per 4, la cui funzione è già stata evidenziata precedentemente. In tale schema sono indicati con esattezza anche il numero di bit coinvolti in ogni operazione e da dove provengono i bit più e meno significativi. 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 181 La memoria virtuale: Algoritmi di rimpiazzamento Una volta che tutte le pagine di memoria fisica sono state occupate, è necessario spostarne alcune su disco e rendere disponibile la memoria fisica per nuove pagine che possono essere necessarie ai programmi in esecuzione. Così come per le politiche di rimpiazzamento all’interno della cache, sono necessari algoritmi che effettuino questo procedimento tentando di ottimizzare le prestazione generali del sistema. Così come per le memorie cache gli algoritmi più diffusi sono riportati di seguito. Algoritmo RAND Algoritmo FIFO L’algoritmo FIFO rimpiazza la pagina che è da più tempo in memoria fisica. Per poter rendere effettivo tale algoritmo è necessario tenere traccia dell’ingresso delle pagine in memoria fisica. Algoritmo LRU L’algoritmo RAND rimpiazza una pagina presa casualmente fra quelle attualmente in memoria e la salva sulla memoria di massa. Tale algoritmo rimpiazza la pagina che non è stata utilizzata da più tempo. Anche in questo caso è necessario tenere traccia dell’utilizzo delle pagine che sono attualmente in memoria. Algoritmo WSR Tale algoritmo è detto di rimpiazzamento sulla base del Working Set. Il Working Set di un processo è l’insieme delle pagine che tale processo utilizza in un intervallo di tempo Dt. Il sistema operativo tiene traccia dell’evoluzione del working set di ogni processo e rimpiazza le pagine a cui non viene fatto accesso. Tale algoritmo è una sorta di LRU ottimizzato rispetto ai singoli processi in esecuzione. 08/11/2007 Sistemi a Microprocessore A.A. 2007-2008 182 91