Dipartimento di Elettronica ed Informazione
Politecnico di Milano
Informatica e CAD (c.i.) - ICA
Prof. Pierluigi Plebani
A.A. 2008/2009
Sistema operativo: Gestione
della memoria
La presente dispensa e’ da utilizzarsi ai soli fini didattici
previa autorizzazione dell’autore. E’ severamente vietata la
riproduzione anche parziale e la vendita.
15/01/2009
Introduzione
•  In un sistema multiutente e multitask il
gestore della memoria deve
–  Caricare in memoria un programma permettendo
la sua esecuzione
–  Evitare che un programma acceda ad una zona di
memoria non di sua competenza
•  Nella fase di caricamento deve essere
possibile trovare spazio libero sufficiente per
ospitare il codice e i dati del programma
•  In memoria, in un dato momento, possono
esserci diversi programmi caricati
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani
2
Struttura di un programma su file
•  A fronte di una compilazione viene generato un
programma
•  Il programma è memorizzato all’interno di un file
eseguibile
•  L’esecuzione del programma consiste nel caricamento
di questo file in memoria centrale
•  La struttura del file contenente il programma ricalca
la struttura della memoria centrale
–  Insieme di celle di dimensione fissa
–  Ogni cella contiene un’istruzione o un dato
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani
3
Compilatore linker loader
•  Compilatore:
–  trasforma il programma sorgente in programma oggetto
•  Linker:
–  collega i diversi moduli e le funzioni di libreria, ottenendo
quindi un unico programma eseguibile
–  Risolve eventuali riferimenti a variabili esterne ai moduli
–  Ricava altre informazioni utili associate al programma:
dimensione, posizione della prima istruzione esegubile (entry
point), indirizzo di inizio per l’allocazione in memoria (per
indirizzi in formato assoluto)
•  Loader:
–  carica in memoria il programma da eseguire
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani
4
Caricamento di un programma in memoria
•  Avendo sia il file con il programma che la memoria la
medesima struttura il caricamento consiste in una
operazione di copia
•  Il gestore della memoria centrale del sistema
operativo
–  È addetto a questa operazione di caricamento
–  Deve cercare una zona di memoria sufficientemente grande
per contenere il programma
•  Osservazioni
–  Ogni volta che un programma è caricato in memoria viene
deciso dove caricarlo
–  L’indirizzo iniziale di un programma varia quindi da
esecuzione ad esecuzione
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani
5
Caricamento di un programma in memoria
255
Libero
71
43
int x, k, i;
k=0;
i=1;
printf(“%d”, k);
Utilizzato
38
int x, k, i;
k=0;
i=1;
printf(“%d”, k);
0
0
Memoria centrale
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani
6
Indirizzi logici e indirizzi fisici
•  All’interno di un programma vi possono essere
istruzioni di accesso a zone di memoria (accesso alle
variabili)
•  Ma un programma (il file) esiste prima che venga
eseguito (il processo)
•  Come è possibile sapere che indirizzo ha realmente
una variabile quando non so in che zona di memoria il
programma è stato caricato?
–  Un programma utilizza degli indirizzi logici i cui valori sono
generati considerando come primo indirizzo del programma il
valore 0
–  A seguito del caricamento gli indirizzi vengono rilocati
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani
7
Rilocazione
•  Rilocazione statica (fatto dal loader)
–  Una volta conosciuto il primo indirizzo fisico disponibile tutti
gli indirizzi nel codice sono modificati dal linker
–  Richiede un elevato tempo di setup iniziale ma poi tutto è ok
–  È utilizzato nei sistemi mono tasking
•  Rilocazione dinamica (in fase di esecuzione):
–  Il codice viene caricato in memoria dal loader in formato
rilocabile in una delle zone disponibili
–  Uso di un registro base che memorizza l’indirizzo effettivo
della prima locazione di memoria
–  Durante l’esecuzione, ad ogni accesso, si calcola l’indirizzo
assoluto
–  Richiede l’esistenza di specifici componenti hardware interni
alla CPU che memorizzino il registro base e facciano la
rilocazione (che in realtà è una somma)
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani
8
Rilocazione dinamica
Memoria
Registro Base
no
+
>
si
Errore
Indirizzo rilocabile
Registro dimensione
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani
9
Limiti del caricamento intero
•  Caricare in memoria interamente un programma
significa che:
–  Deve esistere uno spazio di memoria sufficientemente grande
per ospitare il programma
–  Questo spazio deve essere contiguo
•  Ci sono diverse inefficienze:
–  Il continuo caricamento e scaricamento dei programmi porta
ad una frammentazione della memoria
–  Posso avere spazio a sufficienza per ospitare un programma
che deve essere eseguito ma sono in zone non contigue
–  Ho quindi uno spreco di memoria
•  Inoltre le istruzioni presenti in un programma
possono anche non essere eseguite tutte
–  Si pensi alle funzionalità che Word mette a disposizione e
quelle che effettivamente vengono utilizzate
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani
10
Memoria virtuale
•  Permette di eseguire i programmi anche se non sono
completamente caricati in memoria
–  L’importante è che in memoria vi sia l’istruzione da eseguire
–  Possibilmente devono esserci anche quelle vicine (principio
di località)
–  Ciò che non viene caricato rimane in memoria di massa
•  Permette di far apparire ad un programma una
memoria centrale grande quanto lo spazio di
indizzamento della macchina permette
–  Con una macchina a 32bit ogni processo vede una memoria
virtuale di 4GB tutta a sua disposizione
•  MMU (Memory Management Unit)
–  È il dispositivo hardware che permette di realizzare la
memoria virtuale e che viene sfruttato dal sistema operativo
–  In realtà la MMU esiste anche senza la memoria virtuale
(contiene i registri base e dimensione)
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani
11
Realizzare la memoria virtuale
•  Paginazione
–  Il programma e la memoria sono suddivisi in
pagine di dimensione prefissata
•  Segmentazione
–  Il programma è suddiviso in segmenti
semanticamente eterogenei
•  Segmentazione paginata
–  Il programma è suddiviso in segmenti
semanticamente eterogenei
–  Ogni segmento è a sua volta suddiviso in pagine
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani
12
Paginazione: introduzione
•  È definito a priori la dimensione di una pagina
–  Ogni programma è visto come un insieme di pagine logiche
–  La memoria è vista come un insieme di pagine fisiche
•  La dimensione delle pagine logiche e fisiche è identica
•  Il numero di pagine logiche (dimensione del
programma) può essere diverso dal numero di pagine
fisiche (dimensione della memoria)
–  Se #pagine logiche < #pagine fisiche (libere) il programma
potrebbe anche essere caricato in memoria interamente
–  Se #pagine logiche > #pagine fisiche (libere) il programma
verrà caricato in memoria parzialmente
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani
13
Paginazione: caricamento
•  Quando un programma
viene caricato in memoria
è sufficiente caricare la
prima pagina (che
contiene la prima
istruzione da eseguire)
•  In memoria è sufficiente
quindi avere una pagina
libera
•  Per migliorare l’efficienza
si cerca di caricare
comunque un numero
superiore di pagine
Utilizzato
5
Pagina logica 1 del
4
programma
2
1
Utilizzato
3
0
Utilizzato
2
Programma
Pagina logica 0 del
1
programma
Utilizzato
0
Memoria centrale
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani
14
Paginazione: indirizzo di memoria
•  Consideriamo
–  La dimensione di una cella pari a d=8 bit = 1 Byte
–  La dimensione di un indirizzo di memoria pari a n=32 bit
quindi lo spazio di indirizzamento (celle di memoria
disponibili) sarà 2n = 232
•  Supponiamo
–  che la dimensione di una pagina sia di 2m=219=512KB
•  Allora:
–  Il numero di pagine disponibile è dato da
2n / 2m = 232 / 219 = 213 pagine
–  l’indirizzo di una generica cella può essere così suddiviso
10010011011011011010110110110110
n-m = 13 bit
Indica il numero di pagina
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani
m = 19 bit
Indica la cella nella pagina
15
Paginazione: accesso alla memoria
•  Con la paginazione
–  il programma è sparpagliato all’interno della memoria
centrale
–  La dimensione degli indirizzi utilizzati dal programma può
essere diversa dalla dimensione degli indirizzi utilizzati dalla
memoria centrale (#pagine fisiche != #pagine logiche)
•  La semplice rilocazione non è quindi più sufficiente
per gestire gli accessi alla memoria
•  La MMU è quindi più evoluta e tiene traccia di
–  Quali pagine del programma sono caricate in memoria
–  In che pagina in memoria è caricata una data pagina del
programma
–  Media anche tra la diversa rappresentazione degli indirizzi
•  Ad ogni processo è associata una tabella delle pagine
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani
16
Paginazione: tabella delle pagine
511
127
127
3
Pagina 2
74
Pagina 0
73
Pagina 3
72
2
2
74
1
1
2
Pagina 127
3
0
0
73
Pagina 1
2
Programma
1
Tabella delle
pagine
0
Memoria centrale
Dim pagina 25 = 32Byte
Dim memoria logica = 212 = 4096 Byte -> #pagine logiche = 27 = 128
Dim memoria fisica = 214 = 16384 Byte -> #pagine fisiche = 29 = 512
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani
17
Paginazione: risoluzione degli indirizzi 1/2
•  Un programma quandp vuole accedere ad una cella di
memoria (e.g., una variabile) usa un indirizzo
secondo la dimensione logica del programma
•  Quell’indirizzo deve essere trasformato nel
corrispondente indirizzo fisico in cui
–  La dimensione dell’indirizzo potrebbe variare
–  La cella puntata si può trovare in una pagina qualunque in
memoria secondo la mappatura memorizzata nella tabella
delle pagine
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani
18
Paginazione: risoluzione degli indirizzi 2/2
127
7 bit
000001000101
#pagina
fisica
cella nella
pagina
511
3
2
74
1
2
0
73
Tabella delle
pagine
Pagina 2
74
Pagina 0
73
Pagina 3
72
Pagina 127
3
Pagina 1
2
9 bit
1
Cella richiesta (12 bit)
00100101000101
Cella reale (14 bit)
0
Memoria centrale
Dim pagina 25 = 32Byte
Dim memoria logica = 212 = 4096 Byte -> #pagine logiche = 27 = 128
Dim memoria fisica = 214 = 16384 Byte -> #pagine fisiche = 29 = 512
Corso di Informatica e CAD (c.i.) – ICA LC - prof. Plebani
19
Scarica

Sistema operativo: Gestione della memoria