Lezione T17 Algoritmi di sostituzione delle pagine

Lezione T17
Algoritmi di sostituzione
delle pagine
Sistemi Operativi (9 CFU), CdL Informatica, A. A. 2013/2014
Dipartimento di Scienze Fisiche, Informatiche e Matematiche
Università di Modena e Reggio Emilia
http://weblab.ing.unimo.it/people/andreolini/didattica/sistemi-operativi
1
Quote of the day
(Meditate, gente, meditate ...)
“The running time of programs in a paging
machine generally increases as the store in
which programs are constrained to run
decreases. Experiments, however, have
revealed cases in which the reverse is true: a
decrease in the size of the store is
accompanied by a decrease in running time.”
Laszlo Belady (1928-)
Ingegnere meccanico ed aeronautico
Pioniere degli algoritmi di caching
2
INTRODUZIONE
3
Il modello di sistema considerato
(Lo scenario su cui valutare gli algoritmi)
Si consideri un
caratteristiche.
sistema
con
le
seguenti
SO con demand paging e sostituzione delle pagine.
Esiste un solo tipo di page fault: il major page fault.
Tre frame rimasti liberi da allocare.
Il SO è soggetto alla sequenza di accessi alle pagine
(indirizzi semplificati)
7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1
4
Gli algoritmi considerati
(FIFO è il peggiore, come al solito)
FIFO.
Ottimale.
LRU.
Approssimazioni di LRU.
5
Criterio di valutazione
(Numero di page fault)
Il criterio di valutazione è il numero di page
fault.
Tanto è minore il numero di page fault, tanto più
efficace è l'algoritmo.
6
ALGORITMO FIFO
7
First In, First Out
(La pagina vittima è quella presente in memoria da più tempo)
Funzionamento:
Ad ogni pagina si associa l'istante temporale
(timestamp) di caricamento in memoria.
Non è necessario calcolare esplicitamente il
timestamp; si può costruire una coda FIFO con I
puntatori alle strutture delle pagine inserite in
memoria.
La pagina vittima è quella presente in memoria
centrale da più tempo (o in testa alla coda).
Quando una pagina è acceduta, viene inserita in
fondo alla coda.
8
T17-simulazione-FIFO_luc.pdf
FIFO: vantaggi
(Perché implementare ed usare FIFO)
È un algoritmo semplice da implementare.
Il più semplice.
È eseguibile su piattaforme hardware non dotate
di clock hardware.
9
FIFO: svantaggi
(Perché NON implementare e NON usare FIFO)
Le prestazioni sono pessime se la memoria è
acceduta “ciclicamente” con frequenza minore
rispetto a quella di rimpiazzo.
L'algoritmo FIFO soffre di una particolare
anomalia, detta anomalia di Belady.
10
Anomalia di Belady
(La frequenza di page fault aumenta con il numero di frame liberi)
Anomalia di Belady: la frequenza di page fault
può aumentare con il numero di frame disponibili
al SO.
Fenomeno scoperto nel 1969 da un ricercatore
ungherese, Laszlo Belady.
Risultato controintuitivo: se si ha più memoria
libera, ci si aspetta di ridurre i page fault!
11
Un esperimento
(Che mostra l'anomalia in azione)
Si consideri la sequenza di riferimenti:
1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5
Tale sequenza presenza un pattern di accesso
ciclico ad 1, 2, 3 e 4, opportunamente distanziato.
Si calcola il numero di page fault (sostituzioni)
ottenuti dando in pasto la sequenza di riferimenti
a FIFO con 1, 2, 3, 4, … frame liberi.
T17-simulazione-Belady.odp
12
Visualizzazione dell'anomalia
(Salta subito agli occhi)
Si grafica il numero di page fault ottenuti in
ciascun esperimento, in funzione del numero di
frame liberi.
Si dovrebbe vedere una zona per cui il grafico è
crescente.
13
Frequenza page fault vs. frame liberi
(Eccolo, il grafico)
Numero di 12
page fault 11
All'aumentare del
numero di frame
liberi, il numero
di page fault
aumenta!
10
9
8
7
6
5
4
3
2
Numero di
frame liberi
1
14
1
2
3
4
5
6
7
Perché si verifica l'anomalia?
(Accesso ciclico distanziato + FIFO senza memoria = page fault continui)
Un processo richiede consecutivamente un insieme di
pagine in maniera ciclica.
L'insieme delle pagine richieste ciclicamente ha una
dimensione uguale o maggiore del numero di frame fisici
liberi.
Le sequenze cicliche sono distanziate in modo tale che
FIFO “perda memoria” delle pagine accedute in
precedenza.
→ Può capitare che FIFO stronchi di continuo le
pagine accedute al passo successivo.
→ Con il numero di frame può aumentare anche 15il
numero di sostituzioni (page fault).
ALGORITMO OTTIMALE
16
OPT
(La pagina vittima è quella che sarà acceduta nel futuro più lontano)
Funzionamento:
La pagina vittima è quella che non sarà acceduta per il
più lungo periodo di tempo nel futuro.
T17-simulazione-OPT.pdf
17
OPT: vantaggi
(Perché implementare ed usare OPT)
L'algoritmo OPT minimizza il numero di page fault
in ogni scenario.
L'algoritmo OPT elimina l'anomalia di Belady.
18
OPT: svantaggi
(Perché NON implementare e NON usare OPT)
L'algoritmo OPT è impossibile da implementare! Il
kernel non è in grado di prevedere il futuro.
Si confronti quanto detto per SJF.
→ L'algoritmo OPT è utile come pietra di paragone
per gli altri algoritmi.
Più ci si allontana da OPT in termini di page fault, più
l'algoritmo è peggiore.
19
Perché minimizza i page fault?
(Si mantengono le pagine con probabilità di accesso più elevata possibile)
Si elimina la pagina meno utilizzata nel futuro.
→ Le pagine rimanenti hanno la probabilità più
alta di essere accedute.
→ Si massimizza la probabilità di trovare una
pagina in memoria centrale.
→ Si minimizza la probabilità di avere un page
fault.
→ Si minimizza il numero di page fault.
20
Perché non ha l'anomalia di Belady?
(Perché vede nel futuro)
Le pagine accedute ciclicamente non hanno la
probabilità di accesso più bassa (altrimenti, non
sarebbero accedute ciclicamente).
L'algoritmo ottimale “vede nel futuro” e, una volta
portatele in memoria centrale, non le seleziona
più come vittime.
21
Cosa succede aggiungendo frame?
(La frequenza di page fault non può aumentare)
Si supponga di aggiungere frame liberi al SO.
Il SO è in grado di tenere stabilmente in memoria
centrale più pagine accedute ciclicamente.
→ Queste non provocano più page fault di quanti ne
venivano provocati con meno pagine.
Le altre pagine accedute meno frequentemente
tendono a non essere rimosse più dalla memoria.
→ Queste non provocano più page fault di quanti ne
venivano provocati con meno pagine.
22
Una approssimazione di OPT
(Si trasla all'indietro il tempo, virtualmente)
La differenza fondamentale fra FIFO e OPT è la
seguente.
L'algoritmo FIFO guarda all'istante in cui la pagina è
stata caricata in memoria centrale.
L'algoritmo ottimale guarda all'istante in cui la
pagina verrà usata.
Si può tentare il seguente
concettuale; sostituire la frase:
esperimento
“non verrà usata per il periodo più lungo”
con la frase
“è stata usata di meno nel passato recente”.
23
Perché dovrebbe funzionare?
(Per via del principio di località degli accessi)
Il processo che esegue un programma ben scritto
segue il principio di località spazio-temporale.
Il codice appena acceduto ha elevata probabilità di
essere acceduto nuovamente nell'immediato futuro.
Il codice spazialmente vicino a quello appena
acceduto ha elevata probabilità di essere acceduto.
In tali condizioni, il processo tenderà a
comportarsi, nel futuro, come si è comportato nel
passato.
Programma ben scritto: un programma il cui
24
flusso è sequenziale a grandi tratti.
ALGORITMO LRU
25
Least Recently Used
(La pagina vittima è quella acceduta di meno nel passato)
Funzionamento:
Si associa a ciascuna pagina l'istante in cui è stata
acceduta per l'ultima volta.
La pagina vittima è quella acceduta di meno negli
ultimi k accessi di memoria.
T17-simulazione-LRU_luc.pdf
26
LRU: vantaggi
(Perché implementare ed usare LRU)
L'algoritmo LRU è nettamente migliore di FIFO.
L'algoritmo LRU non è così distante da OPT.
L'algoritmo LRU elimina l'anomalia di Belady.
27
LRU: svantaggi
(Perché NON implementare e NON usare LRU)
L'algoritmo LRU può sostituire pagine inattive da
tempo in procinto di essere accedute
nuovamente.
L'algoritmo LRU richiede un supporto hardware
per la marcatura efficiente dell'ultimo istante di
uso delle pagine.
28
Supporto hw per LRU: contatori d'uso
(La CPU scandisce un “tempo virtuale”)
Si introduce nell'elemento della tabella delle
pagine un campo, detto “istante d'uso”.
Si aggiunge alla CPU un registro contatore che si
incrementa di uno ad ogni riferimento alla
memoria.
Ad ogni riferimento di pagina si copia il valore del
registro contatore nel campo “istante d'uso”.
29
Contatori d'uso: vantaggi e svantaggi
(LRU è facile da implementare, ma inefficiente)
Vantaggi.
LRU si traduce in una semplice scansione della tabella
delle pagine, alla ricerca dell'elemento con l'istante
d'uso più piccolo.
Svantaggi.
Si richiede una scansione lineare della tabella.
Si richiede una scrittura in memoria per ogni accesso.
È necessario gestire gli overflow del contatore.
30
Supporto hw per LRU: stack
(In cima → pagina più recente, in coda → pagina meno recente)
Si introduce nella CPU una implementazione
microprogrammata di uno stack di lunghezza
finita.
Gli elementi dello stack sono numeri di pagina.
Ad ogni riferimento di pagina si estrae (se esiste) il
numero di pagina dallo stack e si piazza in cima.
31
Funzionamento dello stack
(Prima e dopo l'accesso ad una pagina)
Sequenza di accessi
4 7 0 7 1
0
1
2
1
2
7
a
2
7
1
2
0
1
7
0
4
4
Stack
prima di a
Stack
dopo b
1
2
b
32
Stack: vantaggi e svantaggi
(Si trova subito la pagina LRU, ma a che costo!)
Vantaggi.
L'individuazione della pagina meno recente è molto
efficiente (coda dello stack).
Svantaggi.
È possibile l'estrazione in mezzo allo stack → serve
una lista collegata di elementi, con puntatori speciali
alla cima ed alla coda.
33
Algoritmi basati su stack
(Eliminano l'anomalia di Belady)
Gli algoritmi OPT e LRU non soffrono
dell'anomalia di Belady. È un caso? No!
Entrambi gli algoritmi fanno parte di una classe
più ampia di algoritmi di sostituzione (stack
algorithm) che non subiscono mai l'anomalia di
Belady. Uno stack algorithm gode della seguente
proprietà.
Se S(n)=insieme delle pagine mantenute in
memoria con n frame, allora S(n) ⊆ S(n+1).
34
APPROSSIMAZIONI DI LRU
35
Uso di un bit di riferimento
(Ciò che veramente fornisce l'hardware odierno)
Quasi nessuna architettura hardware fornisce I
registri contatore/clock o uno stack per la
gestione efficiente dell'ordinamento temporale in
LRU.
Per evitare l'uso di FIFO, si usa un bit di
riferimento.
Bit presente nell'elemento della tabella delle pagine.
Bit impostato ad 1 dall'hardware ogniqualvolta la
pagina corrispondente viene acceduta.
Inizialmente, tutti i bit di riferimento sono
36
azzerati.
Le limitazioni di un singolo bit
(Un bit è poco)
Con un solo bit di riferimento:
si possono distinguere le pagine accedute da quelle
non accedute.
non si riesce a ricostruire l'ordine temporale di accesso
alle pagine.
→ Servono più bit di riferimento.
37
Uso di più bit di riferimento
(Più bit consentono di ricostruire la storia degli accessi)
IDEA: si registrano più bit di riferimento ad
intervalli regolari.
Ad esempio, ciascun elemento della tabella delle
pagine contiene un byte di riferimento,
segnaposto per 8 bit di riferimento.
Storia dell'uso della pagina negli ultimi 8 intervalli di
campionamento.
00000000: la pagina non è stata acceduta negli ultimi
8 intervalli di campionamento.
11111111: la pagina è stata acceduta in ciascuno degli
38
ultimi 8 intervalli di campionamento.
Aggiornamento dei bit
(Ad ogni interruzione di clock)
Ad intervalli di campionamento regolari (ad
esempio, ogni 100ms), il clock di sistema genera
una interruzione.
La relativa Interrupt Service Routine invoca, fra le
altre, una routine di aggiornamento dei bit di
riferimento.
Shift del byte di riferimento di 1 bit verso il Least
Significant Bit.
Inserimento del valore del bit di riferimento nel Most
Significant Bit.
39
Approssimazione di LRU
(Con otto bit di riferimento)
Prima della routine di aggiornamento
LSB
0
MSB
1
0
0
1
1
0
0
Tabella
delle pagine
1
8 intervalli fa
adesso
Bit di riferimento
della pagina
...
Dopo la routine di aggiornamento
LSB
1
MSB
0
0
1
1
0
0
1
shift
8 intervalli fa
adesso
40
Considerazioni 1/2
(Per semplificarsi la vita)
I byte di riferimento possono essere interpretati
come numeri interi unsigned. In tal caso, la
pagina acceduta meno recentemente (LRU) è
quella avente il valore del byte di riferimento più
piccolo.
Non è assolutamente garantita l'unicità dei valori
dei byte di riferimento. Ad un dato istante,
possono esistere più pagine accedute meno
recentemente.
Possono essere rimpiazzate tutte.
Se ne può scegliere una con il criterio FIFO.
41
Considerazioni 2/2
(Per semplificarsi la vita)
Solitamente, il numero di bit di riferimento è pari
alla
lunghezza
della
parola
definita
dall'architettura.
In tal modo, le operazioni di shift e di inserimento
sono velocissime.
Si può anche decidere di non usare alcun
contenitore di bit di riferimento!
Si fa uso del solo bit di riferimento.
Algoritmo second chance.
42
Second Chance (Clock)
(La pagina vittima è quella presente in memoria da più tempo e non riferita)
Variante dell'algoritmo FIFO.
Funzionamento:
Si sceglie la pagina presente in memoria centrale da
più tempo, come in FIFO.
Si controlla il bit di riferimento di tale pagina.
Bit = 0: si sostituisce la pagina.
Bit = 1:
si azzera il bit di riferimento della pagina e si
aggiorna il suo istante di arrivo a quello attuale.
si passa alla pagina successiva in ordine FIFO.
43
Motivazione dell'algoritmo
(Perché si dà una seconda chance alla pagina)
Se ad una pagina è data una “seconda chance”,
essa non sarà sostituita:
fino a quando tutte le altre pagine non siano state
sostituite.
oppure fino a quando tutte le altre pagine non
abbiano avuto la loro seconda chance.
→ Se una pagina è acceduta ciclicamente con
frequenza sufficientemente elevata, ottiene
sempre una seconda chance e non viene mai
sostituita.
44
Implementazione tramite lista circolare
(Implementazione efficiente)
Si usa una coda circolare di pagine, detta clock.
Un puntatore indica la prossima pagina candidata
vittima.
Quando occorre liberare un frame fisico:
il puntatore scorre la coda fino a quando non trova
una pagina con il bit impostato a 0.
durante l'avanzamento del puntatore, tutti i bit di
riferimento vengono reimpostati a 0.
La pagina con il bit impostato a 0 è la vittima; essa
viene rimossa e sostituita dalla nuova pagina
45
Funzionamento della lista circolare
(Scelta della vittima)
bit di
riferimento
prossima
vittima
bit di
riferimento
pagine
0
0
0
0
1
0
1
0
0
vittima
pagine
0
1
1
1
1
46
Second Chance: vantaggi e svantaggi
(Second Chance è efficiente, tranne in un caso in cui degenera in FIFO)
Vantaggi.
L'implementazione è efficiente.
Svantaggi.
Nel caso peggiore (tutti i bit impostati ad 1), viene
scandita l'intera coda, dando ad ogni pagina una
seconda chance. Second chance degenera in FIFO.
47
Second Chance migliorato
(La vittima è quella in memoria da più tempo, non riferita e non modificata)
Si considera la coppia ordinata di bit seguente.
(bit di riferimento, bit di modifica)
(0,0): pagina né recentemente usata né recentemente
modificata; la migliore candidata alla sostituzione.
(0,1): pagina non usata recentemente, ma modificata; non è
una buona candidata perché prima andrebbe sincronizzata
su disco.
(1,0): pagina usata recentemente ma non modificata; non è
una buona candidata perché sarà usata presto,
probabilmente.
(1,1): pagina usata e modificata recentemente; pessima
candidata, perché sarà utilizzata nel prossimo futuro e dovrà
48
essere scritta su swap.
Algoritmi basati su contatore: LFU
(La pagina vittima è quella con il conteggio di riferimento più basso)
Algoritmo Least Frequently Used (LFU).
Si sostituisce la pagina con il conteggio di riferimento
più basso.
Vantaggi.
Si sostituisce una pagina poco utilizzata e si lasciano
in memoria quelle usate.
Svantaggi.
Se una pagina è usata molto all'inizio e poi non
più, rimane in memoria.
Esempio: codice di inizializzazione.
49
Algoritmi basati su contatore: MFU
(La pagina vittima è quella con il conteggio di riferimento più alto)
Algoritmo Most Frequently Used (MFU).
Si sostituisce la pagina con il conteggio di riferimento
più alto.
Vantaggi.
Si lasciano in memoria le pagine con il contatore più
basso, ossia quelle presumibilmente appena inserite e,
di conseguenza, ancora non usate.
Svantaggi.
Si rischia la sostituzione di una pagina usata spesso.
50