Obiettivi Memoria Virtuale Descrivere i vantaggi di un sistema a memoria virtuale Concetti fondamentali Paginazione su richiesta (Demand paging) Algoritmi di sostituzione delle pagine Algoritmi di allocazione dei frame Il problema del thrashing (paginazione degenere) 9.2 Silberschatz, Galvin and Gagne 2005 Memoria Virtuale > Memoria Fisica Memoria Virtuale separazione tra spazio di memoria logico (utente) e spazio di memoria fisico (sistema). Solo parte del programma deve necessariamente risiedere in memoria durante l esecuzione Lo spazio degli indirizzi logici può essere molto più grande dello spazio degli indirizzi fisici Lo spazio degli indirizzi può essere condiviso da più processi I processi possono essere gestiti in maniera più efficiente Implementazione della Memoria Virtuale: Paginazione su richiesta (Demand paging) Segmentazione su richiesta (Demand segmentation) 9.3 Silberschatz, Galvin and Gagne 2005 9.4 Silberschatz, Galvin and Gagne 2005
Spazio di indirizzamento virtuale Librerie Condivise e Memoria Virtuale 9.5 Silberschatz, Galvin and Gagne 2005 9.6 Silberschatz, Galvin and Gagne 2005 Paginazione su Richiesta Trasferimento di memoria paginata in spazio contiguo su disco Portare una pagina in memoria solo quando necessario Riduzione dell I/O Riduzione della memoria necessaria Tempi di risposta più rapidi Più processi/utenti Una pagina è necessaria - esiste un riferimento Se il riferimento è illegale abort Se non è in memoria caricamento della pagina Lazy swapper una pagina non viene mai portata in memoria se non quando è necessaria Swapper che gestisce le pagine prende il nome di pager 9.7 Silberschatz, Galvin and Gagne 2005 9.8 Silberschatz, Galvin and Gagne 2005
Bit di Validità Tabella delle pagine - alcune pagine non in memoria Ogni elemento della tabella delle pagine ha un bit di validità associato (v in-memoria, i non-in-memoria) Inizialmente ogni bit di validità è posto a i Quando un indirizzo viene tradotto, se il bit di validità di un riferimento è i page fault Frame #. page table valid-invalid bit v v v v i i i 9.9 Silberschatz, Galvin and Gagne 2005 9.10 Silberschatz, Galvin and Gagne 2005 Page Fault Page Fault (Cont.) Quando si indirizza una pagina per la prima volta (non in memoria) si genera un interruzione (trap): page fault 1. SO controlla se: Riferimento illegale abort Riferimento non in memoria 1. Sceglie un frame libero 2. Swap della pagina nel frame 3. Aggiorna le tabelle delle pagine 4. Pone il bit di validazione a v 5. Ricarica l istruzione che ha causato il page fault Ripristino dell istruzione possibili complicazioni Esempio: Istruzione che muove dati oltre il limite delle pagine block move Operazioni autoreferenziali 9.11 Silberschatz, Galvin and Gagne 2005 9.12 Silberschatz, Galvin and Gagne 2005
Schema di Gestione dei Page Fault Tempi della Paginazione su richiesta Tasso di Page Fault 0 p 1.0 if p = 0 nessun page fault if p = 1, ogni indirizzamento causa page fault Tempo Effettivo di Accesso (EAT) EAT = (1 p) x accesso in memory + p (overhead di page fault + swap page out + swap page in + overhead di ripristino ) 9.13 Silberschatz, Galvin and Gagne 2005 9.14 Silberschatz, Galvin and Gagne 2005 Esempio di Paginazione su richiesta Creazione dei Processi Tempo di accesso in Memoria = 200 nanosec. Tempo medio di servizio di page-fault = 8 msec. EAT = (1 p) x 200 + p (8 msec) = (1 p) x 200 + p x 8,000,000 = 200 + p x 7,999,800 nanosec. Se un indirizzamento ogni 1,000 causa page fault, allora EAT = 8.2 microsec. Cioè un fattore di rallentamento pari a 40 La memoria virtuale determina ulteriori vantaggi. Es.: creazione dei processi con Copy-on-Write 9.15 Silberschatz, Galvin and Gagne 2005 9.16 Silberschatz, Galvin and Gagne 2005
Copy-on-Write Prima che Proc1 Modifica Pagina C Copy-on-Write (CoW): processo padre e processo figlio condividono, inizialmente, le stesse pagine di memoria solo se uno di loro modifica una pagina condivisa, di tale pagina viene creata copia privata CoW velocizza la fase di creazione dei processi, in quanto solo le pagine modificate vengono ricopiate 9.17 Silberschatz, Galvin and Gagne 2005 9.18 Silberschatz, Galvin and Gagne 2005 Dopo che Proc1 ha modificato Pagina C Cosa succede se non ci sono frame liberi? Sostituzione delle pagine Cerca una pagina in memoria ma non in uso e copiala nell area di swap del disco (swap out) algoritmi performance l algoritmo ottimale dovrebbe minimizzare il numero di page fault Una stessa pagina può venire caricata in memoria in diversi momenti ed occupare frame differenti in istanti differenti Copy page C 9.19 Silberschatz, Galvin and Gagne 2005 9.20 Silberschatz, Galvin and Gagne 2005
Sostituzione delle Pagine Sostituzione delle Pagine 1. Trova la locazione della pagina desiderata su disco 2. Trova un frame libero: - se ne esiste uno, usalo - se tutti i frame sono occupati, usa un algoritmo di sostituzione delle pagine per selezionare il frame da liberare 3. Copia la pagina desiderata nel frame liberato; aggiorna le tabelle delle pagine e dei frame 4. Ripristina il processo per l esecuzione 9.21 Silberschatz, Galvin and Gagne 2005 9.22 Silberschatz, Galvin and Gagne 2005 Sostituzione delle Pagine Sostituzione delle Pagine Per ridurre i tempi di sostituzione, si può usare una tecnica di swap out modificato Uso di un bit di modifica (dirty bit) solo pagine modificate vengono ricopiate su disco L ottimizzazione del processo di sostituzione di pagina è un elemento fondamentale per implementare la paginazione su richiesta In virtù del criterio di sostituzione delle pagine, la memoria virtuale e fisica possono avere dimensioni anche notevolmente differenti 9.23 Silberschatz, Galvin and Gagne 2005 9.24 Silberschatz, Galvin and Gagne 2005
Algoritmi di Sostituzione Page Fault vs. numero di frame disponibili (andamento atteso) Scopo: minimizzare il tasso di page-fault Valutazione fatta considerando sequenze campione di riferimenti alle pagine (stringa dei riferimento) e calcolando il numero di page fault determinati da tale sequenza Consideriamo le stringhe dei riferimenti: Es.1: 7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1 Es.2: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 9.25 Silberschatz, Galvin and Gagne 2005 9.26 Silberschatz, Galvin and Gagne 2005 Algoritmo First-In-First-Out (FIFO) Algoritmo First-In-First-Out (FIFO) Stringa dei riferimenti: 7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1 3 frame (3 pagine possono essere in memoria contemporaneamente) 1 2 3 t Stringa dei riferimenti: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 0 3 frame (3 pagine possono essere in memoria contemporaneamente) 1 1 1 2 2 1 2 3 3 4 2 3 4 4 1 3 5 4 1 2 6 5 1 2 7 5 1 2 8 5 1 2 9 5 3 2 10 5 3 4 11 5 3 4 12 9 page fault 9.27 Silberschatz, Galvin and Gagne 2005 9.28 Silberschatz, Galvin and Gagne 2005
Algoritmo First-In-First-Out (FIFO) Algoritmo First-In-First-Out (FIFO) 1 2 3 1 2 3 4 t t Stringa dei riferimenti: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 0 0 3 frame (3 pagine possono essere in memoria contemporaneamente) 1 1 1 2 2 1 2 3 3 4 2 3 4 4 1 3 5 4 1 2 6 5 1 2 7 5 1 2 8 5 1 2 9 5 3 2 10 1 1 1 1 1 1 5 5 5 5 4 4 1 2 2 2 3 3 2 3 4 4 2 3 4 5 2 3 4 6 2 3 4 7 1 3 4 8 1 2 4 9 1 2 3 10 9 page fault 9.29 Silberschatz, Galvin and Gagne 2005 5 3 4 11 1 2 3 11 5 3 4 12 5 2 3 12 10 page fault Stringa dei riferimenti: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 3 frame (3 pagine possono essere in memoria contemporaneamente) 4 frame 1 2 3 1 2 3 Anomalia di Belady: più frame e più page fault 1 2 3 1 2 3 4 1 2 5 1 2 4 4 3 5 3 4 4 9 page fault 5 10 page fault 9.30 Silberschatz, Galvin and Gagne 2005 FIFO con Anomalia di Belady Algoritmo Ottimale Sostituisce la pagina che, tra quelle presenti in memoria, verrà usata più tardi 9.31 Silberschatz, Galvin and Gagne 2005 9.32 Silberschatz, Galvin and Gagne 2005
Algoritmo Ottimale Algoritmo Least Recently Used (LRU) Sostituisce la pagina che, tra quelle presenti in memoria, verrà usata più tardi Sostituisce la pagina che, tra quelle presenti in memoria, non ha ricevuto riferimenti da più tempo. Esempio con 4 frame 1 2 3 4 1 2 5 1 2 3 4 5 1 1 4 2 2 2 3 3 3 4 5 5 6 page fault Problema: dovremmo sapere i riferimenti futuri Performance di riferimento per il confronto degli algoritmi 9.33 Silberschatz, Galvin and Gagne 2005 9.34 Silberschatz, Galvin and Gagne 2005 Algoritmo Least Recently Used (LRU) LRU Algorithm (Cont.) 1 Stringa dei Riferimenti: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 1 2 1 2 3 1 2 3 4 1 2 3 4 1 2 3 4 1 2 5 4 1 2 5 4 Implementazione mediante contatori Un contatore per pagina; ad ogni riferimento, si copia il clock nel contatore 1 2 5 4 1 2 5 3 1 2 4 3 5 2 4 3 Implementazione mediante Stack stack dei numeri di pagina implementato mediante una lista doppiamente linkata Ad ogni riferimento di pagina già in memoria: Muovi l elemento corrispondente al top dello stack tempo di ricerca ridotto 9.35 Silberschatz, Galvin and Gagne 2005 9.36 Silberschatz, Galvin and Gagne 2005
Stack per gestire i riferimenti di pagine più recenti Approssimazioni di LRU Bit dei riferimenti Un bit, inizialmente =0, associato ad ogni pagina Quando si indirizza una pagina il bit e posto a 1 Sostituzione: una pagina con bit di riferimento a 0 (se c e ) Non si tiene conto dell ordine temporale dei riferimenti Bit dei riferimenti memorizzati ad intervalli regolari Seconda chance Bit dei riferimenti Sostituzione circolare (Clock replacement) se la pagina da sostituire (in ordine circolare) ha il bit a 1: Poni il bit a 0 Lascia la pagina in memoria Applica la stessa regola provando a sostituire la pagina che segue (nell ordine circolare) 9.37 Silberschatz, Galvin and Gagne 2005 9.38 Silberschatz, Galvin and Gagne 2005 Seconda-Chance Algoritmi con Contatore Conta il numero di rifererimenti fatti ad una pagina ad in intervalli di tempo di lunghezza prefissata Algoritmo LFU: sostituisci pagina il cui contatore presenta il minimo valore Problema: pagine con molti riferimenti in un breve intervallo di tempo, rimangono in memoria anche una volta divenute obsolete MFU Algorithm: il contrario di LFU la pagina con il valore più basso probabilmente è stata caricata da poco e sarà usata frequentemente nei prossimi indirizzamenti 9.39 Silberschatz, Galvin and Gagne 2005 9.40 Silberschatz, Galvin and Gagne 2005
Allocazione dei Frame Allocazione Statica Ogni processo ha bisogno di un numero minimo di pagine in memoria alcune istruzioni potrebbero indirizzare memoria che è a cavallo di più pagine Politiche di allocazione Allocazione statica Allocazione dinamica (o a priorità) Allocazione uniforme Es. : 100 frame e 5 processi. Ogni processo riceve 20 frame. Allocazione proporzionale in funzione della taglia dei processi s i = taglia del processo p i S = s i m = numero totale di frame a i = allocazione per p i = s i S m m = 64 s 1 =10 s 2 =127 a 1 = 10 137 64 5 a 2 = 127 64 59 137 9.41 Silberschatz, Galvin and Gagne 2005 9.42 Silberschatz, Galvin and Gagne 2005 Allocazione a Priorità Allocazione Globale o Locale Allocazione proporzionale, basata su priorità anziché taglia Se P i genera un page fault, Sostituisci uno dei suoi frame Sostituisci il frame di un processo con priorità più bassa Sostituzione Globale il frame per la sostituzione è scelto tra tutti i frame; un processo può usare un frame allocato ad un altro processo Sostituzione Locale ogni processo può operare sostituzione di pagina solo nei frame ad esso già allocati ma il sistema può anche modificare la quantità di frame allocati ad un processo dinamicamente 9.43 Silberschatz, Galvin and Gagne 2005 9.44 Silberschatz, Galvin and Gagne 2005
Thrashing (degenerazione) Thrashing (Cont.) Se un processo non ha abbastanza pagine, il tasso di page fault può diventare molto alto. Conseguenze: sottoutilizzo della CPU il SO reagisce aumentando il livello di multiprogrammazione un altro processo viene aggiunto si entra in un circolo vizioso Thrashing maggior parte del tempo speso in operazioni di swapping di pagine 9.45 Silberschatz, Galvin and Gagne 2005 9.46 Silberschatz, Galvin and Gagne 2005 Paging su richiesta e Thrashing Località: Statistiche degli Indirizzamenti Perché la paginazione su richiesta funziona? Criterio delle località I Processi migrano da una località all altra Le località di un processo possono essere sovrapposte Perché si ha trashing? Taglia totale delle località > taglia della memoria 9.47 Silberschatz, Galvin and Gagne 2005 9.48 Silberschatz, Galvin and Gagne 2005
Modello dell insieme di Lavoro Modello dell Insieme di Lavoro Δ finestra dell insieme di lavoro a numero fissato di riferimenti di pagina Es: 10,000 istruzioni WS i (t) : insieme di lavoro del processo P i al tempo t = pagine indirizzate nei precedenti Δ riferimenti Δ troppo piccolo può non contenere l intera località Δ troppo grande può contenere più località Δ = tutte le pagine usate dal processo D = Σ WS i : #totale di frame richiesti m : totale frame disponibili se D > m Thrashing Criterio: se D > m, sospendi uno dei processi 9.49 Silberschatz, Galvin and Gagne 2005 9.50 Silberschatz, Galvin and Gagne 2005 Come determinare l insieme di lavoro Schema 2: Frequenza dei Page-Fault Approssimazione mediante un timer + bit di riferimento Es.: Δ = 10,000 Il Timer genera un segnale ogni 5000 unità di tempo 2 bit associati ad ogni pagina memorizzano i precedenti bit di riferimento Ad ogni interruzione del timer i bit di riferimento delle pagine vengono copiati e azzerati Se almeno uno dei bit in memoria = 1 pagina nell insieme di lavoro E un approssimazione poco accurata Maggiore precisione: 10 bit e interruzioni frequenti (es.: ogni 1000 unità di tempo) Fissa un tasso accetabile di page-fault Se il tasso attuale è basso, il processo perde frame Se il tasso attuale è alto,al processo vengono allocati più frame 9.51 Silberschatz, Galvin and Gagne 2005 9.52 Silberschatz, Galvin and Gagne 2005
Prepaging Altre problematiche relative alla Paginazione Allocazione della Memoria Kernel Prepaging Scopo: ridurre l alto tasso di page falut che si verifica nelle prime fasi dell esecuzione di un processo Schema: carica un certo numero delle pagine che un processo necessiterà prima che ad esse venga fatto accesso Problema: se le pagine prepaginate non vengono utilizzate, la memoria e le operazioni di I/O eseguite risultano perse Se s pagine sono prepaginate e solo una frazione 0< α < 1 di esse vengono usate Page fault evitati = s * α Costo di prepaginazione = s * (1- α) (unnecessary pages)? α ~ 0 prepaginazione è deleteria 9.53 Silberschatz, Galvin and Gagne 2005 9.54 Silberschatz, Galvin and Gagne 2005 TLB Reach File Mappati in Memoria TLB Reach Quantità di memoria accessibile dalla TLB TLB Reach = (TLB Size) X (Page Size) Idealmente, l insieme di lavoro di ogni processo è nella TLB Altrimenti, alto tasso di page fault Soluzioni: Aumenta la taglia delle pagine Conseguenza: Aumenta la frammentazione interna Pagine di taglia variabile Riduce il rischio di frammentazione interna I/O con file mappati in memoria permette la gestione dei file in termini di accessi alla memoria. Un blocco del disco viene mappato ad una pagina di memoria Un file viene inizialmente letto mediante paginazione su richiesta. Una porzione del file della dimensione di una pagine viene inizialmente trasferita dal file-system in una pagina fisica. Ogni successiva istruzione di lettura/scrittura viene trattata come una operazione di accesso alla memoria. I/O semplificato Accesso alla memoria piuttosto che read()write() Promotion e demotion di pagine Più processi possono mappare lo stesso file in memoria Condivisione delle pagine 9.55 Silberschatz, Galvin and Gagne 2005 9.56 Silberschatz, Galvin and Gagne 2005
Memory Mapped Files Struttura dei programmi Int[128,128] data; Ogni riga in una pagina diversa Programma 1 for (j = 0; j <128; j++) for (i = 0; i < 128; i++) data[i,j] = 0; 128 x 128 = 16,384 page fault Programma 2 128 page fault for (i = 0; i < 128; i++) for (j = 0; j < 128; j++) data[i,j] = 0; 9.57 Silberschatz, Galvin and Gagne 2005 9.58 Silberschatz, Galvin and Gagne 2005 I/O interlock Le pagine usate per I/O devono rimanere in Memoria I/O Interlock Alcune pagine devono essere bloccate in memoria Es.: I/O Pagine usate per copiare un file da un dispositivo devono essere bloccate in modo da evitare che vengano swapped out prima della ricezione dei dati dal dispositivo I/O 9.59 Silberschatz, Galvin and Gagne 2005 9.60 Silberschatz, Galvin and Gagne 2005
Allocazione di Memoria Kernel Systema Buddy Trattata in maniera diversa dalla memoria utente Spesso allocata da uno spazio contiguo di memoria libera Il Kernel necessita di memoria per strutture dati di diverse dimensioni (spesso inferiore ad una pagina) Necessità di allocazioni contigue Allocata memoria da segmenti di taglia predefinita e in pagine di memoria contigue Memoria allocata in blocchi la cui dimensione è una potenza-di-2 Le richieste vengono arrotondate alla minima potenza di due superiore sufficiente Quando si richiede meno memoria, il blocco di memoria viene suddiviso in due buddy della potenza di 2 inferiore Si continua con le suddivisioni fino alla generazione di blocchi di taglia appropriata 9.61 Silberschatz, Galvin and Gagne 2005 9.62 Silberschatz, Galvin and Gagne 2005 Sistema Buddy Allocazione a lastre (slab allocator) Slab (lastra) : una o più pagine contigue Cache : uno o più slab Ogni cache corrisponde ad una struttura dati specifica del kernel Ogni cache contiene oggetti istanze della struttura dati Alla creazione, la cache contiene oggetti vuoti L allocazione, cambia lo stato dell oggetto ad usato Slab pieno il prossimo oggetto allocato da uno slab vuoto Nessuno slab vuoto allocazione di un nuovo slab Benefici: Nessuna frammentazione, allocazione rapida Però: all interno delle lastre alcuni oggetti potrebbero non essere utilizzati 9.63 Silberschatz, Galvin and Gagne 2005 9.64 Silberschatz, Galvin and Gagne 2005
Allocazione mediante Slab 9.65 Silberschatz, Galvin and Gagne 2005