Capitolo successivo Capitolo precedente Indice

29. Memoria virtuale

La memoria virtuale è una estensione virtuale della memoria centrale attraverso l'utilizzo della memoria di massa. In pratica, l'estensione apparente della memoria RAM avviene attraverso lo scambio con un'area adibita a questo scopo nel disco fisso. Il termine swap deriva da questa continua operazione di scambio.

Utilizzando Linux, se non si dispone di una quantità di memoria RAM molto grande (anche molto superiore a 16MB) è praticamente necessario attivare il meccanismo della memoria virtuale

La tabella (seguente) elenca i programmi e i file a cui si accenna in questo capitolo.


Nome Descrizione
mkswap Inizializza un'area di swap.
swapon Attiva un'area di swap.
swapoff Disattiva un'area di swap.
/etc/fstab Elenco di filesystem e di aree di swap gestiti automaticamente.
Riepilogo dei programmi e dei file per la gestione della memoria virtuale.

29.1 Partizione o file di swap

Con Linux è possibile attivare la gestione della memoria virtuale utilizzando due possibili aree nel disco fisso: una partizione dedicata o un file. Dal momento che possono essere gestite diverse aree di swap conviene attivarne almeno una in una partizione dedicata. In pratica, la partizione di swap dovrebbe consentire almeno la gestione normale del sistema, mentre i file di swap potrebbero servire come un mezzo eccezionale per estenderne la dimensione.

In questo senso, la scelta della dimensione della partizione di swap è importante perché una volta deciso, questa normalmente non può più essere cambiata facilmente. La dimensione massima di un'area di swap è di 128MB e possono esserne definite un massimo di 16. In generale, per la partizione di swap è conveniente utilizzare una dimensione pari ad almeno la stessa quantità della memoria RAM effettiva, con un minimo di circa 10MB.

29.2 Creazione

Prima di poter attivare la gestione dello swap è necessario creare lo spazio in cui questo potrà risiedere. Questo vale anche nel caso in cui si utilizzi lo swap su un file.

Partizione di swap

La creazione di una partizione di swap procede nello stesso modo con cui si crea una qualunque altra partizione. In questo caso non c'è la necessità di eseguire un avviamento del sistema operativo su tale partizione, di conseguenza si possono usare anche partizioni estese (o partizioni logiche).

La creazione della partizione richiede l'utilizzo di fdisk ( fdisk); occorre ricordare in particolare di assegnare alla partizione il tipo corretto di identificatore: 82 (Linux swap).

File di swap

La caratteristica necessaria di un file destinato a fungere da area di swap è quella di essere continuo; non può quindi essere frammentato. Il modo corretto per creare un file con queste caratteristiche è quello di utilizzare il programma dd ( dd) nel modo seguente.

dd if=/dev/zero of=<file-da-creare> bs=4k count=<dimensione>

In questo caso, la dimensione fa riferimento a blocchi di 4KB, pari a quanto stabilito con l'opzione bs=4k. In effetti, la dimensione ottimale di un file del genere è un multiplo di 4KB perché le pagine di memoria, utilizzate durante lo scambio della stessa, sono di questa dimensione.

Per esempio, volendo creare il file di swap /swap1 di 8MB si può procedere come segue.

# dd if=/dev/zero of=/swap1 bs=4k count=2096

Se tutto procede come desiderato si ottiene una risposta del tipo seguente.

2096+0 records in
2096+0 records out

29.3 Inizializzazione

Un'area di swap deve essere inizializzata prima di poterla attivare per il suo scopo. Il programma in grado di farlo è mkswap.

Prima di usare mkswap occorre fare attenzione: l'inizializzazione che viene fatta cancella i dati della partizione o del file.

<!>   Il rischio è quello di inizializzare una partizione sbagliata o un file sbagliato.

<!>   Un'altra cosa da considerare è che non si può inizializzare un'area di swap mentre questa è in uso. Ciò dovrebbe essere intuitivo, ma alle volte si dimentica di fare attenzione a questo particolare.

# mkswap

mkswap [-c] <dispositivo> [<dimensione-in-blocchi>]

