Gestione della Memoria 1 Gestione della Memoria • Idealmente la memoria dovrebbe essere – grande – veloce – non volatile • Gerarchia di memorie – Disco: capiente, lento, non volatile ed economico – Memoria principale: volatile, mediamente grande, veloce e costosa – Cache: volatile, veloce, piccola e costosa • La gerarchia di memorie e’ gestita dal “memory manager” (gestore della memoria) 2 Tipica Gerarchia di Memoria • Sia il tempo di accesso che la capacità sono approssimazioni abbastanza grossolane 3 Gestione della memoria • Tutti i programmi che compongono il SO ed i programmi applicativi attivi usano contemporaneamente la RAM • Il gestore della memoria si preoccupa di fare condividere la RAM ai vari processi in esecuzione in modo che : – ogni processo abbia il suo spazio privato distinto dagli altri (e inaccessibile agli altri) – ogni processo abbia abbastanza memoria per eseguire il proprio algoritmo e raccogliere i suoi dati 4 Modelli di gestione della memoria • Modelli che non spostano i processi dalla RAM una volta iniziata l’esecuzione – monoprogrammazione – multiprogrammazione a partizioni fisse • Modelli che spostano un processo in esecuzione da RAM a disco – swapping – paginazione 5 Introduzione alla Gestione della Memoria Ambiente monoprogrammato senza swapping nè paginazione Tre modi semplici di organizzare la memoria - un sistema operativo con un solo processo utente 6 Ambiente multiprogrammato con partizioni fisse • Partizioni fisse – Con code dei job distinte per ogni partizione – Con unica coda dei job 7 Swapping • Caricamento in partizioni variabili • L’allocazione della memoria cambia quando: – I processi vengono caricati in memoria – I processi rilasciano la memoria 8 Swapping • Problema: la frammentazione della memoria – molte aree piccole – compattazione • Problema: stabilire quanto spazio allocare per ogni processo – area dati, stack • Problema: come tenere traccia della memoria libera 9 Allocazione della Memoria Allocazione di un blocco di memoria di dimensione x: • First Fit – Individua la prima porzione di memoria libera di dimensione x • Best Fit – Individua la più piccola porzione di memoria libera di dimensione x 3 10 Gestione della memoria • Le strategie viste finora – ricopiano interamente lo spazio di indirizzamento di un processo P da memoria secondaria a RAM quando P va in esecuzione AmpiezzaRAM - 1 RAM vuota Spazio Ind processo 2 Spazio Ind processo 1 Sistema Operativo 0 Area riservata, non accessibile in modalità utente 11 Gestione della memoria • Problemi: – limite all’ampiezza dello spazio di indirizzamento • Attualmente ogni processo usa almeno 4GB di spazio di indirizzamento, con RAM assai più piccole… – memoria sottoutilizzata • aree dello spazio di indirizzamento che non sono utilizzate occupano RAM • Soluzione: memoria virtuale – ad ogni istante carico in RAM solo le parti di SI che servono per una certa fase dell’esecuzione – diverse soluzioni: vedremo la paginazione 12 Paginazione: idea base • Lo spazio di indirizzamento di ogni processo è diviso in ‘fette’ (pagine logiche) tutte della stessa ampiezza 0 1 2 3 4 .. Processo 1 0 1 2 3 4 .. Pagina Logica: ‘fetta’ dello spazio di indirizzamento (1-4K) Processo 2 0 1 2 3 4 .. Processo 3 13 Paginazione: idea base – Anche la RAM disponibile per i processi utente è divisa in pagine della stessa ampiezza (pagine fisiche) Pagina Fisica: ‘fetta’ dello RAM stessa ampiezza della pagina logica RAM vuota RAM vuota RAM RAM vuota vuota Sistema Operativo 14 Paginazione: idea base – Ad ogni istante solo le pagine necessarie per i processi in esecuzione sono caricate in RAM (si usa la località!) 0 1 2 3 4 .. 0 1 2 3 4 .. RAM vuota Processo 1 RAM vuota Processo 2 0 1 2 3 4 .. Processo 3 Sistema Operativo 15 Paginazione: problema • Esecuzione (corretta) dei programmi utente parzialmente caricati: – bloccare automaticamente accessi ad aree non caricate in RAM (page fault) – aggiornare automaticamente l’insieme delle pagine in memoria • scaricando/caricando da memoria secondaria quelle necessarie in una certa fase 16 Paginazione • Cosa succede se la pagina non è in memoria? – Presente-Assente = 0, si genera un page fault – l’esecuzione del processo viene bloccata – va in esecuzione il gestore della memoria – la pagina logica viene localizzata su disco e caricata in RAM – se la RAM è piena si individua una pagina vittima da scaricare dalla RAM – algoritmi di sostituzione : servono a selezionare la pagina vittima 17 Algoritmi di Sostituzione • Il page fault forza la scelta su quale pagina deve essere rimossa – Libera memoria per la pagina da caricare • Pagine modificate devono essere salvate – Quelle non modificate vengono semplicemente sovrascritte • Deve evitare di selezionare una pagina riferita spesso – Potrebbe essere necessario ricaricarla in breve tempo 18 Algoritmo di Sostituzione Ottimo • Sostituisce la pagina che sarà riferita nell’istante più lontano nel tempo – Ottimo ma non realizzabile 19 Least Recently Used (LRU) • Assume che le pagine usate di recente siano riferite di nuovo in breve tempo (località temporale) – Scarica le pagine inutilizzate da più tempo • Implementazione diretta: mantiene una lista di pagine – Le pagine usate più di recente in cima – Aggiorna la lista ad ogni riferimento della memoria!! • Impl. Approssimata: mantiene un contatore per ogni descrittore della tabella delle pagine 20 Algoritmo di Sostituzione “Working Set” • Working set (idea di base) – insieme di pagine necessarie ad un processo P in una fase della propria elaborazione • es. due array globali A,B (dati), più istruzioni di copia (testo) • Paginazione su domanda (a richiesta) – P passa in esecuzione senza alcuna pagina in memoria – le pagine vengono caricate quando avviene un page fault – lento finché non è stato caricato il working set • Pre-paginazione (prepaging) – il sistema tiene traccia del working set – l’ultimo working set di P viene caricato in memoria prima di riavviare il processo 21