Memoria virtuale
In questa pagina 6
In questa pagina 3
Ogni processo vede uno spazio di indirizzamento virtuale proprio, grande quanto permettono gli indirizzi (32 bit → 4 GB), anche se la memoria fisica è più piccola o è condivisa con altri processi. L'hardware (MMU, Memory Management Unit) traduce ogni indirizzo virtuale in un indirizzo fisico; le parti non presenti in memoria stanno sul disco.
È il livello della gerarchia di memoriaCaratteristiche 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à → tra memoria principale e disco, con la stessa logica della 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 → ma termini diversi: pagina (blocco), page fault (miss).
Pagine e frame
- Lo spazio virtuale è diviso in pagine di dimensione fissa (tipicamente 4 KB); la memoria fisica in frame (cornici) della stessa dimensione.
- Indirizzo virtuale = | numero di pagina virtuale | offset |; l'offset ha bit e non cambia nella traduzione.
Esempio: indirizzi virtuali di 32 bit, fisici di 30 bit (1 GB), pagine di 4 KB.
- offset: bit;
- numero di pagina virtuale: bit → pagine;
- numero di frame: bit → frame.
Tabella delle pagine
Per ogni processo una tabella delle pagine in memoria, indicizzata dal numero di pagina virtuale. Ogni voce contiene: bit di validità (pagina in memoria o no), numero di frame, bit di protezione (lettura, scrittura, esecuzione, utente/supervisore), bit di riferimento e bit sporco.
Traduzione di 0x00403A7C con pagine di 4 KB: pagina virtuale 0x00403, offset 0xA7C. Se la voce 0x00403 dice frame 0x1F2, l'indirizzo fisico è 0x1F2A7C.
Dimensione della tabella dell'esempio: voci da 4 byte = 4 MB per processo. Per questo si usano tabelle a più livelli (si allocano solo le parti usate).
Page fault
Se la voce non è valida, la MMU solleva un'eccezione e il sistema operativo:
- sceglie un frame libero, oppure una pagina da sostituire (approssimazioni di LRU con il bit di riferimento); se la pagina sostituita è sporca la scrive sul disco;
- legge la pagina dal disco (milioni di cicli: nel frattempo esegue un altro processo);
- aggiorna la tabella e fa ripartire l'istruzione che aveva causato il fault.
Poiché un fault costa milioni di cicli: pagine grandi, posizionamento completamente associativo (qualsiasi frame), scrittura sempre write-back, gestione via software.
TLB
Ogni accesso richiederebbe un accesso in più alla tabella in memoria. Il TLB (Translation Lookaside Buffer) è una piccola cache associativa delle traduzioni recenti (decine–centinaia di voci). TLB hit: traduzione in un ciclo; TLB miss: si legge la tabella e si aggiorna il TLB.
Esempio: accesso alla memoria 100 ns, TLB 1 ns, hit rate del TLB 98% (senza page fault):
contro 200 ns senza TLB.
Protezione e condivisione
- Ogni processo ha la sua tabella: non può generare indirizzi fisici di un altro processo.
- Bit di protezione per pagina; violazioni → eccezione (segmentation fault).
- Pagine condivise: due tabelle possono puntare allo stesso frame (librerie dinamiche, vedi Dal programma C all'eseguibile ARMCatena di traduzione compilatore, assemblatore, linker e loader; file oggetto, tabella dei simboli e rilocazione; collegamento statico e dinamico; organizzazione della memoria di un processo; chiamare funzioni assembly da C e viceversa, con esempio.Dal programma C all'eseguibile ARM →).
- Modificare le tabelle è un'operazione privilegiata (vedi Struttura interna della CPU e registriComponenti interni della CPU (ALU, unità di controllo, banco dei registri, bus interno); registri visibili all'utente e registri di controllo e stato; flag e parola di stato (PSW) con bit di supervisore; quanti registri conviene avere; segmentazione della memoria.Struttura interna della CPU e registri →).
Errori tipici
- Tradurre anche l'offset: cambia solo il numero di pagina.
- Confondere la dimensione della tabella delle pagine (dipende dallo spazio virtuale) con la memoria fisica.
Versione ripasso
La MMU traduce gli indirizzi virtuali di un processo in fisici; il resto sta su disco. Come la 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 → (gerarchiaCaratteristiche 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à →): pagina = blocco, page fault = miss.
Pagine e tabella
- Pagine e frame da 4 KB; indirizzo = numero di pagina, offset ( pagina, invariato). Virtuali 32 bit, fisici 30 bit: offset 12, pagina 20 bit, frame 18 bit.
- Tabella delle pagine (per processo): validità, frame, protezione, riferimento, sporco.
0x00403A7C: pagina0x00403, offset0xA7C; frame0x1F20x1F2A7C. voci da 4 B 4 MB: tabelle a più livelli.
Page fault
Voce non valida: il sistema operativo sceglie un frame libero o una pagina da sostituire (approssimazione di LRU; se sporca, su disco), legge la pagina (milioni di cicli, intanto un altro processo), aggiorna la tabella e rilancia l'istruzione. Perciò: pagine grandi, posizionamento associativo, write-back.
TLB
Cache associativa delle traduzioni recenti (TLBTranslation Lookaside Buffer). Memoria 100 ns, TLB 1 ns, hit 98%: ns, contro 200 ns senza.
Protezione per pagina (segmentation fault), pagine condivise (Dal programma C all'eseguibile ARMCatena di traduzione compilatore, assemblatore, linker e loader; file oggetto, tabella dei simboli e rilocazione; collegamento statico e dinamico; organizzazione della memoria di un processo; chiamare funzioni assembly da C e viceversa, con esempio.Dal programma C all'eseguibile ARM →), tabelle modificabili solo in modo privilegiato (Struttura interna della CPU e registriComponenti interni della CPU (ALU, unità di controllo, banco dei registri, bus interno); registri visibili all'utente e registri di controllo e stato; flag e parola di stato (PSW) con bit di supervisore; quanti registri conviene avere; segmentazione della memoria.Struttura interna della CPU e registri →).
Errori tipici: tradurre anche l'offset; la tabella dipende dallo spazio virtuale.