Memoria La memoria è un vettore di stringhe di bit (word/parole) In memoria è allocato il Sistema Operativo. In memoria sono allocati i programmi per poter essere processati. I programmi possono essere ripetutamente spostati in memoria e dalla memoria al disco rigido in modo da poter tenere in memoria quello che serve. Ogni volta la posizione “fisica” in memoria cambia. Rilocazione della memoria Tecnica con cui si traducono gli indirizzi virtuali in quelli fisici. Rilocazione statica: il programma va tutto in memoria prima della sua esecuzione Rilocazione dinamica: in memoria fisica viene allocato runtime solo la porzione di codice che serve. Allocazione A singola partizione: oltre alla fetta per il S.O., quella residua è occupata da un unico programma (sistemi monoprogrammati). A partizioni multiple: oltre alla fetta occupata dal S.O. La parte residua è divisa in più parti di dimenzioni prestabilite. S.O. S.O. Part 1 Programma Part 2 Part 3 Partizioni statiche La dimensione delle partizioni è stabilita dal sistemista. Il numero è stabilito dal sistemista. Non si può più variarle o solo se si riconfigura tutto. Vantaggio: gestione semplice della memoria Svantaggio: spreco di spazio inutilizzato o Svantaggio: impossibilità a caricare programmi troppo grandi. Partizioni dinamiche Le partizioni non sono fissate a priori. Ogni volta che il MMU deve allocare un programma in RAM ne viene creata una La loro dimensione è variabile Il loro numero è variabile Partizioni dinamiche Tabella delle partizioni: il MMU dispone di una tabella dove sono annotati indirizzi e dimensioni delle partizioni. Tabella delle aree libere: il MMU dispone di una tabella dove sono annotati indirizzi e dimensioni delle aree libere. ID DIM IND 100K 1 50 100 150K 2 50 180 3 50 250 ID DIM IND 1 30 150 2 40 210 SO PG1 180K PG2 210K 250K PG3 300K Frammentazione Gli spazi residui in memoria possono essere: Troppo piccoli per contenere un programma La loro dimensione totale contiene invece un programma. SO 100K PG1 150K 180K PG2 210K Questa condizione è detta di frammentazione dello spazio residuo. 250K PG3 300K Paginazione La memoria centrale è suddivisa in blocchi di eguale dimensione. I programmi sono divisi in parti chiamate pagine. Pagine e blocchi hanno eguali dimensioni. Un programma può essere allocato in memoria se ci sono un numero di blocchi liberi superiore a quello delle pagine in cui il programma è diviso. Con la paginazione, infatti, le pagine di uno stesso programma che sono contigue vengono allocate in memoria anche se i blocchi non sono contigui. In questo modo si evita la frammentazione. Paginazione È necessario avere due Tabelle: Tabella dei blocchi di memoria. Tabella delle pagine in memoria. La memoria virtuale I programmi non sono realmente caricati in memoria per intero, ma solo parzialmente, per quella parte che è in esecuzione in un certo istante. Ogni programma è suddiviso in fette (pagine o segmenti) La memoria è suddivisa in blocchi Anche programmi ampi possono essere elaborati, basta portare in memoria la “fetta” che interessa e rimetterla nel disco dopo che è stata processata. La memoria virtuale Virtualmente possiamo avere una memoria virtuale grande quando vogliamo gestendo ogni volta swap-in e swap-out Realisticamente, lo swapping è una operazione lenta perchè coinvolge il disco rigido che è lento rispetto alla ram. Una memoria virtuale eccessiva rallenta il sistema. Si deve spezzettare il programma Si deve caricare in memoria solo alcuni pezzetti lasciando il resto su memoria di massa Se serve una pagina non presente in rama si carica da disco (interrupt di page fault). La segmentazione È alternativa alla paginazione I programmi non sono divisi in fette di dimensione fissa ma in fette di dimensione variabile La divisione in fette non è basata su un criterio di spazio fisico disponibile ma è fatta dal programmatore sulla base del contenuto del programma usando un criterio logico Il programmatore può decidere di usare segmenti più piccoli per certe parti del programma che usano molti dati da memorizzare. La divisione è più efficiente.