[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