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 dellautore. 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 allinterno di un file eseguibile Lesecuzione 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 unistruzione o un dato
Corso di Informatica e CAD (c.i.) ICA LC - prof. Plebani
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 lallocazione 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
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 Lindirizzo iniziale di un programma varia quindi da esecuzione ad esecuzione
Corso di Informatica e CAD (c.i.) ICA LC - prof. Plebani
Caricamento di un programma in memoria
255
Libero
71 int x, k, i; k=0; i=1; printf(%d, k);
38
43
Utilizzato
0
int x, k, i; k=0; i=1; printf(%d, k);
0
Memoria centrale
Corso di Informatica e CAD (c.i.) ICA LC - prof. Plebani
Indirizzi logici e indirizzi fisici
Allinterno 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
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 lindirizzo effettivo della prima locazione di memoria Durante lesecuzione, ad ogni accesso, si calcola lindirizzo assoluto Richiede lesistenza 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
Rilocazione dinamica
Memoria Registro Base no
>
si
Errore
Indirizzo rilocabile
Registro dimensione
Corso di Informatica e CAD (c.i.) ICA LC - prof. Plebani
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
Limportante che in memoria vi sia listruzione 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 lefficienza si cerca di caricare comunque un numero superiore di pagine
Utilizzato
2 1 0 5
Pagina logica 1 del 4 programma Utilizzato Utilizzato Programma
3 2
Pagina logica 0 del 1 programma Utilizzato Memoria centrale
0
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 lindirizzo 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 allinterno 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
Pagina 2 Pagina 0 Pagina 3
74 73 72
2 1 0
2 1 0
74 2 73 Tabella delle pagine Memoria centrale Pagina 127 Pagina 1
3 2 1 0
Programma
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 Quellindirizzo deve essere trasformato nel corrispondente indirizzo fisico in cui
La dimensione dellindirizzo 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
511
7 bit
2 1
74 2 73 Tabella delle pagine 9 bit
Pagina 2 Pagina 0 Pagina 3
74 73 72
000001000101
#pagina fisica cella nella pagina
Pagina 127 Pagina 1
3 2 1 0
Cella richiesta (12 bit)
00100101000101
Cella reale (14 bit)
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
Molto più che documenti.
Scopri tutto ciò che Scribd ha da offrire, inclusi libri e audiolibri dei maggiori editori.
Annulla in qualsiasi momento.