Gestione della Memoria
1. Introduzione alla gestione della memoria
2. Swapping
3. Memoria virtuale
4. Implementazione
5. Algoritmi di sostituzione
1
Gestione della Memoria
• Idealmente la memoria dovrebbe essere
– grande
– veloce
– non volatile
• Gerarchia di memorie
– Disco: capiente, lento, non volatile ed economico
– Memoria principale: volatile, mediamente grande, veloce e
costosa
– Cache: volatile, veloce, piccola e costosa
• La gerarchia di memorie e’ gestita dal “memory
manager” (gestore della memoria)
2
Tipica Gerarchia di Memoria
• Sia il tempo di accesso che la capacità sono
approssimazioni abbastanza grossolane
3
Modelli di gestione della memoria
• Modelli che non spostano i processi dalla RAM
una volta iniziata l’esecuzione
– monoprogrammazione
– multiprogrammazione a partizioni fisse
• Modelli che spostano un processo in esecuzione
da RAM a disco
– swapping
– paginazione
4
Introduzione alla Gestione della Memoria
Ambiente monoprogrammato senza swapping nè paginazione
Tre modi semplici di organizzare la memoria
- un sistema operativo con un solo processo utente
5
Ambiente multiprogrammato con partizioni
fisse
• Partizioni fisse
– Con code dei job distinte per ogni partizione
– Con unica coda dei job
6
Rilocazione e Protezione
• Non si conosce l’istante nel quale il programma verrà
caricato in memoria
– Gli indirizzi dei dati e del codice non possono essere assoluti
– E’ necessario mantenere separati gli spazi di indirizzamento dei
processi
• Registri Base e Limite
– Indirizzo fisico = indirizzo logico + registro base
– Errore se indirizzo logico > registro limite
7
Spazio di indirizzamento
• Come è organizzata la memoria accessibile
ad un programma in esecuzione ?
232 - 1
Stack
Pila di FRAME, uno per ogni
chiamata di funzione da cui non
abbiamo ancora fatto ritorno
Area vuota
Variabili globali
Data
0
Text
Traduzione in assembler delle
funzioni che compongono il
programma
8
Condivisione della RAM
• Tipicamente la RAM contiene lo spazio di
indirizzamento di più processi :
– es. organizzazione tipica della memoria negli SO
degli anni ‘70 (es IBM 360)
AmpiezzaRAM - 1
Spazio processo 3
Spazio processo 2
Una possibile
organizzazione della RAM
con più processi attivi
contemporaneamente
Spazio processo 1
Sistema Operativo
Area riservata, non accessibile
in modalità utente
0
9
Condivisione della RAM (2)
• Problemi legati alla condivisione della RAM :
(1) protezione dello spazio di indirizzamento di
processi diversi
Spazio processo 3
Spazio processo 2
Il processo 2 non deve poter accedere
agli indirizzi di RAM al di fuori della sua
area
Spazio processo 1
Sistema Operativo
10
Condivisione della RAM (2)
• Problemi legati alla condivisione della RAM :
(2) problema della rilocazione
Il compilatore/linker assume che lo spazio di
indirizzamento parta dall’indirizzo 0
Ma, P2 è caricato ad un indirizzo base2 != 0
Spazio processo 3
base2
Stack
Spazio processo 2
Area vuota
Spazio processo 1
Data
Sistema Operativo
Text
max
0
11
Condivisione della RAM (3)
• Problemi legati alla condivisione della RAM :
(2) problema della rilocazione (cont.)
Indirizzi di istruzioni e dati devono essere
incrementati (rilocazione) di base2
Spazio processo 3
Stack
base2 + X
Area vuota
Spazio processo 2
base2
max
X
Spazio processo 1
Data
Sistema Operativo
Text
0
12
Condivisione della RAM (4)
Indirizzo iniziale del
programma in RAM
base
Addizionatore
PC
+
+
Indirizzo (alla memoria)
Ampiezza dello
spazio di indirizzamento
Confrontatore
Fault (accesso oltre il limite)
limite
• È necessario dell’Hw aggiuntivo
• Una possibile soluzione (usata nella serie
IBM360)
13
Condivisione della RAM (5)
Risolve il problema della
rilocazione
Indirizzo iniziale del
programma in RAM
base
Addizionatore
PC
+
+
Indirizzo (alla memoria)
Confrontatore
Fault (accesso oltre il limite)
limite
Ampiezza dello
spazio di indirizzamento
14
Condivisione della RAM (6)
Indirizzo iniziale del
programma in RAM
base
Addizionatore
PC
+
+
Indirizzo (alla memoria)
Confrontatore
Fault (accesso oltre il limite)
limite
Ampiezza dello
spazio di indirizzamento
Risolve il problema della
protezione
15
Swapping (1)
• Caricamento in partizioni variabili
• L’allocazione della memoria cambia quando:
– I processi vengono caricati in memoria
– I processi rilasciano la memoria
16
Swapping (2)
• Rilocazione e protezione possono usare ancora i
registri base e limite
• Problema: la frammentazione della memoria
– molte aree piccole
– compattazione
• Problema: stabilire quanto spazio allocare per ogni
processo
– area dati, stack
• Problema: come tenere traccia della memoria libera
17
Swapping (3)
a) Allocare dinamicamente memoria nel segmento dati
b) Allocare dinamicamente memoria nello stack e nel
segmento dati
18
Gestione della Memoria con Bit Map
a) Porzione di memoria con 5 processi e 3 aree
libere
•
Le suddivisioni indicano l’unità di allocazione
b) Bit Map corrispondente
c) Lista di Allocazione corrispondente
19
Gestione della Memoria con Liste
Quattro possibili combinazioni di allocazione in seguito
alla terminazione del processo X
20
Allocazione della Memoria
Allocazione di un blocco di memoria di dimensione x:
• First Fit
– Individua la prima porzione di memoria libera di dimensione
x
• Best Fit
– Individua la più piccola porzione di memoria libera di
dimensione  x
3
21
Scarica

Lucidi Swapping