La memoria virtuale è un'estensione 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 inglese swap deriva da questa continua operazione di scambio.
Utilizzando GNU/Linux, se non si dispone di una quantità di memoria RAM molto grande (anche molto superiore a 16 Mbyte) è praticamente necessario attivare il meccanismo della memoria virtuale
La tabella 43.1 elenca i programmi e i file a cui si accenna in questo capitolo.
Nome | Descrizione |
mkswap | Inizializza un'area di scambio della memoria. |
swapon | Attiva un'area di scambio della memoria. |
swapoff | Disattiva un'area di scambio della memoria. |
/etc/fstab | Elenco di filesystem e di aree di scambio gestiti automaticamente. |
Con GNU/Linux è possibile attivare la gestione della memoria virtuale utilizzando due tipi di aree nel disco fisso: una partizione dedicata o un file. Dal momento che possono essere gestite diverse aree di scambio, conviene attivarne almeno una, utilizzando una partizione dedicata. In pratica, la partizione di scambio dovrebbe consentire almeno la gestione normale del sistema, mentre i file di scambio potrebbero servire come un mezzo eccezionale per estenderne la dimensione.
In questo senso, la scelta della dimensione della partizione di scambio è importante perché una volta deciso, questa normalmente non può più essere cambiata facilmente. La dimensione massima di un'area di scambio è di 128 Mbyte e possono esserne definite un massimo di 16. In generale, per la partizione di scambio è conveniente utilizzare una dimensione pari ad almeno la stessa quantità della memoria RAM effettiva, con un minimo di circa 20 Mbyte.
Prima di poter attivare la gestione della memoria virtuale è necessario creare lo spazio in cui potranno risiedere le aree di scambio relative. Questo vale anche nel caso in cui per questo si vogliano utilizzare dei file.
La creazione di una partizione di scambio per la memoria, procede nello stesso modo con cui si crea una qualunque altra partizione. In questo caso non c'è la necessità di eseguire un avvio del sistema operativo su tale partizione, di conseguenza si possono usare anche partizioni logiche contenute in partizioni estese.
La creazione della partizione richiede l'utilizzo di fdisk
, oppure di cfdisk
, e occorre ricordare in particolare di assegnare alla partizione il tipo corretto di identificatore: 82
(Linux swap).
La caratteristica necessaria di un file destinato a fungere da area di scambio è 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
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 4 Kbyte, pari a quanto stabilito con l'opzione bs=4k
. In effetti, la dimensione ottimale di un file del genere è un multiplo di 4 Kbyte perché le pagine di memoria, utilizzate durante lo scambio della stessa, sono di questa dimensione.
Per esempio, volendo creare il file di scambio /swap1
di 8 Mbyte si può procedere come segue:
#
dd if=/dev/zero of=/swap1 bs=4k count=2096
Se tutto si conclude come desiderato, si ottiene una risposta del tipo seguente:
2096+0 records in 2096+0 records out |
Un'area di scambio 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 scambio mentre questa è in uso. Ciò dovrebbe essere intuitivo, ma alle volte si dimentica di fare attenzione a questo particolare. |
mkswap [
|
mkswap
permette di predisporre una partizione o un file per lo scambio, 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 dell'unità (attraverso l'opzione
) e specificando anche la dimensione in blocchi (i blocchi sono di 1024 byte in questo caso).
-
c
#
mkswap
-
c /dev/hda3 33264
Viene inizializzata la partizione di scambio /dev/hda3
specificando una dimensione di 33264 blocchi, pari a circa 32 Mbyte.
#
mkswap
-
c /swap1 8192
Inizializza il file di scambio /swap1
creato precedentemente con una dimensione di 8 Mbyte.
Per fare in modo che un'area di scambio 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 montaggio dei dischi o delle partizioni. Per questo motivo, l'attivazione delle aree di scambio può essere gestita automaticamente attraverso la configurazione del file /etc/fstab
.
swapon [<opzioni>] [<dispositivo>|<file>] |
swapon
attiva l'utilizzo di un dispositivo, o di un file, per la gestione della memoria virtuale. Di solito si tratta di una partizione o un di file di scambio creati e 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 scambio previste all'interno del file /etc/fstab
.
Le partizioni o i file di scambio attivati manualmente, e non quindi con l'ausilio della configurazione del file |
|
Viene attivata la memoria virtuale 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.
#
swapon /dev/hda3
Utilizza la partizione /dev/hda3
come memoria virtuale.
#
swapon /swap1
Utilizza il file /swap1
come memoria virtuale.
#
swapon
-
a
Avvia la gestione della memoria virtuale con tutte le partizioni e i file indicati per questo scopo nella configurazione di /etc/fstab
.
swapoff [<opzioni>] [<dispositivo>] |
swapoff
è l'opposto di swapon
e si occupa di disattivare la memoria virtuale su un particolare dispositivo o file per lo scambio, 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 collegamento al programma swapon
che si comporta così quando viene avviato con questo nome: swapoff
.
Le partizioni o i file di scambio attivati manualmente, e non quindi con l'ausilio della configurazione del file |
#
swapoff /dev/hda3
Termina la gestione della memoria virtuale con la partizione /dev/hda3
.
#
swapoff /swap1
Termina la gestione della memoria virtuale con il file /swap1
.
#
swapoff
-
a
Termina la gestione della memoria virtuale con tutte le partizioni indicate così nel file /etc/fstab
.
Per quanto riguarda la gestione della memoria virtuale, il file /etc/fstab
permette di definire quali partizioni e file debbano essere utilizzati automaticamente per questo scopo.
La configurazione di /etc/fstab
per la gestione della memoria virtuale è praticamente obbligatoria, a meno di volere provvedere ogni volta alla sua attivazione e disattivazione attraverso l'uso diretto di swapon
e swapoff
.
L'esempio seguente mostra due record ipotetici di /etc/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 |
Durante l'esecuzione della procedura di inizializzazione del sistema, si distinguono due fasi per l'attivazione delle aree di scambio della memoria: prima dell'attivazione dei filesystem vengono attivate le partizioni di scambio; dopo anche i file di scambio.
Nel file /etc/fstab
non si riesce a distinguere quali siano le partizioni e quali i file, per cui è necessario un trucco molto semplice. Nella prima fase viene eseguito swapon
con l'opzione
: potranno essere attivate solo le partizioni di scambio, perché l'unico filesystem in funzione dovrebbe essere quello principale che inizialmente è in sola lettura. In pratica, -
aswapon
tenta di attivare anche i file, ma senza riuscirci.
Nella seconda fase, quando i filesystem sono in funzione, viene eseguito nuovamente swapon
, e questa volta le partizioni già attivate non potranno essere attivate nuovamente, mentre i file di scambio verranno trovati e attivati.
echo "attivazione delle partizioni di swap" swapon -a ... echo "attivazione dei file di swap" swapon -a 2>&1 | grep -v "busy" ... |
In presenza di file di scambio, l'arresto del sistema deve avvenire nel modo corretto: prima si devono disattivare i file di scambio, quindi si possono smontare i filesystem (riportando quello principale in sola lettura), e infine si possono disattivare le partizioni di scambio.
In pratica, spesso si disattiva subito tutta la gestione della memoria virtuale, ma questo rende problematica la conclusione delle operazioni su sistemi dotati di poca memoria. Anche sotto questo aspetto, è sempre consigliabile di evitare l'utilizzo di file di scambio.
---------------------------
Appunti Linux 1999.07.12 --- Copyright © 1997-1999 Daniele Giacomini -- daniele @ evo.it
[indice generale] [precedente] [successivo] [indice analitico] [note introduttive]