Gestione della Memoria Introduzione ai Sistemi Operativi Corso di Informatica Laurea in Fisica prof. Ing. Corrado Santoro A.A. 2008-09
Architettura di un sistema operativo Progr 1 Progr 2 Progr 3 Progr 4... Progr N System Call (or API Application Program Interface) CPU Scheduler Virtual Memory File System Other Services Device Driver Services Device Driver Device Driver... Device Driver HARDWARE Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 2
Gestione della memoria Ogni programma in esecuzione usa una certa quantità di memoria Ogni programma in esecuzione deve possedere la sua memoria La totalità della memoria fisica deve essere opportunamente spezzettata tra i vari programmi in esecuzione Cosa accade se un programma richiede una memoria maggiore di quella a lui assegnata? Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 3
Gestione della memoria Compito del sistema operativo è virtualizzare la memoria fisica allo scopo di offrire, ad ogni programma in esecuzione un proprio spazio di indirizzamento contiguo e privato Processo 1... Processo N Virt. CPU 1 Virt. Mem 1... Virt. CPU N Virt. Mem N OS CPU Memory Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 4
Tecniche di gestione della memoria Allocazione contigua Molto semplice Poco efficiente Costosa dal punto di vista computazionale Paginazione Più complessa Molto efficiente Poco costosa computazionalmente Supportata da hardware specifico Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 5
Allocazione contigua In funzione delle esigenze dei processi, il sistema operativo suddivide la memoria centrale e ne assegna una partizione ad ogni processo Il sistema operativo tiene traccia: delle zone di memoria assegnate dei processi a cui ha assegnato ogni zona delle zone di memoria libere Processo 1 Processo 2 Processo N OS Memory Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 6
Allocazione contigua La memoria è quindi bucherellata in zone contigue assegnate ai processi zone libere (buchi) La zona di memoria fisica assegnata ad un processo è stabilita a runtime Quindi per ogni esecuzione dello stesso programma, la zona di memoria assegnata può cambiare Processo 1 Processo 2 Processo N OS Memory Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 7
Allocazione contigua parte P3 parte parte e P3 terminano riparte P3 P3 P3 Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 8
Memoria e Indirizzi Ogni volta che uno stesso programma viene avviato, occuperà/utilizzerà zone di memoria diverse Tuttavia un programma usa dei riferimenti alla memoria: indirizzi numerici Allora, se la memoria assegnata cambia ad ogni esecuzione...... gli indirizzi da usare devono cambiare ad ogni esecuzione Tuttavia gli indirizzi che il programma usa sono scritti nel codice macchina generato dal compilatore Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 9
Loading e Relocation Il compilatore genera un eseguibile in cui i riferimenti agli indirizzi non sono assoluti ma relativi Il sistema operativo, quando carica il programma, gli assegna una zona di memoria che parte da un certo indirizzo: base_address Il sistema operativo modifica il codice del programma caricato aggiungendo il base_address ad ogni riferimento in memoria: (LOAD TIME-)RELOCATION, RILOCAZIONE Gli indirizzi vengono quindi trasformati da relativi ad assoluti Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 10
Frammentazione Man mano che i processi terminano, la memoria da loro usata viene liberata Tuttavia rimane un buco (di dimensioni N) che può essere occupato solo da un processo di dimensioni <= N Con l'andare del tempo, si creano molti buchi piccoli Si arriva al paradosso: Processo di dimensioni K Tanti buchi di dimensione Ni < K Il processo non può essere caricato nonostante: Σ N i > K Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 11
Frammentazione P3 P3 P4 P4 P4 P3 P4 Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 12
Frammentazione: Compattazione P3 P3 P4 P4 P4 P4 P3 P4 Altamente costosa: Si devono spostare grossi blocchi di memoria Si devono rilocare nuovamente i processi presenti nei spostati Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 13
Crescita della memoria occupata P3 P3 P4 P3 P3 P4 Cosa accade se P3, durante la sua esecuzione, dovesse avere bisogno di una quantità di memoria maggiore? Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 14
Problemi da risolvere Rilocazione a load-time (caricamento del programma) Rilocazione a run-time (per compattazione blocchi) Alto costo della compattazione Frammentazione Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 15
Gli indirizzi virtuali Abbiamo imparato che i programmi usano indirizzi (riferimenti) assoluti (diretti) alla memoria principale STORE 035CH: memorizza un valore nell'indirizzo di memoria 035C esadecimale Tuttavia sono proprio gli indirizzi assoluti che provocano i problemi di rilocazione Allora... inventiamoci un nuovo modello di indirizzamento che non necessita la rilocazione SOLUZIONE: indirizzi indipendenti dall'effettiva zona di memoria assegnata al processo Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 16
Gli indirizzi virtuali Il processo usa indirizzi virtuali, indipendenti dalla memoria fisica assegnata, che non cambiano mai Es: STORE 005CH Al momento del caricamento del programma, viene assegnato il blocco di memoria e impostato il base_address in un registro speciale della CPU (es. blocco che inizia all'indirizzo 0400H) Quando il programma fa riferimento ad un indirizzo, la CPU automaticamente somma il base_address e ottiene l'indirizzo fisico STORE 005CH Logical (virtual) Address 005CH CPU 045CH 0400 045C Physical Address Base Address 0400H Memory Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 17
Gli indirizzi virtuali Ogni volta che il programma viene caricato, non è necessario rilocarlo ma è sufficiente impostare opportunamente il base_address Analogamente, se occorre compattare la memoria, è sufficiente aggiornare il base_address e non è necessario eseguire la rilocazione del programma 0400 STORE 005CH Logical (virtual) Address 005CH CPU 055CH Physical Address 0500 055C Base Address 0500H Memory Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 18
Gli indirizzi virtuali Con questo meccanismo è possibile garantire anche la privatezza Cioè che ogni processo non possa accedere allo spazio di memoria di un altro processo I processi NON USANO indirizzi fisici, quindi sono vincolati solo al proprio spazio di indirizzamento Un ulteriore registro speciale, denominato limit, memorizza la dimensione del blocco di memoria assegnato al processo Se l'indirizzo fisico generato è > base_address + limit, il programma viene arrestato STORE 005CH Logical (virtual) Address 005CH CPU 045CH 0400 045C Physical Address 1400 Base Address 0400H Limit 1000H Memory Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 19
Indirizzi virtuali e processi Il base address e il limit sono informazioni dipendenti dal processo Ogni processo ha i suoi base address e limit Lo scheduler, quando effettua il context switch, deve anche aggiornare i registri speciali della CPU con i nuovi valori di base address e limit Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 20
Problemi da risolvere Rilocazione a load-time (caricamento del programma) Rilocazione a run-time (per compattazione blocchi) Privatezza dei blocchi di memoria Alto costo della compattazione Frammentazione Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 21
Indirizzi virtuali vs. fisici 0FFF 02FF 02FF 0300 0BFF 0C00 10FF 1100 P3 P4 Vi è un mapping 1:1 tra l'intero spazio logico/virtuale del processo e l'intero blocco di memoria fisica assegnato P3 08FF 20FF 04FF P4 Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 22
Verso il paging (zione) 0FFF 02FF 08FF P3 02FF 0300 0BFF 0C00 10FF 1100 20FF P3 P4 Ora supponiamo di suddividere lo spazio logico e fisico in blocchetti di dimensione fissa... mantenendo lo stesso tipo di mapping tra blocco logico e blocco fisico 04FF P4 Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 23
Verso il paging (zione) 0FFF 02FF 08FF 04FF P3 P4 Ora supponiamo di poter effettuare il mapping tra i singoli blocchetti e non più tra i blocchi di memoria interi I blocchetti di memoria fisica non devono più essere contigui Si eliminano i problemi di rilocazione a run-time e frammentazione Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 24
Va via P3... 0FFF 02FF Liberiamo 7 blocchettini 04FF P4 Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 25
Va via... 0FFF Liberiamo altri 3 blocchettini 04FF P4 Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 26
Arriva un'altra istanza di... 0FFF 0FFF 04FF ' P4 Ci servono 8 blocchettini, ma non è necessario che siano contigui Non si sono rese necessarie né la rilocazione né la compattazione Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 27
' cresce... 0FFF 04FF ' P4... e vorrebbe un altro po' di memoria... gli assegnamo un altro blocchettino che prima era libero Non si sono rese necessarie né la rilocazione né la compattazione Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 28
(Quasi) tutto risolto! Rilocazione a load-time (caricamento del programma) Rilocazione a run-time (per compattazione blocchi) Privatezza dei blocchi di memoria Alto costo della compattazione Frammentazione Cosa sono questi blocchetti? Serve un meccanismo di mapping degli indirizzi (da logico a fisico) che tenga conto dei blocchetti Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 29
Il paging (zione) Ogni blocchetto è denominato La ha una dimensione prefissata (una potenza del 2) In genere è 4 Kbytes = 4096 bytes = 2 12 L'indirizzo logico/virtuale VADR viene suddiviso in due parti: Numero logica, NLP = int (VADR / 4096) Offset (displacement), D = VADR mod 4096 La CPU (in realtà un componente specifico della CPU) traduce il NLP in numero di fisica, NPP, in base alla corrispondenza tra blocchetto logico e blocchetto fisico La CPU genera l'indirizzo fisico PADR combinando NPP e D PADR = NPP * 4096 + D Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 30
Paging 0FFF 1000 2380H div 1000H = 2 2380H mod 1000H = 380H 1FFF 2000 2380 2FFF 3000 3FFF 4000 2 --> 3 PADR = 3380H La La logica logica 2 2 del del processo processo è è mappata mappata nella nella fisica fisica 3 3 3380 4FFF Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 31
Paging 0FFF 1000 1FFF 2000 2380 2FFF 3000 3FFF 4000 4FFF 12 bit 001000111000 NLP Offset 0010 00111000 0011 NPP Offset 00111000 001100111000 La La logica logica 2 2 del del processo processo è è mappata mappata nella nella fisica fisica 3 3 3380 Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 32
Paging 0FFF 1000 1FFF 2000 2380 2FFF 3000 3FFF 4000 4FFF 12 bit 001000111000 NLP Offset 0010 00111000 0011 NPP Offset 00111000 001100111000 La La logica logica 2 2 del del processo processo è è mappata mappata nella nella fisica fisica 3 3 3380 Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 33
Memory Management Unit 0FFF 1000 1FFF 2000 2380 2FFF 3000 Logical Address MMU Physical Address 3380 3FFF 4000 CPU 4FFF Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 34
Memory Management Unit 0FFF 1000 Logical Address 001000111000 1FFF 2000 2380 2FFF 3000 3FFF 4000 Logical Page 0100 0001 1100 0010 0011 0011 0001 0100 1110... Physical Page PAGE TABLE Physical Address 3380 4FFF 001100111000 MMU CPU Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 35
Paging: riassunto Gli spazi di indirizzamento logico e fisico sono suddivisi in pagine di dimensioni prefissate (potenze del 2) Il processo deve leggere o scrivere una cella di memoria La CPU riceve un indirizzo logico e lo passa alla MMU La MMU separa numero di logica e offset tramite la tabella delle pagine, trasforma il numero di logica in numero di fisica accoda l'offset e genera l'indirizzo fisico L'indirizzo fisico viene generato sul bus e l'operazione di lettura/scrittura viene infine eseguita Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 36
Demand Page Adesso abbiamo il controllo dello spazio di indirizzi a livello di Tuttavia quando un processo gira esegue le istruzioni contenute in una specifica...... con l'andare avanti dell'esecuzione, si passa ad eseguire il codice della successiva, etc. etc. IN DEFINITIVA, AL PROCESSO SERVE UNA PAGINA PER VOLTA ALLORA SE ABBIAMO NECESSITA' DI MEMORIA, E NON C'E' PIU' SPAZIO, POSSIAMO MOMENTANEAMENTE TOGLIERE AD UN PROCESSO LE PAGINE CHE NON STA USANDO Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 37
Demand Page 0FFF 1000 1FFF 2000 2FFF 3000 Il Il processo processo sta sta eseguendo eseguendo il il codice codice presente presente nella nella (logica) (logica) 2 2 che che è è mappata mappata nella nella (fisica) (fisica) 3 3 3FFF 4000 4FFF Le Le altre altre pagine pagine del del processo processo NON NON SONO SONO PRESENTI PRESENTI IN IN MEMORIA MEMORIA FISICA FISICA Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 38
Demand Page 0FFF 1000 1FFF 2000 2FFF 3000 3FFF 4000 4FFF Il Il processo processo dovrebbe dovrebbe proseguire proseguire con con il il codice codice presente presente nella nella (logica) (logica) 3 3 che che NON NON E' E' PRESENTE PRESENTE IN IN MEMORIA MEMORIA Avviene Avviene un un evento evento denominato denominato PAGE PAGE FAULT FAULT che che attiva attiva l'esecuzione l'esecuzione del del sistema sistema operativo operativo Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 39
Demand Page 0FFF 1000 1FFF 2000 Il Il sistema sistema operativo operativo sceglie sceglie una una di di memoria memoria fisica fisica libera libera...... 2FFF 3000 3FFF 4000 4FFF Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 40
Demand Page 0FFF 1000 1FFF 2000...... e e carica carica dal dal disco disco la la del del processo processo che che occorre occorre eseguire eseguire 2FFF 3000 3FFF 4000 4FFF Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 41
Demand Page 0FFF 1000 1FFF 2000 La La page page table table viene viene aggiornata aggiornata inserendo inserendo questo questo nuovo nuovo mapping mapping e e l'esecuzione l'esecuzione può può proseguire proseguire 2FFF 3000 3FFF 4000 4FFF Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 42
Memory Management Unit 0FFF 1000 Logical Address 001000111000 1FFF 2000 2380 2FFF 3000 3FFF 4000 Logical Page 0001 0010 0011 0011 0001 0100... Physical Page Presence Bit PAGE TABLE 0 0 1 1 0 Physical Address 3380 4FFF CPU 001100111000 MMU Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 43
Infine... Quando occorre caricare una da disco... Se ci sono pagine fisiche libere, allora nessun problema Ma se tutta la memoria è occupata? Occorre scaricare una Si sceglie una occupata la si toglie al processo proprietario la si assegna al nuovo processo Quali pagine sono candidate? Ovviamente quelle dei processi in WAIT E poi le altre... Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 44
Conclusioni Il paging è la soluzione ottimale per la gestione della memoria Si basa sul suddividere la memoria logica e fisica in pagine di dimensione fissata Un componente della CPU, la MMU (Memory Management Unit) traduce l'indirizzo virtuale in indirizzo fisico tramite la page table La page table riporta la corrispondenza tra logica e fisica Grazie alla MMU, non tutte le pagine devono essere caricate in memoria, ma solo quelle utili al momento La page table possiede un bit presente/assente che indica se la è presente o meno in memoria Corrado Santoro, Informatica, Introduzione ai Sistemi Operativi, Memoria Virtuale 45