P. 1
gapil

gapil

5.0

|Views: 280|Likes:
Published by Davide
LINUX
LINUX

More info:

Published by: Davide on Jul 18, 2009
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

10/19/2011

pdf

text

original

La nozione di operazione atomica deriva dal significato greco della parola atomo, cio`e indivisibile;
si dice infatti che un’operazione `e atomica quando si ha la certezza che, qualora essa venga
effettuata, tutti i passaggi che devono essere compiuti per realizzarla verranno eseguiti senza
possibilit`a di interruzione in una fase intermedia.
In un ambiente multitasking il concetto `e essenziale, dato che un processo pu`o essere interrot-
to in qualunque momento dal kernel che mette in esecuzione un altro processo o dalla ricezione
di un segnale; occorre pertanto essere accorti nei confronti delle possibili race condition (vedi
sez. 3.5.2) derivanti da operazioni interrotte in una fase in cui non erano ancora state completate.

86

CAPITOLO 3. LA GESTIONE DEI PROCESSI

Nel caso dell’interazione fra processi la situazione `e molto pi`u semplice, ed occorre preoc-
cuparsi della atomicit`a delle operazioni solo quando si ha a che fare con meccanismi di inter-
comunicazione (che esamineremo in dettaglio in cap. 12) o nelle operazioni con i file (vedremo
alcuni esempi in sez. 6.3.2). In questi casi in genere l’uso delle appropriate funzioni di libreria
per compiere le operazioni necessarie `e garanzia sufficiente di atomicit`a in quanto le system call
con cui esse sono realizzate non possono essere interrotte (o subire interferenze pericolose) da
altri processi.

Nel caso dei segnali invece la situazione `e molto pi`u delicata, in quanto lo stesso processo, e
pure alcune system call, possono essere interrotti in qualunque momento, e le operazioni di un
eventuale signal handler sono compiute nello stesso spazio di indirizzi del processo. Per questo,
anche il solo accesso o l’assegnazione di una variabile possono non essere pi`u operazioni atomiche
(torneremo su questi aspetti in sez. 9.4).
In questo caso il sistema provvede un tipo di dato, il sig_atomic_t, il cui accesso `e assicurato
essere atomico. In pratica comunque si pu`o assumere che, in ogni piattaforma su cui `e imple-
mentato Linux, il tipo int, gli altri interi di dimensione inferiore ed i puntatori sono atomici.
Non `e affatto detto che lo stesso valga per interi di dimensioni maggiori (in cui l’accesso pu`o
comportare pi`u istruzioni in assembler) o per le strutture. In tutti questi casi `e anche opportuno
marcare come volatile le variabili che possono essere interessate ad accesso condiviso, onde
evitare problemi con le ottimizzazioni del codice.

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->