Guida per principianti a GNU/Linux: la memoria virtuale

La traduzione da memoria virtuale a memoria fisica

La 'traduzione' da memoria virtuale a memoria fisica

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:

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

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:

sudo swapon /dev/sdXY

dove sdXY è il dispositivo associato alla partizione creata, ad esempio sda3.

Per disattivarla:

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:

/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 (ricordate?)

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.

6 Risposte a “Guida per principianti a GNU/Linux: la memoria virtuale”


  1. 1 spillo 10 Agosto 2008 alle 16:30

    ottimo… senza dimenticare che è facile sia usare i file come swap in linux oppure le partizioni come swap in windows ;)

    bell’articolo guiodic, magari da approfondire un po’ ma ben scritto :)

  2. 2 denis 10 Agosto 2008 alle 21:53

    Ciao Guido, commento su questo tuo ultimo articolo dopo aver passato oltre un’ora a leggermi gli altri.
    Complimenti per il modo in cui spieghi, complimenti davvero.

    Denis

  3. 3 guiodic 10 Agosto 2008 alle 23:25

    Grazie denis :)

  4. 4 innovatel 11 Agosto 2008 alle 12:01

    Io ho sempre saputo e fatto –>

    Partizione Swap = 2 * RAM

  5. 5 Davide T. 11 Agosto 2008 alle 12:14

    Ma se invece ho gia 2gb di ram e non voglio memoria di swap, che dovrei fare? Ci sono degli inconvenienti in ciò?

  6. 6 guiodic 11 Agosto 2008 alle 12:36

    Gli sviluppatori del kernel suggeriscono (http://kerneltrap.org/node/3202) di avere comunque lo swap. In questo modo è possibile dare più spazio alla cache. Andrew Morton (il n.2 del team dopo Torvalds) sostiene addirittura che è meglio impostare lo swappiness a 100, per fare swappare spesso applicazioni e dati poco usati a favore, invece di quelli molto usati.
    Comunque a parte ciò non ci sono particolari controindicazioni. Per togliere lo swap basta eliminare la riga da fstab.
    Attenzione: non sarà però più possibile fare l’ibernazione (suspend to disk) perché essa usa proprio lo spazio swap.
    Quanto alla dimensione, al giorno d’oggi RAM*2 è un’esagerazione. Con 1 GB di RAM la swap sarà usata molto poco, o addirittura per nulla.


Lascia una Risposta




Firefox 3.5 su Ubuntu

Feed RSS Guiodic Blog

RSS Guiodic Blog
intervista a Richard Stallman

 

Agosto 2008
L M M G V S D
« Lug   Set »
 123
45678910
11121314151617
18192021222324
25262728293031

Archivi

Antipixel