Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2014-15 Pietro Frasca Lezione 13 Giovedì 20-11-2014 Paginazione su richiesta • Con la tecnica della paginazione un processo deve essere caricato completamente in memoria per essere eseguito. • Come già descritto per la segmentazione su richiesta, anche per la paginazione, ricorrendo ad architetture di microprocessori più complesse, si può fare in modo che un processo possa essere eseguito caricando in memoria solo una parte del suo spazio virtuale. • Nel campo controllo dell’elemento della tabella delle pagine è inserito un bit di presenza P che indica se la pagina virtuale relativa è presente o meno in memoria. Analogamente sono usati il bit d’uso U e di modifica M. Appunti di Sistemi operativi Pietro Frasca 2 • L’elemento della tabella delle pagine dipende dall’architettura hardware. Tipicamente ha il formato come in figura: pagina fisica controllo Indice della pagina fisica se P=1 R W P U altre info M indirizzo cluster se P=0 Elemento della tabella delle pagine • Generalmente, il campo altre info non è presente nella tabella delle pagine ma è memorizzato in tabelle esterne, associate al descrittore del processo. • Il disco di sistema è formattato in blocchi logici (cluster) di dimensione pari alla dimensione delle pagine. • Quando un processo è creato, alcune pagine del suo spazio virtuale sono copiate in altrettanti cluster della swap-area (o del file di paging) e sono caricate in memoria solo poche pagine (pre-paging) o anche nessuna. Appunti di Sistemi operativi Pietro Frasca 3 • La tabella delle pagine è creata nel modo seguente: – ponendo a 1 i bit P di presenza delle pagine caricate e a 0 quelle delle pagine non caricate; – Inserendo nel campo pagina fisica l’indice della pagina fisica se P=1 o nel campo altre info l’indirizzo della pagina su swaparea (indirizzo del cluster) delle pagine non caricate (P=0). • Quando la MMU indirizza una pagina che non è caricata in memoria (bit P=0) essa genera un segnale di interruzione di page-fault (errore di pagina) che attiva una funzione del gestore della memoria che ha il compito di ricercare nella tabella delle pagine fisiche, una pagina libera in cui caricare la pagina virtuale richiesta. • Se non è disponibile memoria libera, è necessario liberare la memoria salvando sull’area swap un certo numero di pagine, appartenenti o meno al processo in esecuzione. Questa operazione prende il nome di rimpiazzamento delle pagine. Appunti di Sistemi operativi Pietro Frasca 4 Swap-area (disco) MMU pv MMU 1 off pv I 4 I P=0 off pv 5 Tabella pagine P pv 8 Tabella pagine P Memoria fisica Page-fault 2 pv pf P=0 P=1 6 pf Tabella pagine fisiche Tabella pagine fisiche 3 pf pf libera Appunti di Sistemi operativi Gestione di un page-fault Pietro Frasca pv pid P 7 5 Rimpiazzamento delle pagine • Per effettuare il rimpiazzamento di una pagina fisica di indice pf il kernel esegue i seguenti passi: 1. 2. 3. 4. 5. • • mediante un algoritmo di rimpiazzamento, ricerca nella tabella delle pagine fisiche la pf più idonea da rimpiazzare; trovata la pagina pf, recupera l’indice pv della pagina virtuale che vi è allocata e il processo Pk cui essa appartiene; seleziona l’elemento di indice pv della tabella delle pagine di Pk e ottiene l’indirizzo I del cluster su swaparea; salva la pagina fisica pf contenente la pagina virtuale pv di Pk su swap-area all’indirizzo I; aggiorna i valori dell’elemento pv della tabella delle pagine del processo Pk ponendo a 0 (reset) il bit di presenza P; aggiorna la tabella delle pagine fisiche rendendo pf libera. La copia su disco della pagina scelta non avviene se il bit di modifica è M=0. Al termine del rimpiazzamento il processo torna in esecuzione ed esegue di nuovo l’istruzione che ha generato il page-fault. Appunti di Sistemi operativi Pietro Frasca 6 Pk: processo a cui si revoca la pagina pf Tabella pagine di Pk Swap-area 2 Tabella pagine di Pk I pv pf I pv pv P=0 P=1 I P=0 4 Memoria fisica 3 Tabella pagine Fisiche 1 pf pv Tabella pagine Fisiche pf pf Pk Prima del rimpiazzamento libera 5 Dopo il rimpiazzamento Appunti di Sistemi operativi Rimpiazzamento delle pagine Pietro Frasca 7 • L’algoritmo di rimpiazzamento, deve escludere dalla selezione le pagine fisiche che sono coinvolte in un trasferimento dati. Ad esempio se una pagina fisica pf contiene la pagina virtuale pv di un processo P che ha attivato un trasferimento di dati da una periferica a un suo buffer contenuto nella propria pagina virtuale pv, tramite un canale DMA, pf non deve essere scelta. • Infatti, anche se il processo P è bloccato, il DMA trasferisce dati nel buffer e se pf viene sostituita, il DMA scriverà dati in una pagina virtuale diversa. • Per questo motivo l’elemento della tabella delle pagine fisiche contiene anche un campo di lock che se posto ad 1 significa che la corrispondente pagina fisica deve essere ignorata dall’algoritmo di rimpiazzamento. Il blocco di una pagina spesso è chiamato pinning (appuntare). • Un’altra soluzione è di gestire tutte le operazioni di I/O nei buffer del kernel e successivamente copiare il dati nelle pagine del processo utente. Appunti di Sistemi operativi Pietro Frasca 8 • I page-fault riducono le prestazioni del sistema. E’ quindi necessario minimizzare il numero di page-fault che un processo può generare durante la sua esecuzione. • Il numero di page-fault dipende da come è strutturato il programma che il processo esegue. Tanto più il programma è ben strutturato, tanto minore sarà il numero di page-fault che genererà. • Quando ci sono molti processi il numero di page-fault aumenta notevolmente. Diventa fondamentale la scelta dell’algoritmo di rimpiazzamento per evitare il fenomeno del trashing che consiste nell’attività, da parte della CPU, a trasferire continuamente pagine tra la memoria fisica e la swap-area, riducendo fortemente l’efficienza del sistema. Appunti di Sistemi operativi Pietro Frasca 9 Algoritmi di rimpiazzamento delle pagine • Un algoritmo di rimpiazzamento ottimo dovrebbe prevedere quali pagine saranno referenziate nel futuro. Abbiamo già incontrato un problema analogo discutendo l’algoritmo SJF nella schedulazione dei processi. • Gli algoritmi reali, per predire il futuro, si basano sulle informazioni relative agli accessi effettuati nell’immediato passato. • Infatti, a partire da un generico istante e per un certo intervallo di tempo, i processi generano indirizzi che sono spesso contenuti all’interno di un ristretto numero di pagine detto working set (insieme di lavoro). • Il working set varia nel tempo, ma gradualmente. Le chiamate di funzioni provocano una variazione di working set. • L’algoritmo di rimpiazzamento più semplice è il FIFO che sceglie come pagina da rimpiazzare quella che risiede da più tempo in memoria. Tuttavia è poco efficiente. Appunti di Sistemi operativi Pietro Frasca 10 • Un algoritmo molto più complesso, ma molto più efficiente in termini di page-fault, è l’LRU (Least recently Used) che sceglie come pagina da rimpiazzare quella meno recentemente utilizzata indipendentemente da quando è stata caricata. • E’ stato sperimentato che LRU è l’algoritmo che fornisce le migliori prestazioni. Tuttavia la sua realizzazione non è conveniente in quanto richiede un complesso supporto hardware e l’implementazione software produce un overhead troppo elevato. • Molti algoritmi sono approssimazioni dell’LRU. • Uno di questi è l’algoritmo second-chance (seconda scelta) chiamato anche clock algorithm. Appunti di Sistemi operativi Pietro Frasca 11 Algoritmo seconda chance • Per consentire al gestore della memoria di fare statistiche sull’uso delle pagine si utilizzano i bit U (uso) e M (modifica) associati a ciascuna pagina. Questi due bit devono essere aggiornati ogni volta che una pagina viene referenziata, è quindi fondamentale che siano modificati via hardware. • All’avvio di un processo, i due bit U e M di ogni pagina sono resettati (posti a 0). • Periodicamente, ad esempio ogni 20 ms, all’interruzione del clock, i bit U sono resettati. • Le pagine sono distinte in due classi: quelle con il bit U=1 (le più recentemente usate) e quelle con il bit U=0 (le meno recentemente usate). Si sceglie una pagina con politica FIFO, dapprima tra quelle con il bit U=0, se ci sono. Appunti di Sistemi operativi Pietro Frasca 12 • La tabella delle pagine fisiche è gestita come un array circolare (round robin). Viene tenuta aggiornata una variabile di sistema vittima, contenente l’indice della pagina fisica successiva a quella che è stata rimpiazzata per ultima. • Quando si verifica un page-fault la verifica inizia con la pagina il cui indice è contenuto nella variabile vittima. Se tale pagina ha il bit U=0 è scelta per il rimpiazzamento, altrimenti il suo bit U è resettato e si prosegue fino ad incontrare ad una pagina che ha il bit U=0. • Nella figura è mostrato il funzionamento dell’algoritmo disegnando la tabella delle pagine fisiche in forma circolare e mettendo in evidenza per ogni pagina solo il bit d’uso U. Appunti di Sistemi operativi Pietro Frasca 13 tabella delle pagine fisiche. Sono visualizzati solo i bit d’uso U Pagina 0 Pagina 7 0 1 Pagina 0 Pagina 1 Pagina 7 1 1 0 Pagina 1 0 Pagina 2 Pagina 6 Pagina 2 0 1 0 0 Pagina 5 1 Pagina 4 vittima Pagina 6 Pagina 3 Pagina 5 1 1 0 Pagina 3 Pagina 4 0 0 fine inizio Algoritmo second-chance Appunti di Sistemi operativi Pietro Frasca 14 • Per ridurre i trasferimenti tra memoria e disco, e quindi per migliorare le prestazioni dell’algoritmo, per la classificazione delle pagine si considera anche il bit di modifica M. In tal modo le classi diventano quindi 4, relativamente alle combinazione dei bit U-M: classe0: classe1: classe2: classe3: 0-0 0-1 1-0 1-1 non referenziata – non modificata non referenziata - modificata referenziata – non modificata referenziata - modificata • Rispetto alla scelta basata sul solo bit U si privilegiano le pagine con il bit di modifica M=0 in quanto non modificate e quindi non è necessario riscriverle sul disco. • La classe1, contiene pagine che sono state referenziate, M=1 ma che hanno il bit U=0 per via del reset eseguito all’interruzione del clock. Appunti di Sistemi operativi Pietro Frasca 15 • Sono molti gli algoritmi realizzati per il rimpiazzamento. • Ogni tipo di algoritmo ha molte varianti in base ai criteri di scelta delle pagine da rimpiazzare. Ad esempio, al momento del page-fault, si potrebbe scegliere di revocare una pagina fisica dal processo che ha generato il page-fault (tecnica del rimpiazzamento locale) oppure scegliere la pagina revocandola a qualsiasi processo (tecnica del rimpiazzamento globale). Il rimpiazzamento globale consente una scelta più conveniente, in quanto viene fatta su un numero maggiore di pagine. • Molti sistemi, tra cui UNIX, non consentono di saturare completamente la memoria ma conservano un certo numero di pagine fisiche di riserva. In tal modo la gestione del page-fault avviene più velocemente. D’altra parte però il paginatore, quando verifica che la memoria sta per esaurirsi, deve salvare un numero di pagine in modo da renderle di nuovo libere. Appunti di Sistemi operativi Pietro Frasca 16 • Per minimizzare il numero di page-fault, molti paginatori tengono traccia del working set di ciascun processo, in modo tale da caricarlo in memoria prima che il processo riprenda l’esecuzione. Questa tecnica è detta working set model. Appunti di Sistemi operativi Pietro Frasca 17