Differenze tra le versioni di "Concorrenza (informatica)"

nessun oggetto della modifica
In [[informatica]] la '''concorrenza''' è una caratteristica dei sistemi nei quali può verificarsi che un insieme di [[Processo (informatica)|processi]] computazionali sia in [[esecuzione (informatica)|esecuzione]] nello stesso istante. Tale sistema viene appunto chiamato '''sistema a concorrenza''' o '''sistema concorrente'''. L'esecuzione parallela può condurre a interazione tra processi quando viene coinvolta una risorsa condivisa.
 
Un'importante classe di sistemi informatici nei quali gli aspetti di concorrenza sono fondamentali è quella dei [[sistema operativo|sistemi operativi]].
 
[[File:Dining philosophers.png|thumb|200px|Il problema dei cinque filosofi a cena, un classico problema inerente concorrenza e condivisione di risorse]]
 
== Introduzione ==
Il concetto di concorrenza è contrapposto a quello di sequenzialità. In un sistema sequenziale i processi vengono eseguiti uno per volta e non si verifica alcuna forma di interazione tra essi durante l'esecuzione.
Il problema delle "corse critiche" può essere evitato impedendo che più di un processo per volta acceda a risorse condivise. Con la '''mutua esclusione''' si evita che più processi che contendono una risorsa riescano ad accedervi contemporaneamente.
 
* '''Stallo (Deadlock)'''<br />Quando ad un processo viene garantito l'accesso esclusivo (ad esempio tramite una mutua esclusione) ad una risorsa, possono crearsi situazioni di stallo. Formalmente un insieme di processi è in stallo ([[deadlock]]) quando ogni processo dell'insieme attende un evento che può avvenire soltanto tramite un altro processo dell'insieme. Essendo tutti i processi in attesa, nessuno potrà mai creare l'evento di sblocco protraendo l'attesa all'infinito. Le tecniche per individuare situazioni di stallo prevedono l'analisi di grafi delle risorse allocate oppure mediante la creazione di cosiddette "matrici di allocazione". La risoluzione degli stalli può essere affrontata in vari modi. Concettualmente si possono suddividere in:
** '''Risoluzione mediante prerilascio''': viene scelto un processo che detiene una risorsa dall'insieme dei processi in stallo e viene tolto l'accesso esclusivo (prerilascio o preemption) ad una risorsa condivisa (causa di stallo). L'operazione è talvolta difficile, talvolta impossibile e dipende dal tipo di risorsa che il processo stava bloccando.
** '''Risoluzione mediante punto di controllo''': vengono creati dei registri (checkpoint) che descrivono lo stato di utilizzo delle risorse condivise. Quando viene rilevato uno stallo si effettua un "ritorno" (''rollback to checkpoint'') alle condizioni precedenti. Anche questa tecnica è di difficile o addirittura impossibile realizzazione poiché il ritorno potrebbe causare perdita o inconsistenza di dati.
** '''Risoluzione mediante eliminazione''': viene scelto un processo e viene terminato. Questa tecnica è anch'essa molto complessa e richiede di fare stime e assunzioni sul tipo di processo da eliminare. Inoltre non è garantita l'uscita dalla condizione di stallo per cui potrebbe essere necessario terminare altri processi, situazione che complica ulteriormente la problematica.
 
Utente anonimo