Gestione della memoria
La memoria virtuale
La memoria virtuale è una tecnica che permette di eseguire processi che non sono contenuti completamente in memoria, offrendo la possibilità di eseguire programmi aventi dimensioni maggiori della memoria fisica stessa. Infatti, non è detto che un programma debba essere utilizzato interamente e, anche quando è necessario, non per forza le sue istruzioni sono necessarie tutte in una volta. Si fonda sulla separazione della memoria logica percepita dall'utente dalla memoria fisica.
Una soluzione al problema degli algoritmi di gestione relativi alla memoria centrale, i quali richiedono che le istruzioni da eseguire si trovino caricate nella memoria, è quella di caricare lo spazio degli indirizzi logici del processo in memoria fisica. Anche nel caso della memoria virtuale è possibile organizzare la memoria fisica in frame di pagine; in questo caso i frame delle pagine fisiche assegnati ai processi possono non essere contigui e spetta alla MMU associare in memoria le pagine logiche alle pagine fisiche.
Il caricamento parziale dei programmi è vantaggioso per vari motivi:
- Un programma non è più vincolato dalla memoria fisica disponibile e i programmatori possono scrivere programmi per uno spazio degli indirizzi virtuali più ampio. Lo spazio degli indirizzi virtuali si riferisce alla collocazione dei processi in memoria dal punto di vista logico, o virtuale;
- Aumenta la produttività e l'utilizzo della CPU in quanto è possibile eseguire più programmi contemporaneamente;
- Ogni programma utente è eseguito più rapidamente in quanto diminuiscono le operazioni di I/O.
La memoria virtuale offre la possibilità di condividere i file e la memoria mediante la condivisione delle pagine, con i seguenti vantaggi:
- È possibile condividere le librerie, le quali sono ospitate da pagine condivise;
- La memoria condivisa tra due processi è vista come parte dello spazio degli indirizzi virtuali;
- Mediante la fork() si può permettere la condivisione delle pagine al momento della creazione del processo.
Paginazione su richiesta
Una tecnica adottata dai sistemi con memoria virtuale è la paginazione su richiesta, che permette di caricare le pagine in memoria solo quando sono necessarie (paginazione su richiesta pura), riducendo il tempo d'avvicendamento e la quantità di memoria fisica richiesta.
Il modulo del sistema operativo che si occupa di sostituire le pagine è detto paginatore. Quando un processo sta per essere caricato in memoria, il paginatore ipotizza quali pagine saranno usate e le trasferisce in memoria. Per distinguere le pagine caricate in memoria da quelle presenti nei dischi si utilizza il bit di validità:
- Se è impostato su valido significa che la pagina è appunto valida e presente in memoria;
- Se è impostato su non valido significa che la pagina non è valida, oppure che lo è ma è nel disco.
Se il processo tenta di accedere a una pagina che non è stata caricata in memoria o che non è valida, si verifica un'eccezione di pagina mancante. Questa eccezione viene gestita in questo modo:
- Si controlla una tabella interna del processo, memorizzata nel PCB, per capire se il riferimento alla pagina fosse valido o non valido;
- Se il riferimento non era valido, si termina il processo, se lo era ma la pagina non era ancora stata caricata in memoria si effettua il caricamento;
- Si individua un frame libero;
- Si programma un'operazione sui dischi per trasferire la pagina nel frame;
- Terminata l'operazione, si modificano la tabella interna al PCB e la tabella delle pagine per indicare che la pagina si trova attualmente in memoria;
- Si riavvia l'istruzione interrotta dal segnale di pagina mancante.
-
Tecniche di Memoria Virtuale nella gestione delle Memorie nei Sistemi Operativi
-
Gestione della memoria centrale
-
Gestione dei File System nei Sistemi Operativi
-
Sistemi Operativi - Gestione VM e Processi