Guida La memoria virtuale (Sistema Operativo)

Stato
Discussione chiusa ad ulteriori risposte.

syscall

Utente Emerald
21 Settembre 2013
683
43
581
475
Ultima modifica da un moderatore:
Parliamo di memoria virtuale, e stavolta iniziamo subito, senza ulteriori introduzioni!

La memoria virtuale e' una tecnica che permette di: eseguire processi che possono anche non essere completamente residenti in memoria; e astrarre la memoria centrale in un vettore molto grande e uniforme, separando la memoria logica da quella fisica, permettendo di sfruttare uno spazio di indirizzi virtuali piu' ampio della memoria fisica disponibile.

La si puo' realizzare con due tecniche, quali:

- La paginazione su richiesta
- La segmentazione su richiesta

In genere, si realizza con la paginazione su richiesta, nella quale i processi risiedono in memoria secondaria e, per eseguirli, anziche' caricarli totalmente in memoria, si esegue il criterio dell'avvicendamento 'pigro' (cercate lazy swapping su google per maggiori informazioni), cioe' si considera il processo con una sequenza di pagine e si caricano in memoria centrale solo quelle necessarie.

Il modulo del sistema operativo che si occupa della sostituzione delle pagine e' detto "paginatore" e i meccanismi che servono per realizzare la paginazione su richiesta sono:

1) La tabella delle pagine, dove si indicano i bit di validita', ovvero se bit ==1 vuol dire che la pagina e' presente, in caso contrario la pagina non e' valida o e' presente in un disco, quindi la tabella conterra' l'indirizzo per trovarla.


2) La memoria ausiliaria: costituita da un disco ad alta velocita' che conserva le pagine non caricate nella memoria.

Se durante l'esecuzione, un processo tenta di accedere ad una pagina non caricata, l'architettura di paginazione inviera' un'eccezione di pagina mancante al sistema operativo.
Verranno salvati i registri e lo stato del processo e sara' determinata la natura dell'eccezione.

A questo punto si leggera' dal disco e si trasferira' la pagina in un blocco di memoria libero.

La paginazione su richiesta' puo' pero' avere un effetto significativo sulle prestazioni di un computer.
Si puo comunque arrivare ad un punto in cui non vi siano piu' blocchi liberi da assegnare alle pagine richieste, in questi casi si potra':

1) Terminare il processo riducendo il grado di multiprogrammazione;
2) Ricorrere ad un algoritmo di sostituzione delle pagine, scegliendo una pagina "vittima" da scaricare dalla memoria, e caricando in quel blocco la pagina richiesta.

Le politiche di sostituzione di una pagina sono le seguenti:

1) Secondo l'ordine di arrivo.

Si sostituisce la pagina che e' da piu' tempo in memoria usando una coda FIFO (che abbiamo visto precedentemente, sulla guida concernente la gestione delle periferiche, susu, se non ricordate tornate a leggere pure quella!).
Comunque, non e' una soluzione ottimale, poiche' la pagina potrebbe servire a breve e "soffre" dell'anomalia di belady, ovvero la frequenza dei page fault con l'aumento dei blocchi in memoria assegnati.

Per approfondire, e dovete farlo (in questo caso), vi rimando qui: Anomalia di Belady

2) Ottimale.

Si sostituisce la pagina che non si usera' per il periodo di tempo piu' lungo, ottimale appunto, ma e' di difficile realizzazione.

3) LRU.

Associa ad ogni pagina l'istante in cui e' stata usata l'ultima volta.
La "vittima" sara' la pagina meno recentemente usata. Per realizzarlo si puo' usare un contatore, dove la "vittima" sara' quella con il valore minimo.

4) Reference Bits.

Si conservano nella memoria un gruppo di bit di riferimento per ogni pagina ad intervalli regolari. I bit di riferimento si traslano di una posizione verso il bit meno significativo e quello piu' significativo verra' inizializzato a 0.
La "vittima" sara' quella con associato il gruppo di bit avente il valore minore.

5) Second chance.

I bit di riferimento vengono strutturati secondo una coda circolare. Un puntatore scandisce la coda mettendo a 0 i bit con valore 1 e dando loro una "seconda possibilita'", e passando all'elemento successivo finche' non incontrera' uno 0, che diventera' la pagina "vittima".

6) S.C migliorato.

Si usano due bit, dove uno e' di riferimento, l'altro di modifica.
La migliore "vittima" sara' la pagina con entrambi i bit impostati a 0, ovvero quelli usati meno recentemente.

7) LFU/MFU.

Si basa sul conteggio dei riferimenti fatti ad ogni pagina.
Nel primo caso si suppone che, se una pagina e' stata usata tanto verra' richiesta ancora.
Nel secondo caso si suppone che se il conteggio e' basso, la pagina potrebbe non essere ancora stata utilizzata e sara' necessaria.

Esistono anche algoritmi usati per assegnare i blocchi di memoria:

1) Assegnazione uniforme.

Assegnare a ciascun processo un numero di blocchi pari al risultato

2) Assegnazione proporzionale.

Si assegna la memoria disponibile in base alle dimensioni del processo.
Nel caso in cui vi siano piu' processi in competizione, la sostituzione potra' essere:

- Locale: un processo sceglie un blocco dal suo insieme di blocchi
- Globale: un processo puo' scegliere un blocco dall'insieme di tutti i blocchi, anche quelli di altri processi.

Un elevato tasso di occorrenza di pagefault, causato da un elevato tasso di multiprogrammazione, puo' portare al trashing (*tadannnnn*, si parla anche di questo, ovunque, Thrashing (computer science)), dove, da un certo punto in poi, crolla l'uso della CPU, poiche 'si spendera' piu' tempo per la paginazione che per l'esecuzione dei processi.

Questa situazione si puo' prevenire in due modi:

1) Modello dell'insieme di lavoro: si definisce un insieme di pagine usate attivamente e una finestra di lavoro, contenente i riferimenti piu' recenti.
L'insieme di lavoro assegna opportunamente un numero di blocchi di memoria.

2) Frequenze delle assenze di pagina (PFF): si definisce un limite inferiore e superiore alla frequenza di asenze di pagina.
Se si supera il limite superiore, al processo verranno dati piu' blocchi, mentre se si scende sotto al limite, si toglieranno i blocchi assegnati a quel dato processo.

Come al solito vi lascio alcune note per approfondire, per quest'argomento che e' molto bello, consiglio vivamente di farlo. Ricordate comunque, come al solito, di leggere anche quei piccoli rimandi che ho scritto all'interno del testo e di rivedervi gli argomenti passati per una migliore comprensione.

- http://www.istitutomontani.it/appunti/150/memoriavirtuale.pdf
- http://www.dsi.unive.it/~arch/AA98-99/LUCIDI-98-99/virtuale1.pdf
- Slide carine in ppt sugli algoritmi di sostituzioni + immagini
- Memoria virtuale (introduzione + paginazione su richiesta + gestione dei page fault)

Andatevi a cercarvi, sempre sul forum (sezione "informatica zone"), le altre guide in merito alla teoria sul funzionamento di un sistema operativo, che vi consiglio di leggere comunque prima di affrontare l'argomento di cui abbiamo scritto.

Successivamente scriveremo degli ultimi due argomenti che reputo quelli conclusivi per l'argomento, ovvero la protezione dei file e la gestione della memoria paginata.

STAY TUNED!
 
  • Mi piace
Reazioni: lonju21995 e Asahi
Stato
Discussione chiusa ad ulteriori risposte.