Definizione

La memoria virtuale permette di eseguire proessi che non sono interamente in memoria centrale o che sono piú grandi della memoria fisica e di semplificare la condivisione di memoria in modo trasparente al programmatore

Implementazione

Se la memoria é paginata, la MV viene implementata con la richiesta di paginazione, eseguita dal paginatore: un processo viene avviato caricando 0 o piú pagine in altrettanti frame; quando il processo tenterá di accedere a una pagina non caricata, il SO, verificato che si tratti di una richiesta valida da page fault, il processo viene messo in attesa e la pagina caricata da disco messa in un frame libero, successivamente viene fatto ripartire il processo.

Se peró non vi sono frame liberi in cui caricare la pagina, la si puó sostituire con una giá presente scaricando quest’ultima in una area di swap, da cui verrá salvata su disco quando il paginatore é inattivo.

Scelta di una vittima

Esistono vari tipi di algoritmi per scegliere una vittima

FIFO

La vittima scelta é la pagina piú vecchia, é un algoritmo semplice ma le performances non sono buone, siccome non é detto che una pagina caricata da tempo sia meno utilizzata di altre.

LRU

La vittima scelta é la pagina inutilizzata da piú tempo, é l’algoritmo migliore e si puó implementare aggiungendo un timestamp ad ogni entry della tabella delle pagine oppure con uno stack, ponendo di volta in volta in cima la pagina a cui si accede.

Richiede un grande supporto hardware, e dunque si puó semplificare introducendo dei bit di riferimento, uno per ogni entry, che vengono attivati ad ogni accesso e resettati periodicamente, cosí da sapere quali pagine sono state utilizzate dall’ultimo reset.

Last Chance

Questo approccio si estende utilizzando dei bit di riferimento sulle pagine stesse, un’altra soluzione é l’algoritmo della seconda possibilitá, una variante della FIFO: la pagina scelta é la vittima solo se ha il bit di riferimento a 0, altrimenti questo viene impostato a 0 e si procede con la pagina successiva.

Algoritmi basati sul Conteggio

un’altra soluzione cosiste nel tenere traccia dei riferimenti di ogni pagina per scegliere la vittima; si puó procedere scegliendo quella con il valore piú basso, siccome pagine con valori alti saranno utilizzate piú spesso, oppure quella con il valore piú alto, siccome pagine con valori bassi sono caricate da meno tempo.

Allocazione dei frame

Per allocare m frame su n processi si puó procedere in due modi: