120 likes | 418 Views
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.
E N D
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 run-time 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. Programma Part 1 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.
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. Partizioni dinamiche SO 100K 150K 180K 210K 250K 300K PG1 PG2 PG3
Frammentazione • Gli spazi residui in memoria possono essere: • Troppo piccoli per contenere un programma • La loro dimensione totale contiene invece un programma. • Questa condizione è detta di frammentazione dello spazio residuo. SO 100K 150K 180K 210K 250K 300K PG1 PG2 PG3
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.