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