La memoria virtuale
La memoria e’ di solito gestita mediante tecniche di allocazione non contigua:
Motivazione principale : Riduzione della frammentazione
Ci sono altri vantaggi ad usare tecniche di allocazione non contigua?
Altri processi non possono utilizzare la memoria Soluzione: Tenere in memoria centrale solo la pagine correntemente in esecuzione di ogni processo, mentre le altre possono risiedere in memoria di massa
La memoria virtuale e’ lo spazio di indirizzamento effettivamente utilizzabile dall’utente
Lo spazio logico degli indirizzi e’ più grande dello spazio fisico
Un maggior numero di processi puo’ concorrere all’uso della CPU
Un bit di validità viene associato a ciascun elemento della tabella delle pagine
(1 ⇒ in memoria, 0 ⇒ non in memoria).
Se la pagina referenziata non e’ in memoria viene mandata una interruzione al SO che consulta la tabella delle pagine per decidere se si tratta di…
Si accede alla pagina sul disco.
Si sposta la pagina in un frame libero
Si aggiorna la tabella (bit di validità = 1).
Viene riavviata l’istruzione che era stata interrotta.
Non sempre e’ presente in memoria un frame libero
Se esiste un frame libero, viene utilizzato.
Altrimenti viene utilizzato un algoritmo di sostituzione per selezionare un frame vittima.
La pagina vittima viene scritta sul disco e la pagina richiesta viene letta nel frame appena liberato;
Modifica delle tabelle delle pagine e dei frame.
Riavvio del processo utente.
C.1 La pagina vittima viene scritta sul disco
C.2 il bit di validita’ della pagina vittima viene posto = 0
C.3 la pagina richiesta viene letta nel frame appena liberato
C.4 il bit di validita’ della pagina richiesta viene posto = 1
porta una pagina in memoria solo quando è richiesta:
Vantaggi:
Svantaggi
Page Fault Rate: 0 ≤ p ≤ 1.0 e’ la percentuale dei page fault sul numero totale dei riferimenti
se p = 0 non si hanno page fault;
se p = 1, ciascun riferimento è un fault.
Tempo medio di accesso (EAT):
Tempo di accesso alla memoria = 1 μ sec
Tempo di page fault = 10 msec = 10000 μ sec
p=0.5 (il 50% dei riferimenti produce un page fault)
EAT = 0.5 x 1 + 0.5 x 10000 ~ 5000 (in μ sec)
Se un accesso su 1000 causa un p.f. (p=0.001),
EAT = 0.999 x 1 + 0.001 x 10000 ~ 11 μ sec ⇒ l’accesso in memoria viene rallentato di un fattore 11.
Se si desidera un rallentamento inferiore al 10%:
EAT = (1-p) x 1 + p x 10000 < 1.1 μ sec ⇒
9999p < 0.1 ⇒ p < 0.00001…
può essere permesso al piu’
un page fault ogni 100000 accessi in memoria.
IDEA: Se una pagina selezionata come vittima non e’ stata modificata, si puo’ semplicemente riscriverci sopra, evitando lo swap-out e “dimezzando” l’I/O
L’informazione sull’eventuale modifica di una pagina e’ conservata in un bit associato alla pagina (dirty bit)
Al momento dell’avvicendamento della pagina, il S.O. esamina il dirty bit e decide se salvare la pagina vittima sul disco
Per aumentare la probabilita’ che il dirty bit = 0 al momento della sostituzione, il S.O. periodicamente
Il S.O. cerca di prevedere quali pagine saranno richieste dal processo in esecuzione e le carica prima di quando vengono effettivamente richieste
Vantaggi
Svantaggi
ESEMPIO: Linux
In caso di page fault, carica in memoria non solo la pagina mancante ma anche un piccolo gruppo di pagine adiacenti dello stesso processo
Idea alla base di tale scelta: se viene referenziata una pagina, probabilmente in un prossimo futuro serviranno anche quelle adiacenti (principio della localita’ spaziale)
Il modulo del S.O. Incaricato dell’avvicendamento delle pagine e’ chiamato PAGINATORE
Esistono molti algoritmi alla base dei paginatori con l’obiettivo comune di minimizzare la frequenza di page fault.
Obiettivo: Favorire i processi che esibiscono il principio di localita’
Esempio di riferimenti in memoria di un programma in esecuzione
Localita’ spaziale (pagine vicine allo stesso istante)
Localita’ temporale (stesse pagine per un intervallo di tempo)
1. Storia ed evoluzione dei sistemi operativi
2. Struttura dei sistemi operativi
3. Interazione tra hardware e sistemi operativi
4. La rappresentazione dei processi
6. I Thread
7. Lo scheduling dei processi: introduzione e primi esempi
9. La sincronizzazione dei processi
10. I semafori
11. Allocazione contigua dei processi in memoria centrale
12. Allocazione non contigua dei processi in memoria centrale
14. Gli algoritmi di avvicendamento delle pagine
16. I sistemi RAID
17. L'organizzazione logica dei file system
18. L'organizzazione fisica dei file system
1. Storia ed evoluzione dei sistemi operativi
2. Struttura dei sistemi operativi
3. Interazione tra hardware e sistemi operativi
4. La rappresentazione dei processi
6. I Thread
7. Lo scheduling dei processi: introduzione e primi esempi
9. La sincronizzazione dei processi
10. I semafori
11. Allocazione contigua dei processi in memoria centrale
12. Allocazione non contigua dei processi in memoria centrale
16. I sistemi RAID
17. L'organizzazione logica dei file system
18. L'organizzazione fisica dei file system
I podcast del corso sono disponibili anche su iTunesU e tramite Feed RSS.