Gestione della memoria
Last updated
Was this helpful?
Last updated
Was this helpful?
Memoria virtuale, gestione con tabella delle pagine.
Nella figura sotto si vede la tabella della pagine con il bit V, detto bit di validità o bit di presente/assente, che indica se quella riga della tabella delle pagine è valida (V=1), oppure non è valida (V=0) perché la pagina non è in memoria. Per esempio si abbia un processo P con 8 pagine di memoria virtuale e la corrispondente tabella delle pagine. Dall'esame della tabella delle pagine si riconosce che le pagine 1,2, 3 e 5, per le quali si ha V=1, sono nella memoria, mentre la rimanenti pagine non lo sono perché il bit V vale 0.
La pagina virtuale 1 è in memoria nel frame 5, mentre un tentativo di P di accedere alla pagina virtuale 7 genera un fault di pagina, perché corrispondente bit di validità nella tabella delle pagine è 0. L'assenza della pagina in memoria causa la chiamata della routine per la gestione dell'interruzione da page fault e l'esecuzione delle seguenti azioni:
il sistema operativo mette nello stato bloccato il processo P che ha causato il fault di pagina e identifica un altro processo Q da eseguire, scegliendolo tra quelli nello stato ready.
Il sistema operativo controlla lo stato della memoria per scegliere un frame dove collocare la pagina richiesta. Se nella memoria non ci sono frame liberi, deve identificare, con un opportuno algoritmo, il frame da liberare. Per effetto della rimozione della pagina, dovrà essere aggiornata la riga nella tabella delle pagine corrispondente alla pagina liberata, mettendo a 0 il bit di validità . Il frame con la pagina da rimuovere è copiato su disco.
Il sistema operativo attiva il trasferimento dei dati da disco in memoria, per ricopiare la pagina richiesta nel frame prescelto. Attivato il trasferimento, il sistema operativo manda in esecuzione il processo Q.
Dopo aver completato il trasferimento da disco a memoria, il sistema operativo aggiorna la tabella delle pagine del processo P e lo mette in stato di ready.
Le azioni descritte per la gestione della pagina mancante sono rappresentate dal seguente diagramma di flusso.
Dopo aver scelto la pagina da rimuovere dalla memoria, è possibile migliorare l'efficienza delle operazioni di gestione della pagina mancante evitando di ricopiare su disco la pagina in memoria: a condizione, naturalmente, che la pagina in memoria non sia stata modificata dopo il caricamento. Per questa ragione, ogni riga delle tabella delle pagine contiene spesso, oltre al bit di validità , anche un bit di pagina modificata M, detto anche dirty bit, che è impostato a 0 al momento del caricamento della pagina in memoria. Il bit M è in seguito messo a 1 ogni volta che il contenuto del frame modificato.
In questo modo il sistema operativo, prima di liberare il frame, controlla il valore di M: se il valore di M è 0, allora la pagina non è mai stata modificata e lo spazio di memoria può essere sovrascritto.
L'esempio seguente descrive la trasformazione degli indirizzi virtuali in indirizzi fisici, eseguita dalla MMU usando i dati della tabella delle pagine.
Dalla tabella delle pagine si nota in particolare che:
l'indirizzo virtuale nella posizione 1492 della pagina 6 è collocato in memoria nel frame 17 con offset 1492; la pagina 6 è stata modificata perché il bit M vale 1;
la pagina 0 non è in memoria (V=0) e le successive informazioni, cioè il valore di M e il numero di frame, non hanno alcun significato;
la pagina 1 è in memoria nel frame 52 ed è stata modificata: se il sistema operativo decide di liberare il frame 52 deve ricopiare il suo contenuto su disco;
la pagina 2 è in memoria nel frame 8 e non è stata modificata: se il sistema operativo decide di liberare il frame 8 lo può sovrascrivere con il contenuto di un'altra pagina senza ricopiarne il valore su disco.
Abbiamo osservato che, con la paginazione, aumenta il tempo di accesso alla memoria, perché, con la tabella delle pagine in memoria, ogni accesso alla memoria si traduce in due accessi, e che lo spazio riservato a un processo cresce con la presenza della tabella delle pagine. Per ridurre il tempo di accesso alla memoria, la ricerca del numero di frame corrispondente a una pagina virtuale avviene ricercandolo in una speciale memoria cache, quindi molto veloce, posta nella MMU. Questa memoria detta TLB (Translation Lookaside Buffer), funziona come ogni altra memoria cache.
L'elemento di tabella delle pagine necessario è cercato nel buffer TLB: se si trova on TLB è immediatamente usato; diversamente, l'elemento è prelevato dalla tabella delle pagine posta in memoria e ricopiato nel TLB. Nel TLB, come avviene in tutte le memorie cache, non c'è l'intera tabella delle pagine, ma solo una sua parte. Per sapere se una riga della tabella è in TLB, senza scorrere l'intera tabella, l'accesso al TLB avviene in parallelo.
La figura seguente mostra un TLB con 9 elementi abbinata alla tabella delle pagine di un processo. Una richiesta di accesso alla pagina 6 provoca l’accesso parallelo alle righe del TLB. La riga che descrive la pagina 6 è in TLB quindi il frame corrispondente (17) può essere usato immediatamente per comporre l’indirizzo fisico e accedere alla memoria. Un tentativo di accedere a un indirizzo della pagina 13 non potrebbe invece essere soddisfatto. Per accedere alla pagina 13 la MMU deve acquisire le informazioni necessarie nella memoria e ricopiarle nel TLB. In tal caso, essendo il TLB completamente riempito, è necessario sovrascrivere una riga del TLB con i valori della tabella delle pagine della pagina 13.
Il seguente flowchart, che descrive la generazione dell’indirizzo fisico partendo da un indirizzo virtuale, completa il diagramma di flusso per la gestione della pagina mancante.