Sei sulla pagina 1di 19

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