Sistemi Operativi

Demand Paging (Paginazione su Richiesta)

E’ una delle due tecniche fondamentali usate per la gestione della Memoria Virtuale. Idea di base: portare una pagina in Memoria principale solo al momento del primo riferimento ad una locazione appartenente alla pagina stessa. Quando la CPU fa un riferimento ad una locazione in un’altra pagina, e la pagina non è in MP il Sistema Operativo deve sospendere il processo, portare la pagina in memoria e, quando possibile, far proseguire il processo. Più in dettaglio, quando manca la pagina riferita il processo viene tolto dalla CPU e messo in uno stato di “waiting for page”. Lo swapper inizia il caricamento della pagina mancante dalla Memoria Secondaria ad un frame libero della Memoria Primaria. In attesa di completare il caricamento, la CPU viene assegnata ad un altro processo. Quando la pagina è in MP, il processo corrispondente è rimesso nella coda pronti: riprenderà l’esecuzione dall’istruzione che aveva causato il problema, quando sarà scelto dallo Scheduler. Per sapere se una pagina (valida) non è però caricata in memoria si può usare un bit di validità della pagina associato ad ogni elemento della Page Table.

Se si tenta di fare riferimento ad una pagina non in MP (il suo bit di validità è a 0) viene generata una trap detta page fault che fa partire il processo di caricamento. Quando la pagina mancante è in MP, il suo bit di validità è messo a 1. Se devo caricare una pagina e la memoria principale è piena dovrò togliere delle pagine dalla MP che metterò nell’ area di swap, per poi caricare le pagine mancanti che mi interessano. L’area di swap viene infatti usata anche (e soprattutto) per ospitare temporaneamente pagine tolte dalla MP per fare spazio ad altre pagine che devono essere caricate in MP perché la loro assenza ha provocato un page fault. Ma adesso, il tempo di servizio del page fault raddoppia: salva la pagina vittima nello swap, e carica poi la nuova pagina. Tuttavia, se la pagina vittima non è stata modificata, ne abbiamo già una copia in MS, e possiamo evitare di salvarla. Un dirty bit associato ad ogni entry della PT ci dice se la pagina relativa è stata modificata, così dobbiamo salvare in MS solo le pagine vittima che hanno il dirty bit settato. Ma quale pagina scegliamo come vittima? Se una pagina vittima che è appena stata rimossa viene riferita da qualche processo si genera un page fault: la pagina deve essere ricaricata in MP, quindi abbiamo sprecato un sacco di lavoro!!! Viceversa, se scegliamo una pagina vittima che non verrà più usata da alcun processo non dovremo più preoccuparci di ricaricarla in MP. Un buon algoritmo di rimpiazzamento minimizza quindi il numero di page fault. Sorge spontanea una domanda : in un sistema multiprogrammato, come distribuiamoi frame disponibili fra i processi? Per saperne di più consulta i seguenti approfondimenti:






















































Tutto quanto riportato in questa pagina è a puro scopo informativo personale. Se non ti trovi in accordo con quanto riportato nella pagina, vuoi fare delle precisazioni, vuoi fare delle aggiunte o hai delle proposte e dei consigli da dare, puoi farlo mandando un email. Ogni indicazione è fondamentale per la continua crescita del sito.