mkswap permette di predisporre una partizione o un file per lo swap, ovvero la gestione della memoria virtuale. In generale è preferibile utilizzare una partizione dedicata che può essere creata con l'aiuto di fdisk, definendola come Linux swap.

È preferibile utilizzare tutti gli argomenti, in modo da richiedere un controllo della unità (attraverso l'opzione -c) e specificando anche la dimensione in blocchi (i blocchi sono di 1024 byte in questo caso).

Esempi

# mkswap -c /dev/hda3 33264

Viene inizializzata la partizione di swap /dev/hda3 specificando una dimensione di 33264 blocchi, pari a circa 32MB.

# mkswap -c /swap1 8192

Inizializza il file di swap /swap1 precedentemente creato con una dimensione di 8MB.

29.4 Attivazione e disattivazione della memoria virtuale

Per fare in modo che un'area di swap venga utilizzata per il suo scopo, occorre attivarne la gestione. L'operazione è compiuta dal programma swapon.

Il meccanismo è simile a quello dell'attivazione di un filesystem che si ottiene con il mount dei dischi o delle partizioni. Per questo motivo, l'attivazione delle aree di swap può essere gestita automaticamente attraverso la configurazione del file /etc/fstab.

# swapon

swapon [<opzioni>] [<dispositivo>]

swapon attiva l'utilizzo di un dispositivo per la gestione della memoria virtuale (swap). Di solito si tratta di una partizione o un file di swap creati ed inizializzati appositamente.

Normalmente, swapon viene chiamato da uno degli script della procedura di inizializzazione del sistema e questo allo scopo di attivare le aree di swap previste all'interno del file /etc/fstab.

<!>   Le partizioni o i file di swap attivati manualmente e non quindi con l'ausilio della configurazione del file /etc/fstab devono essere disattivati manualmente prima della conclusione dell'attività di Linux.

Alcune opzioni

-a

Viene attivato lo swap con l'utilizzo di tutti i dispositivi indicati come filesystem swap all'interno del file /etc/fstab. Se si usa questa opzione non deve essere indicato alcun dispositivo negli argomenti.

Esempi

# swapon /dev/hda3

Avvia la gestione dello swap con la partizione /dev/hda3.

# swapon /swap1

Avvia la gestione dello swap con il file /swap1.

# swapon -a

Avvia la gestione dello swap con tutte le partizioni indicate così nel file /etc/fstab.

# swapoff

swapoff [<opzioni>] [<dispositivo>]

swapoff è l'opposto di swapon e si occupa di disattivare lo swap su un particolare dispositivo o file per lo swap, oppure su tutti quelli indicati nel file /etc/fstab.

Utilizza la stessa sintassi e le stesse opzioni di swapon. In effetti si tratta normalmente solo di un link al programma swapon che si comporta così quando viene avviato con questo nome: swapoff.

<!>   Le partizioni o i file di swap attivati manualmente e non quindi con l'ausilio della configurazione del file /etc/fstab devono essere disattivati manualmente prima della conclusione dell'attività di Linux.

Esempi

# swapoff /dev/hda3

Termina la gestione dello swap con la partizione /dev/hda3.

# swapoff /swap1

Termina la gestione dello swap con il file /swap1.

# swapoff -a

Termina la gestione dello swap con tutte le partizioni indicate così nel file /etc/fstab.

Gestione automatica attraverso /etc/fstab

Per quanto riguarda la gestione dello swap, il file /etc/fstab permette di definire quali partizioni e file debbano essere utilizzati automaticamente per questo scopo.

La configurazione di fstab per lo swap è praticamente obbligatoria, a meno di non voler ogni volta provvedere ad attivare e disattivare la memoria virtuale attraverso l'uso diretto di swapon e swapoff.

L'esempio seguente mostra due ipotetici record di fstab per l'attivazione della partizione /dev/hda3 e del file /swap1.

# nome         collegamento  Tipo    Opzioni

...

/dev/hda3      none          swap    sw
/swap1         none          swap    sw

 

1997.10.26 - Scritto da Daniele Giacomini   daniele@calion.com   (vedi copyright: Appunti Linux).


Capitolo successivo Capitolo precedente Indice