La gestione della memoria Lezione 30 Sistemi Operativi Background • Un programma per poter essere eseguito deve essere caricato in memoria • Per questioni prestazionali devono essere caricati in memoria contemporaneamente più processi • L accesso a memoria centrale è una delle operazioni più frequenti effettuate da un processo • Accesso ai dati e al codice • La tecnica di gestione della memoria ha quindi un effetto determinante sulle prestazioni del sistema A.A. 2010/2011 2 Corso: Sistemi Operativi © Danilo Bruschi Prestazioni • Calcoliamo l utilizzo della CPU in un sistema monoprogrammato • Se l unico processo spende in media 40% del tempo di esecuzione in attesa di I/O, l utilizzo complessivo della CPU è 0.6 = 1 – 0.4 • Per migliorare questo parametro dobbiamo ridurre il tempo in cui la CPU è inattiva • Fare in modo che quando un processo esegue I/O il microprocessore venga usato per altre attività A.A. 2010/2011 3 Corso: Sistemi Operativi © Danilo Bruschi Prestazioni • Con due processi in esecuzione, ciascuno con percentuale di I/O pari al 40%, l utilizzo della CPU diventa 0.84 = 1 - 0.16 • Generalizzando • Siano dati n processi indipendenti • Ciascun processo spende una frazione p del proprio tempo di esecuzione in attesa di I/O • Non usa la CPU • La probabilità che tutti gli n processi siano in attesa è pn • L utilizzazione della CPU è 1 - pn • Quando tutti i processi sono in attesa, la CPU è idle A.A. 2010/2011 4 Corso: Sistemi Operativi © Danilo Bruschi Memoria e prestazioni Livello di multiprogrammazione A.A. 2010/2011 5 Corso: Sistemi Operativi © Danilo Bruschi Osservazioni • Se i programmi sono I/O bound, molti programmi devono essere in esecuzione per raggiungere un elevato utilizzo di CPU • Aumentare la memoria centrale di un sistema non fa aumentare l utilizzo di CPU in misura proporzionale all incremento del livello di multiprogrammazione • L efficacia dipende dal livello corrente di utilizzo • Pendenza della curva di utilizzo A.A. 2010/2011 6 Corso: Sistemi Operativi © Danilo Bruschi Requisiti Memory Manager • La presenza contemporanea in memoria di più processi e la loro esecuzione concorrente è possibile solo se il MM è in grado di garantire la loro coesistenza evitando ogni tipo di interferenza non espressamente richiesta A.A. 2010/2011 7 Corso: Sistemi Operativi © Danilo Bruschi Due diverse visioni della memoria • Dal punto di vista hardware: un insieme di byte da condividere tra più processi • Dal punto di vista dei processi: un insieme di byte dedicato • Il Memory Manager deve consentire a queste due visioni di coesistere e lo fa (con il supporto dell’hw) garantendo il soddisfacimento dei seguenti requisiti: • Rilocazione: ogni processo può essere caricato in qualunque indirizzo fisico • Protezione: un processo non può accedere (se non autorizzato) allo spazio di memoria di un altro processo • Sharing: alcuni spazi di memoria fisica possono essere condivisi tra processi A.A. 2010/2011 8 Corso: Sistemi Operativi © Danilo Bruschi Rilocazione: Symbolic names → Logical names → Physical names • Lo spazio di indirizzamento di un programma è costituito da nomi simbolici cioè gli identificatori che il programmatore assegna a variabili, label e procedure • Lo spazio degli indirizzi simbolici viene trasformato in spazio logico dal compilatore/ linker • Lo spazio logico deve poi essere mappato sullo spazio fisico, cioè sulle effettive locazioni di memoria che conterranno dati e istruzioni A.A. 2010/2011 9 Corso: Sistemi Operativi © Danilo Bruschi Indirizzi logici & fisici • In generale definiamo: • Logici: indirizzi generati dalla CPU a seguito dell elaborazione (decode) degli indirizzi degli operandi presenti in un istruzione • Fisici: indirizzi che giungono sul bus indirizzi alla memoria centrale e denotano una precisa locazione di memoria • Raramente indirizzi logici e fisici coincidono, l operazione di associazione tra indirizzi logici e fisici è chiamata binding A.A. 2010/2011 10 Corso: Sistemi Operativi © Danilo Bruschi Rilocazione e Binding • Il processo attraverso cui si riassegna un nuovo valore agli indirizzi (logici o fisici) di dati e istruzioni di un programma • Binding: l’operazione effettuata dal processo di rilocazione per assegnare a dati e istruzioni di un processo un valore in un determinato spazio di indirizzi • In seguito indichiamo con binding, solo l’operazione limitata all’assegnazioni di indirizzi di memoria centrale A.A. 2010/2011 11 Corso: Sistemi Operativi © Danilo Bruschi Binding • Il binding può essere effettuato in momenti diversi: • Compile time: • Se in fase di compilazione è gia noto lo spazio di memoria fisica che dovrà contenere il processo, è possibile generare codice assoluto; qualora lo spazio fisico dovesse essere modificato sarà necessario ricompilare il codice • Se lo spazio di memoria fisico che conterrà il programma non è noto alla compilazione, il compilatore associerà al programma uno spazio logico (rilocabile) che potrà essere mappato sullo spazio fisico: • Load time: durante il caricamento del programma da memoria di massa a memoria centrale • Execution time: durante la fase di escuzione di un’istruzione di provvede a rilocare opportunamente gli indirizzi in essa contenuti. In questo caso è necessario un supporto hw per lo svolgimento dell’operazione A.A. 2010/2011 12 Corso: Sistemi Operativi © Danilo Bruschi Binding time tradeoff • Early binding (compilatore) • Produce codice efficiente • Consente di anticipare in fase di compilazione una serie di verifiche • Delayed binding (linker e Loader) • Produce codice efficiente • Consente compilazioni separate • Facilità portabilità e condivisione del codice • Late binding (VM, linker/loader dinamici, overlay) • Codice meno efficiente • Check a runtime • Molto flessibile, consente riconfigurazioni a run time A.A. 2010/2011 13 Corso: Sistemi Operativi © Danilo Bruschi Memory Management Unit (MMU) • Dispositivo hardware che mappa indirizzi logici in indirizzi fisici • La trasformazione degli indirizzi viene effettuata ogni volta che in indirizzo viene prelevato dalla CPU dall’istruzione e inviato sul bus indirizzi • La CPU elabora solo indirizzi logici che sono poi trasformati dalla MMU A.A. 2010/2011 14 Corso: Sistemi Operativi © Danilo Bruschi Rilocazione dinamica A.A. 2010/2011 15 Corso: Sistemi Operativi © Danilo Bruschi Protezione • I processi non devono poter accedere ad aree di memoria di altri processi senza permesso mov loop mov add jmp end ret eax,end (eax),0 eax,4 loop • Poiché è impossibile controllare a priori quali indirizzi di memoria un programma referenzierà i riferimenti alla memoria devono essere verificati durante l esecuzione • Memory protection requirement must be satisfied by the processor (hardware) rather than the operating system (software) A.A. 2010/2011 16 Corso: Sistemi Operativi © Danilo Bruschi Protezione A.A. 2010/2011 17 Corso: Sistemi Operativi © Danilo Bruschi Sharing • Il MM deve consentire a più processi di accedere ad una porzione condivisa di memoria • Nel caso di porzioni di codice è opportuno prevedere la possibilità che più processi possano condividere la stessa copia di programma, piuttosto che prevedere la stessa copia per ogni processo A.A. 2010/2011 18 Corso: Sistemi Operativi © Danilo Bruschi Allocazione memoria • Suddivisione della memoria in unità minime allocabili • Associazione a ciascuna unità di un bit • Libera/occupata • Dimensione della tabella • 1 bit ogni unità allocabile di k bit • Ricerca di successioni di n bit a zero nella bitmap per trovare aree libere di dimensioni adeguate al programma da caricare • Semplice ma inefficiente A.A. 2010/2011 19 Corso: Sistemi Operativi © Danilo Bruschi Allocazione Memoria A.A. 2010/2011 20 Corso: Sistemi Operativi © Danilo Bruschi Liste per allocazione memoria • Aree libere contigue vengono compattate • Quando si usano le liste linkate, può essere più efficiente fare ricorso a liste doppiamente linkate A.A. 2010/2011 21 Corso: Sistemi Operativi © Danilo Bruschi Strategie di allocazione • First Fit: il primo buco sufficientemente grande per contenere il processo • Best Fit: il più piccolo buco sufficientemente grande per contenere il processo • Worst Fit: il più grande buco che possa contenere il processo A.A. 2010/2011 22 Corso: Sistemi Operativi © Danilo Bruschi Tecniche di gestione della memoria Memory management techniques Contiguous allocation Single partition allocation Multiple partition allocation Fixed partition A.A. 2010/2011 Non contiguous allocation paging Segmentation Variable partition 23 Corso: Sistemi Operativi © Danilo Bruschi Gestione della memoria 1 Partizioni fisse 2 Partizioni variabili 3 Segmentazione 4 Paginazione Primi computer" OGGI: PDAs, smartcards" SO moderni" • Criteri di riferimento 1 Efficienza implementativa 2 Sfruttamento della risorsa (spazio lasciato inutilizzato) A.A. 2010/2011 24 Corso: Sistemi Operativi © Danilo Bruschi Partizioni multiple fisse • Memoria a partizioni fisse • Code separate per ogni partizione • possibile sotto utilizzo del sistema • Singola coda di input A.A. 2010/2011 25 Corso: Sistemi Operativi © Danilo Bruschi Partizioni multiple fisse: criticità • Le partizioni fisse hanno avuto un certo successo in sistemi di tipo batch • Relativa staticità dei programmi eseguiti su un sistema • Con l avvento dei sistemi time sharing, i problemi principali da risolvere sono diventati: • dover gestire processi la cui dimensione, nel complesso, era di gran lunga superiore di quella della memoria centrale • Dover gestire processi la cui dimensione era fortemente variabile A.A. 2010/2011 26 Corso: Sistemi Operativi © Danilo Bruschi Partizionamento guidato dai processi Spazio per la crescita dello stack e del segmento dati Spazio per la crescita del segmento dati • Le dimensioni di un processo cambiano durante l esecuzione va quindi prevista la possibilità di l espansione A.A. 2010/2011 27 Corso: Sistemi Operativi © Danilo Bruschi Partizioni multiple variabili • Numero, dimensione e posizione delle partizioni cambiano col variare dei processi in memoria • Lo stato della memoria si modifica continuamente • • I processi accedono alla memoria centrale Lasciano la memoria per poi rientrarvi, non necessariamente nello stesso posto occupato in precedenza A.A. 2010/2011 28 Corso: Sistemi Operativi © Danilo Bruschi Partizioni multiple variabili: criticità • Gestione delle zone libere e occupate della memoria centrale • Frammentazione esterna • Degli spazi liberi A.A. 2010/2011 29 Corso: Sistemi Operativi © Danilo Bruschi Frammentazione esterna • Frazionamento della memoria libera in piccoli pezzi inutilizzabili • Una possibile soluzione è l adozione di strategie di compressione della memoria centrale • Operazione molto costosa in termini di efficienza del sistema • Non esistono strategie ottimali A.A. 2010/2011 30 Corso: Sistemi Operativi © Danilo Bruschi Paginazione • Problema: con gli schemi a partizione è possibile caricare in memoria un processo solo quando si trova una porzione di memoria contigua, che possa contenere l intero processo => il processo di allocazione può richiedere parecchio tempo • Soluzione • Suddivido la memoria fisica e logica in blocchi di dimensioni uguali (1024 byte), chiamo i primi frame e gli altri pagine , carico un processo quando ho a disposizione un numero di pagine sufficiente a contenerlo A.A. 2010/2011 31 Corso: Sistemi Operativi © Danilo Bruschi Paginazione Frame 0 Frame 1 Frame 2 Pagina 1 Frame 3 Pagina 2 Frame 4 Pagina 3 Frame 6 Pagina 4 Frame : Frame n-1 Frame n A.A. 2010/2011 32 Corso: Sistemi Operativi © Danilo Bruschi Paginazione • In un sistema paginato gli indirizzi logici di memoria sono espressi da una coppia <p,d>, a cui va associato in fase di esecuzione un indirizzo fisico lineare, che esprime la locazione esatta del dato o istruzione in memoria A.A. 2010/2011 33 Corso: Sistemi Operativi © Danilo Bruschi Calcolo degli indirizzi • In un sistema paginato con pagine di 256 byte l indirizzo 26251 sarà rappresentato dalla copia • p = 26251 DIV 256 = 102 • d = 26252 MOD 256 = 139 • Per conoscere l indirizzo fisico associato alla locazione di indirizzo logico <102, 139> dobbiamo conoscere in quale frame è stata caricata la pagina 102 • Indirizzo fisico = n.ro frame* 256 + d A.A. 2010/2011 34 Corso: Sistemi Operativi © Danilo Bruschi Paginazione • Con pagine di dimensione 2k, per il calcolo degli indirizzi fisici si sfrutta l indirizzo logico • I k bit meno significativi dell indirizzo logico individuano lo spiazzamento all interno della pagina • I restanti bit più significativi individuano il numero della pagina • Il numero di pagina si usa come indice nella tabella delle pagine • Il valore trovato in corrispondenza è il numero di page frame associato alla pagina • Se la pagina è presente in memoria, il numero di page frame è copiato nei bit alti del registro di output e concatenato ai k bit bassi dell offset • ES: 26251: 000001100110 10001011 A.A. 2010/2011 35 Corso: Sistemi Operativi © Danilo Bruschi Tabella delle pagine A.A. 2010/2011 36 Corso: Sistemi Operativi © Danilo Bruschi Supporti necessari • Un sistema che offre la paginazione deve gestire le seguenti strutture dati • Tabella dei frame • Tabella delle pagine, che definisce l associazione pagina à frame • una per ogni processo in esecuzione o in attesa di esecuzione • Per ogni riferimento a memoria è necessario accedere alla tabella della pagine, l operazione deve essere resa efficiente con il supporto dell HW A.A. 2010/2011 37 Corso: Sistemi Operativi © Danilo Bruschi Tabella delle pagine Elemento di una tabella delle pagine A.A. 2010/2011 38 Corso: Sistemi Operativi © Danilo Bruschi Tabella delle pagine • La dimensione della tabella può essere molto elevata • Con pagine di 4KB • 1 milione di pagine con indirizzi di 32 bit, quindi 1 milione di elementi nella tabella • L associazione pagina- frame deve essere molto efficiente • Eseguita per ogni riferimento alla memoria • Un istruzione richiede almeno 1 accesso • Servono soluzioni specifiche A.A. 2010/2011 39 Corso: Sistemi Operativi © Danilo Bruschi Tabella delle pagine a due livelli Top-level " page table" A.A. 2010/2011 40 Corso: Sistemi Operativi © Danilo Bruschi Tabella delle pagine invertita La tabella indicizza i frame di memoria fisica Un TLB permette la ricerca delle pagine più usate A.A. 2010/2011 41 Corso: Sistemi Operativi © Danilo Bruschi Paginazione • Procedura di caricamento di un programma in un ambiente multiprogrammato 1. Long term scheduling verifica disponibilità dei frame in memoria centrale 2. Il processo viene caricato in MC e la sua tabella delle pagine compilata e agganciata al PCB 3. Quando il processo va in esecuzione la sua tabella delle pagine viene caricata in quella del sistema A.A. 2010/2011 42 Corso: Sistemi Operativi © Danilo Bruschi Tabella delle pagine di sistema • Esistono tre alternative per implementarla • Registri specializzati • Molto efficiente in esecuzione ma molto costosa per tabelle di grosse dimensioni, soprattutto in context switch • Esiste un registro che indirizza la tabella delle pagine del processo in esecuzione, tra quelle di tutti i processi del sistema; la tabella sta in memoria • Lenta richiede due accessi a memoria centrale per recuperare le informazioni • Registri associativi • Implementano un Translation Lookaside Buffer di 32-1024 elementi A.A. 2010/2011 43 Corso: Sistemi Operativi © Danilo Bruschi TLBs – Translation Lookaside Buffers A.A. 2010/2011 44 Corso: Sistemi Operativi © Danilo Bruschi TLB A.A. 2010/2011 45 Corso: Sistemi Operativi © Danilo Bruschi