1 Gestione della Memoria. 2 Idealmente la memoria dovrebbe essere –grande –veloce –non...

Post on 03-May-2015

214 views 0 download

Transcript of 1 Gestione della Memoria. 2 Idealmente la memoria dovrebbe essere –grande –veloce –non...

1

Gestione della Memoria

2

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)

3

Tipica Gerarchia di Memoria

• Sia il tempo di accesso che la capacità sono approssimazioni abbastanza grossolane

4

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

5

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

6

Introduzione alla Gestione della MemoriaAmbiente monoprogrammato senza swapping nè paginazione

Tre modi semplici di organizzare la memoria- un sistema operativo con un solo processo utente

7

Ambiente multiprogrammato con partizioni fisse

• Partizioni fisse– Con code dei job distinte per ogni partizione– Con unica coda dei job

8

Swapping

• Caricamento in partizioni variabili• L’allocazione della memoria cambia quando:

– I processi vengono caricati in memoria– I processi rilasciano la memoria

9

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

10

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

11

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

Sistema Operativo

Spazio Ind processo 1

Area riservata, non accessibilein modalità utente

0

AmpiezzaRAM - 1

Spazio Ind processo 2

RAM vuota

12

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

13

Paginazione: idea base • Lo spazio di indirizzamento di ogni processo è diviso

in ‘fette’ (pagine logiche) tutte della stessa ampiezza

01234..

Processo 1

Pagina Logica: ‘fetta’ dello spazio di indirizzamento (1-4K)

01234..

Processo 2

01234..

Processo 3

14

Paginazione: idea base – Anche la RAM disponibile per i processi utente è

divisa in pagine della stessa ampiezza (pagine fisiche)

Sistema Operativo

RAM vuota

RAM vuota

RAM vuotaRAM vuota

Pagina Fisica: ‘fetta’ dello RAM stessa ampiezza della pagina logica

15

Paginazione: idea base – Ad ogni istante solo le pagine necessarie per i

processi in esecuzione sono caricate in RAM (si usa la località!)

Sistema Operativo

RAM vuota

RAM vuota

01234..

Processo 1

01234..

Processo 2

01234..

Processo 3

16

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

17

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

18

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

19

Algoritmo di Sostituzione Ottimo

• Sostituisce la pagina che sarà riferita nell’istante più lontano nel tempo– Ottimo ma non realizzabile

20

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

21

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