Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Programmazione Concorrente: Concetti Fondamentali e Problematiche, Dispense di Informatica

Spiegazione sulla programmazione

Tipologia: Dispense

2018/2019

Caricato il 24/03/2019

eleonora-la-rosa
eleonora-la-rosa 🇮🇹

5

(2)

9 documenti

1 / 1

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Programmazione Concorrente
In informatica la concorrenza è una caratteristica dei sistemi di elaborazione nei quali può verificarsi che
un insieme di processi o sottoprocessi (thread) computazionali sia in esecuzione nello stesso istante. Tale
sistema viene appunto chiamato sistema a concorrenza o sistema concorrente. L'esecuzione
contemporanea 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 sistemi operativi.
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.
Dato che in un sistema concorrente la varietà di interazioni che si possono verificare tra processi in
esecuzione è notevole, sono state elaborate delle teorie in merito alla gestione delle problematiche
connesse alla concorrenza. Sulla base di queste teorie sono state sviluppate sia delle tecniche di
programmazione (programmazione concorrente) sia dei linguaggi che integrano nativamente primitive
per la corretta gestione della concorrenza.
La concorrenza può portare ad una serie di problematiche legate all'utilizzo di una stessa risorsa condivisa
da parte di più processi. Un determinato susseguirsi di eventi può causare condizioni critiche. La
programmazione concorrente sfrutta alcuni principi per fronteggiare e risolvere questo tipo di
problematiche.
Corse critiche (Race conditions)
In alcuni sistemi può accadere che i processi in esecuzione condividano una risorsa comune di qualsiasi
natura (sia essa un'area di memoria condivisa o una periferica). In particolare se si verifica che il risultato
finale dell'esecuzione di più processi dipende dall'ordine in cui essi vengono eseguiti, questa è una race
condition. Il risultato dell'esecuzione nel caso di corse critiche è assolutamente impredicibile.
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)
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.
Starvation
Letteralmente inedia, è un problema in stretta relazione con lo stallo. Quando le politiche di assegnazione
delle risorse condivise favoriscono un processo rispetto ad un altro, il processo a cui vengono assegnate
in minor misura soffre di starvation. Esso è infatti bloccato e non può proseguire sebbene non si trovi in
una condizione di stallo. Nei sistemi in cui si accede a risorse condivise è sempre necessario stabilire una
politica per le priorità e l'ordine con cui esse vengono ripartite. Sebbene queste politiche possano risultare
quanto più eque, esse possono portare a condizioni di starvation.

Anteprima parziale del testo

Scarica Programmazione Concorrente: Concetti Fondamentali e Problematiche e più Dispense in PDF di Informatica solo su Docsity!

Programmazione Concorrente

In informatica la concorrenza è una caratteristica dei sistemi di elaborazione nei quali può verificarsi che un insieme di processi o sottoprocessi (thread) computazionali sia in esecuzione nello stesso istante. Tale sistema viene appunto chiamato sistema a concorrenza o sistema concorrente. L'esecuzione contemporanea 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 sistemi operativi. 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. Dato che in un sistema concorrente la varietà di interazioni che si possono verificare tra processi in esecuzione è notevole, sono state elaborate delle teorie in merito alla gestione delle problematiche connesse alla concorrenza. Sulla base di queste teorie sono state sviluppate sia delle tecniche di programmazione (programmazione concorrente) sia dei linguaggi che integrano nativamente primitive per la corretta gestione della concorrenza. La concorrenza può portare ad una serie di problematiche legate all'utilizzo di una stessa risorsa condivisa da parte di più processi. Un determinato susseguirsi di eventi può causare condizioni critiche. La programmazione concorrente sfrutta alcuni principi per fronteggiare e risolvere questo tipo di problematiche.

• Corse critiche (Race conditions)

In alcuni sistemi può accadere che i processi in esecuzione condividano una risorsa comune di qualsiasi natura (sia essa un'area di memoria condivisa o una periferica). In particolare se si verifica che il risultato finale dell'esecuzione di più processi dipende dall'ordine in cui essi vengono eseguiti, questa è una race condition. Il risultato dell'esecuzione nel caso di corse critiche è assolutamente impredicibile. 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)

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.

• Starvation

Letteralmente inedia, è un problema in stretta relazione con lo stallo. Quando le politiche di assegnazione delle risorse condivise favoriscono un processo rispetto ad un altro, il processo a cui vengono assegnate in minor misura soffre di starvation. Esso è infatti bloccato e non può proseguire sebbene non si trovi in una condizione di stallo. Nei sistemi in cui si accede a risorse condivise è sempre necessario stabilire una politica per le priorità e l'ordine con cui esse vengono ripartite. Sebbene queste politiche possano risultare quanto più eque, esse possono portare a condizioni di starvation.