Gestione della Memoria
1. Introduzione alla gestione della memoria
2. Swapping
3. Memoria virtuale
4. Implementazione
5. Algoritmi di sostituzione
1
Gestione della memoria
• Tutti i programmi che compongono il SO ed
i programmi applicativi attivi usano
contemporaneamente la RAM
• Il gestore della memoria si preoccupa di
fare condividere la RAM ai vari processi in
esecuzione in modo che :
– ogni processo abbia il suo spazio privato
distinto dagli altri (e inaccessibile agli altri)
– ogni processo abbia abbastanza memoria per
eseguire il proprio algoritmo e raccogliere i
suoi dati
2
Gestione della memoria (2)
• Le strategie viste finora
– ricopiano interamente lo spazio di
indirizzamento di un processo P da memoria
secondaria a RAM quando P va in esecuzione
AmpiezzaRAM - 1
RAM vuota
Spazio Ind processo 2
Spazio Ind processo 1
Sistema Operativo
0
Area riservata, non accessibile
in modalità utente
3
Gestione della memoria (3)
• Problemi:
– limite all’ampiezza dello SI
• Attualmente ogni processo usa almeno 4GB di spazio di
indirizzamento, con RAM assai più piccole…
– memoria sottoutilizzata
• aree dello spazio di indirizzamento che non sono
utilizzate occupano RAM (es. gap fra heap e stack)
• Soluzione: memoria virtuale
– ad ogni istante carico in RAM solo le parti di SI
che servono per una certa fase dell’esecuzione
– diverse soluzioni: vedremo la paginazione
4
Paginazione: idea base (1)
• Lo spazio di indirizzamento di ogni
processo è diviso in ‘fette’ (pagine logiche)
tutte della stessa ampiezza
0
1
2
3
4
..
Processo 1
0
1
2
3
4
..
Pagina Logica: ‘fetta’ dello spazio
di indirizzamento (1-4K)
Processo 2
0
1
2
3
4
..
Processo 3
5
Paginazione: idea base (2)
– Anche la RAM disponibile per i processi utente
è divisa in pagine della stessa ampiezza (pagine
fisiche)
Pagina Fisica: ‘fetta’ dello RAM
stessa ampiezza della pagina logica
RAM vuota
RAM vuota
RAM
RAM vuota
vuota
Sistema Operativo
6
Paginazione: idea base (3)
– Ad ogni istante solo le pagine necessarie per i
processi in esecuzione sono caricate in RAM (si
usa la località!)
0
1
2
3
4
..
0
1
2
3
4
..
RAM vuota
Processo 1
RAM vuota
Processo 2
0
1
2
3
4
..
Processo 3
Sistema Operativo
7
Paginazione: problema
• Esecuzione (corretta) dei programmi utente
parzialmente caricati:
– tradurre correttamente l’indirizzo logico X (relativo
allo spazio di indirizzamento) nell’indirizzo fisico Y
(parola di RAM) in cui è caricato
– bloccare automaticamente accessi ad aree non
caricate in RAM (page fault)
– aggiornare automaticamente l’insieme delle pagine
in memoria
• scaricando/caricando da memoria secondaria quelle
necessarie in una certa fase
8
Traduzione indirizzi
• Vogliamo tradurre X (ind.
Logico) in Y (ind fisico)
...
...
66
Y
65
3
64
2
X
63
1
62
0
SI
61
RAM
...
9
Traduzione indirizzi (2)
• Osservate che
X = #pagLogica * s + offset
– s ampiezza della pagina (logica e fisica)
– offset indirizzo dentro la pagina (fra 0 ed s-1)
• quindi
Y= f(#pagLogica) *s + offset
– f() funzione che associa ad ogni pagina logica il
numero di pagina fisica in cui è caricata
– NB f() è definita solo per le pagine caricate
10
Traduzione indirizzi (3)
• X= 1*s + offset
• Y= f(1) *s + offset
...
66
Y
Ampiezza di pagina (s)
65
offset
64
f
63
X
1
SI
offset
62
61
RAM
...
11
Traduzione indirizzi (4)
• La traduzione degli indirizzi deve essere
veloce!
– Va fatta ad ogni accesso in memoria
• Come si calcolano #pagLogica e offset ?
– Sono quoziente e resto della divisione per s
– in generale la divisione è molto costosa!
– È semplice se s=2k perché stiamo lavorando
con indirizzi binari
31
k
quoziente
0
k-1
resto
12
Traduzione indirizzi (5)
• Quindi il calcolo è veloce
– es. pagine di 4KB= 212B basta selezionare (hw) i
primi 12 bit per offset ed il resto per #pagLogica
• Come si calcola la funzione di corrispondenza
f() ?
– Serve una tabella (la tabella delle pagine, TP)
– TP[#pagLogica] è il descrittore di pagina e
contiene
• il numero di pagina fisica corrispondente
• bit Presente-Assente (se la pagina è in memoria o no)
• altro
13
Traduzione indirizzi (6)
• Cosa succede se la pagina non è in memoria?
– Presente-Assente = 0, si genera un page fault
– l’esecuzione del processo viene bloccata
– va in esecuzione il gestore della memoria
– la pagina logica viene localizzata su disco e caricata
in RAM
– se la RAM è piena si individua una pagina vittima
da scaricare dalla RAM
– algoritmi di rimpiazzamento : servono a selezionare
la pagina vittima
14
La Memory Management Unit
Organizzazione tipica dell’hw: posizione e
funzione della MMU
15
La MMU (2)
Operazioni
di una MMU
con 16
pagine di
4KB
16
Tabella delle Pagine
• Informazioni contenute in un descrittore di
pagina
– il formato dipende dall’hw
– NON ci sono informazioni su dove trovare la pagina
su disco (dipende dal SO)
17
Traduzione indirizzi (6)
• L’accesso alla tabella delle pagine deve essere
veloce
– non può stare solo in RAM
• se no duplica il tempo di accesso
– non può stare tutta in MMU
• prenderebbe troppo spazio
• indirizzi a 32 bit e pagine di 4K, la size(TP)=220 record
• non tutti i descrittori servono contemporaneamente
– si usa una piccola cache dei descrittori in MMU
• TLB (Translation Lookaside Buffer) o memoria associativa
• tutta la tabella è in RAM
18
TLB - Translation Lookaside Buffer o
Memoria Associativa
Esempio di TLB
19
Tabella delle Pagine a due livelli
Second-level page tables
Top-level
page table
PT1
PT2
offset
10
10
12
Descrittori
di pagina
20
Tabella delle Pagine a due livelli (2)
Second-level page tables
Top-level
page table
0
5
offset
10
10
12
21
Tabella delle Pagine Inversa
Confronto tra tabella delle pagine tradizionale e tabella delle
pagine inversa
22
Implementazione della Paginazione
Il Sistema operativo invoca i meccanismi di paginazione in
quattro circostanze:
1.
Creazione di un Processo


Determina la dimensione dello spazio di indirizzamento
Crea la tabella delle pagine
Esecuzione di un Processo (context switch)
2.


Reset della MMU per il nuovo processo
Aggiornamento del TLB (flush)
Page fault
3.


Determina l’indirizzo logico che ha causato il page fault
Sposta una pagina su disco (se necessario) e carica la pagina
richiesta
Terminazione di un Processo
4.

Dealloca la tabella delle pagine e le pagine del processo
23
Gestione del Page Fault (1)
1. Una eccezione provoca l’invocazione del nucleo, salvando
almeno il PC sullo stack (hw)
2. Salvataggio registri generali e altri reg. interni (assembler)
3. Il sistema determina la pagina logica richiesta
1.
registro speciale o software
4. Il sistema verifica la validità dell’indirizzo, e ricerca una
pagina libera o, in alternativa, una pagina vittima
5. Se la pagina vittima selezionata è stata modificata (dirty),
viene scritta su disco
24
Gestione del Page Fault (2)
6. Il sistema richiede la lettura della pagina logica dal disco
6.
(schedulatore) va in esecuzione un altro processo pronto
7. Quando la lettura è completata (interruzione), si aggiorna
la tabella delle pagine
8. Viene ripristinata l’istruzione che ha causato il page fault
9. Il processo che ha causato il page fault viene schedulato
10. Ripristino dei registri, ritorno in modo utente
(assembler)

Il processo riprende l’elaborazione come se il page fault non
fosse avvenuto
25
Ripristino dell’Istruzione
#
• Il fault si può verificare in una dei tre accessi
• Problemi se l’istruzione modifica i registri
– autoincremento, autodecremento
• Alcune macchine hanno dei registri interni che
mantengono infomazioni di ripristino (backup)
26
Vincolare le pagine in Memoria
• Memoria virtuale e I/O interagiscono occasionalmente
• Un processo richiede una lettura da un dispositivo su un
buffer
– Mentre attende per l’I/O passa in esecuzione un altro processo
– Il processo in esecuzione causa un page fault
– La pagina contenente il buffer del primo processo può essere
selezionata per essere scaricata dalla memoria
• Necessità di vincolare alcune pagine
– Le pagine vincolate non possono essere scaricate dalla memoria
(pinning)
27
Backing Store: area di swap
Process
address
space
(a) Paginazione con un’area di swap statica
– indirizzo iniziale su disco in TP
(b) Paginazione con area di swap dinamica
28
Algoritmi di Sostituzione
• Il page fault forza la scelta su quale pagina deve
essere rimossa
– Libera memoria per la pagina da caricare
• Pagine modificate devono essere salvate
– Quelle non modificate vengono semplicemente
sovrascritte
• Deve evitare di selezionare una pagina riferita
spesso
– Potrebbe essere necessario ricaricarla in breve tempo
29
Algoritmo di Sostituzione Ottimo
• Sostituisce la pagina che sarà riferita nell’istante
più lontano nel tempo
– Ottimo ma non realizzabile
• In alternativa:
– Si stima l’ordine di caricamento delle pagine in
esecuzioni precedenti del processo
– Neanche questa soluzione è applicabile in pratica
– Tuttavia può essere usata per valutare le prestazioni di
algoritmi utilizzabili
30
Least Recently Used (LRU)
• Assume che le pagine usate di recente siano riferite di
nuovo in breve tempo (località temporale)
– Scarica le pagine inutilizzate da più tempo
• Implementazione diretta: mantiene una lista di pagine
– Le pagine usate più di recente in cima
– Aggiorna la lista ad ogni riferimento della memoria!!
• Impl. Approssimata: mantiene un contatore per ogni
descrittore della tabella delle pagine
– L’hw incrementa il un contatore centrale C ad ogni tick
– Se accedo la pagina p , C viene copiato nel descrittore
corrispondente
– Scarica la pagina fisica con il più piccolo valore nel campo
contatore
31
Algoritmo di Sostituzione “Second Chance”
Pagina caricata
per prima
Tempi di caricamento
• Operazioni di un algoritmo “second chance”
–
–
–
Pagine disposte in ordine FIFO
Lista delle pagine se il fault di pagina avviene all’istante 20,
A ha il bit R settato
A viene trattata come una pagina arrivata all’istante 20, R
viene posto a 0
32
Algoritmo di Sostituzione “Clock”
Quando avviene un fault di pagina, la
pagina indicata dal puntatore viene
analizzata. L’azione dipende dal bit R:
•R=0: elimina la pagina
•R=1: resetta R e avanza il puntatore
33
Criteri di progetto per la paginazione
Politiche di Allocazione Locali VS Globali (1)
• Configurazione originale
• Sostituzione con politica locale
• Sostituzione con politica globale
34
Politiche di Allocazione Locali VS Globali (2)
In caso di politiche di allocazione locali è necessario
determinare il numero di pagine fisiche da
assegnare ad ogni processo
• Tramite monitoraggio della dimensione del
working set
– analizzando l’istante dell’ultimo riferimento alle pagine
• Tramite algoritmi di allocazione delle pagine
– Allocazione iniziale in funzione della dimensione del
processo
– Allocazione successiva tramite algoritmo PFF (Page
Fault Frequency)
35
Politiche di Allocazione Locali VS Globali (3)
Tasso di page fault in funzione del numero di pagine
fisiche assegnate: possibile strategia per PFF
36
Controllo del carico
• A prescindere dalla bontà dello schema adottato, il sistema
può comunque andare in thrashing (causare un page fault
ogni poche istruzioni)
• Accade quando l’algoritmo PFF indica che
– Alcuni processi necessitano di più memoria
– E che nessun processo necessita di meno memoria
• Soluzione (scheduling di secondo livello)
Ridurre il numero di processi che competono per la
memoria
– Fare lo swap di qualche processo su disco
– Ridurre il grado di multiprogrammazione
37
Dimensione delle Pagine (1)
Pagine piccole
• Vantaggi
– Riducono la frammentazione interna
– Si adattano meglio a varie strutture dati e sezioni di
codice
– Limitano l’ampiezza dello spazio di indirizzamento
inutilizzato caricate in memoria
• Svantaggi
– I programmi necessitano di parecchie pagine,
tabelle delle pagine più grandi
38
Cleaning Policy
• Necessità di un processo in background (demone
di paginazione -- paging daemon)
– Analizza periodicamente lo stato della memoria
• Quando troppe poche pagine fisiche sono libere
– Seleziona una pagina da scaricare usando un
algoritmo di sostituzione
39