[PLUTO-help] info su spazio swap
Gian Uberto Lauri
GianUberto.Lauri a eng.it
Ven 12 Ott 2007 10:21:39 CEST
>>>>> "SP" == Sabatino Palladino <sabatino.palladino a aliceposta.it> writes:
SP> Alle 16:26, giovedì 11 ottobre 2007, Gian Uberto Lauri ha scritto:
>> Può avere senso se è necessaria la presenza dello swap per
>> il meccanismo di paging...
SP> Puoi spiegare meglio? Credevo che il paging fosse un concetto
SP> differente dallo swap su disco.
Sono collegati tra di loro. Alcune cose che sto per dire sicuramente
le conosci già, perdona la ripetizione.
Lo swap è un concetto nato prima, quando non c'erano ancora meccanismi
di memoria virtuale. Il sistema scaricava tutto l'address space di un
task (allora erano pochi kbyte) e ricaricava quello di un'altro.
Il paging è legato alla memoria virtuale dove lo spazio di memoria di
un processo diventa come l'immagine virtuale su uno specchio, appare
reale ma in realtà non esiste.
Questo viene fatto per prima cosa suddividendo lo spazio di
indirizzamento del processo in pagine, e poi mappando le pagine
allocate su un dispositivo fisico. La cosa richiede che gli indirizzi
nello spazio di indirizzamento del processo vengano tradotti in
indirizzi fisici (lo fa in HW la Memory Management Unit): ad esempio
la pagina da 0x00001000 a 0x00001fff dello spazio di indirizzamento
può trovarsi mappata nella pagina fisica 0xB00B1000 a 0xBOOB2000 dello
spazio di indirizzamento fisico.
Cosa si ottiene in questo modo ? Tante cosine.
La prima è che per il processo viene fatta esistere solo la memoria
che serve: ad esempio 4 pagine per il segmento TEXT a partire da
0x00000000 (terminano a 0x00003FFF), poi 6 per il segmento DATA a
partire da 0x00010000 e poi quelle per lo stack a scendere partendo da
0xFFFFFFFF. Queste pagine non devono essere fisicamente contigue, ci
pensa la MMU a farle apparire contigue anche se sono in aree
distribuite a macchia di leopardo.
La seconda è che alcune pagine possono essere condivise: abbiamo la
shared memory ma anche la condivisione del segmento testo o delle
shared libraries.
La terza è che una pagina non deve risiedere necessariamente in
memoria. Può essere spostata su disco per fare spazio ad altre pagine
(generlamente si usano le pagine che non sono accedute da maggior
tempo) per poi essere ricaricata nel momento in cui serve.
E questo il momento in cui il paging "diventa" swap e succede questo.
Supponiamo che il processore incontri una istruzione di accesso alla
memoria all'indirizzo 0xDEADBEEF e che la pagina da 0xDEADB000 non sia
in memoria.
Nel momento in cui il processore cerca di accedervi, la MMU se ne
accorge e lancia un segnale HW di PAGE FAULT che interrompe
l'esecuzione dell'istruzione di accesso in memoria
Questo avvia la routine del kernel che si preoccupa per iniziare di
trovare lo spazio per caricare la pagina. Può capitare che ci sia una
pagina libera di memoria fisica libera, ed allora si passa al
caricamento della pagina in memoria, oppure bisogna farle spazio.
In questo caso viene scelta la pagina che è più conveniente "scartare"
(ovvero riversare su disco) che usualmente è quella che da maggior
tempo non viene usata. La pagina viene quindi scaricata su disco.
Trovato lo spazio, si legge la pagina richiesta dallo swap e si esce
dalla gestione del page fault.
A questo punto, usualmente, l'operazione che era stata interrotta
riparte da capo. Non conosco molte architetture HW dove è possibile
riavviare una istruzione macchina interrotta da un interrupt.
Ci sono ovviamente ottimizzazioni, ad esempio è possibile evitare di
scrivere su disco una pagina su cui non si siano fatte scritture.
--
/\ ___ Ubuntu: ancient
/___/\_|_|\_|__|___Gian Uberto Lauri_____ African word
//--\| | \| | Integralista GNUslamico meaning "I can
\/ e coltivatore diretto not install
di software Debian"
More information about the pluto-help
mailing list