Gestione della Memoria
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
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
4
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
5
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
6
Ambiente multiprogrammato con partizioni
fisse
• Partizioni fisse
– Con code dei job distinte per ogni partizione
– Con unica coda dei job
7
Swapping
• Caricamento in partizioni variabili
• L’allocazione della memoria cambia quando:
– I processi vengono caricati in memoria
– I processi rilasciano la memoria
8
Swapping
• 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
9
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
10
Gestione della memoria
• 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
11
Gestione della memoria
• Problemi:
– limite all’ampiezza dello spazio di indirizzamento
• 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
• 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
12
Paginazione: idea base
• 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
13
Paginazione: idea base
– 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
14
Paginazione: idea base
– 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
15
Paginazione: problema
• Esecuzione (corretta) dei programmi utente
parzialmente caricati:
– 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
16
Paginazione
• 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 sostituzione : servono a selezionare la
pagina vittima
17
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
18
Algoritmo di Sostituzione Ottimo
• Sostituisce la pagina che sarà riferita nell’istante
più lontano nel tempo
– Ottimo ma non realizzabile
19
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
20
Algoritmo di Sostituzione “Working Set”
• Working set (idea di base)
– insieme di pagine necessarie ad un processo P in una fase
della propria elaborazione
• es. due array globali A,B (dati), più istruzioni di copia (testo)
• Paginazione su domanda (a richiesta)
– P passa in esecuzione senza alcuna pagina in memoria
– le pagine vengono caricate quando avviene un page fault
– lento finché non è stato caricato il working set
• Pre-paginazione (prepaging)
– il sistema tiene traccia del working set
– l’ultimo working set di P viene caricato in memoria
prima di riavviare il processo
21
Scarica

Gestione della memoria