Guida per principianti a GNU/Linux: la memoria virtuale

Avatar utente
Etabeta
Messaggi: 945

Guida per principianti a GNU/Linux: la memoria virtuale

Messaggio #1 »

domenica, 1. gennaio 2012, 17:07

Guida per principianti a GNU/Linux: la memoria virtuale

Immagine

Molti, intuitivamente, sanno a cosa serve lo swap con GNU/Linux. Non è, o non dovrebbe essere, un concetto nuovo per chi viene da Windows. Anche il sistema operativo della Microsoft usa un file di swap come memoria virtuale. La differenza principale è che GNU/Linux usa, di norma, una partizione separata anche se è possibile fargli usare un file su una partizione già esistente.
Ma vediamo più precisamente come funziona la memoria virtuale. Supponiamo di avere 1 GB di memoria RAM e una partizione di swap anch’essa di 1 GB. Questo è quello che vedranno i programmi:

Immagine


In altre parole, per i programmi esistono 2 GB di memoria, né più, né meno. Come è vista la cosa, invece, dal processore?

Immagine


Quando un programma tenterà di accedere alla parte dei 2 GB contenuta nello swap, il processore caricherà il “pezzo” che interessa al programma nella memoria RAM, in modo del tutto trasparente all’applicazione.
Esistono diverse strategie per gestire questo meccanismo. A noi basta sapere che esso è in parte hardware (ovvero gestito dal processore stesso) e in parte software. C’è quindi un programma che “sa” che la realtà è diversa (ovvero che i due GB sono in realtà uno in RAM e l’altro sul disco) e questa parte è il kernel.
Il kernel, a differenza del resto dei programmi, infatti, gira in una particolare modalità del processore, chiamata kernel mode o anche, nel caso dei processori Intel dal 386 in poi (e compatibili), modalità protetta.
In questa modalità il processore mette “a nudo” la realtà sottostante, mentre nello user mode crea una realtà “virtuale” (come appunto la memoria virtuale). La modalità protetta è anche quella che permette una gestione avanzata del multitasking.
Appurata questa differenza, nel prossimo post spiegherò la differenza tra i kernel monolitici e i le architetture a microkernel.
Intanto però vediamo quali sono i parametri interessanti per la memoria virtuale in GNU/Linux.
Per prima cosa occorre dire che il kernel Linux può usare anche più di un’area di swap contemporaneamente.
Supponiamo di aver creato una partizione swap con un programma come gparted e di volerla attivare.
Basterà dare:
Citato:
"sudo swapon /dev/sdXY,,
dove sdXY è il dispositivo associato alla partizione creata, ad esempio sda3.

Per disattivarla:
Citato:
"sudo swapoff /dev/sdXY,,

Possiamo rendere permanente l’attivazione tramite la tabella delle partizioni contenuta in /etc/fstab.
Ci basterà aggiungere una riga del tipo:
Citato:
"/dev/sdXY none swap sw 0 0,,


Infine, vediamo come modificare la politica di swap, ovvero fare in modo che il processore usi il più possibile la memoria RAM e solo in caso di estrema necessità lo swap.

Ci basterà modificare un file virtuale della directory /proc/sys:
Citato:
"sudo echo 20 > /proc/sys/vm/swappiness,,

Questo comando semplicemente scrive “20″ nel file swappiness, solo che questo non è un file qualsiasi, ma un file virtuale che rappresenta un parametro di funzionamento del kernel. Ecco un esempio di come sia elegante e semplice gestire “tutto come un file”. Il valore normale è 60, quindi 20 abbassa l’utilizzo dello swap. Questo avviene però a discapito della cache, un meccanismo che in sostanza serve a immagazzinare i dati più usati nella RAM in modo da non doverli leggere dall’hard disk. ;)

Crescia
Etabeta