La memoria virtuale permette di eseguire processi che non sono completamente in memoria centrale o piú grandi della memoria fisica e di condividere memoria facilmente.

Un processo viene avviato caricando 0+ pagine in altrettanti frame, quando tenterá di accedere ad una pagina non caricata, genererá un page fault poiché il bit di invaliditá é settato, il SO dopo aver verificato che non sia davvero un accesso illegale caricherá dal disco la pagina richiesta, inserendola in un frame, dopodiché riavvierá l’istruzione interrotta.

Paginatore

Questa attivitá é delegata al paginatore, che carica le pagine solo se necessarie. Permette di caricare solo il minimo necessario e funziona anche per file mappati in memoria.

Il numero minimo di frame di un processo dipende dall’architettura.

Prestazione

Il tempo di accesso effettivo dipende dal tasso di page fault, un accesso ad una pagina caricata richiede pochi ns ma in caso contrario servono decine di ms per gestire il page fault e l’accesso al disco, deve essere raro per non rallentare il sistema.

Fork()

La chiamata fork() crea una copia del processo che lo chiama. Spesso peró il nuovo processo chiama subito exec() che lo sostituisce con un altro programma.

Copy on write

É bene assegnare ad entrambi lo stesso spazio di indirizzamento e se uno modifica una pagina, sará copiata nello spazio logico, risparmiando memoria e velocizzando la chiamata.

Molte pagine non sono modificabili, il che permette altro risparmio.

vfork()

la chiamata vfork funziona analogamente alla fork() ma senza copy on write.

Gestione della memoria

Le applicazioni in grado di gestire la memoria automaticamente hanno prestazioni scarse con la memroai virtuale, i processi realtime possono chiedere all’OS di tenere residenti alcune pagine per evitare ritardi.

Sostituzione della pagina

Quando un processo richiede una nuova pagina, potrebbero non esserci frame liberi in cui caricarla, in tal caso si puó sostituirla ad una giá presente trasferendola in area di swap, assegnando nuovi frame solo se necessario.

La pagina ideale da sostituire é quella che non sará usata per piú tempo.

Per ridurre il tempo prima che il processo riprenda, il SO puó tenere dei frame liberi in cui caricare la pagina richiesta, dandola al processo mentre quella da scaricare é in coda di I/O.