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 Modelli di Interazione, Appunti di Informatica

tutte le caratteristiche della programmazione concorrente

Tipologia: Appunti

2020/2021

Caricato il 14/02/2022

carmine-carlino
carmine-carlino 🇮🇹

4

(1)

5 documenti

1 / 4

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
programmazione sequenziale quando la programmazione è fatta in modo tale che si
va ad eseguire un programma alla volta, il processore esegue un processo alla volta
programmazione concorrente quando ci sono più programmi attivati
contemporaneamente, si eseguono più processi insieme
Vantaggi della programmazione concorrente
vantaggio: vado ad attivare più processi contemporaneamente quindi il sistema si
velocizza
svantaggio: i processi sono concorrenti cioè possono entrare in conflitto quando si
contendono le stesse risorse
Modello di esecuzione: parallelismo e non determinismo
Il modello di esecuzione del processo è deterministico, cioè è possibile stabilire dopo
l’esecuzione di un’istruzione A quale sarà la prossima istruzione che verrà eseguita (se A è
un’istruzione condizionale è necessario conoscere anche il valore delle variabili del
programma).
Il modello di esecuzione dell’Hardware invece è non-deterministico, perchè la prossima
istruzione che verrà eseguita può dipendere anche dal verificarsi di eventi il cui esatto istante
di accadimento è imprevedibile.
Spesso un programma con thread multipli è non-deterministico, cioè non si può dire in base
al codice del programma cosa accadrà esattamente, anche in assenza di dipendenza dai dati
di input.
Grafo delle precedenze
Un grafo che descrive l’ordine con cui le azioni (o gli eventi) che costituiscono il processo si
eseguono nel tempo prende il nome di grafo delle precedenze.
Nei processi sequenziali la sequenza degli eventi che costituisce il processo è totalmente
ordinata: il grafo risulterà totalmente ordinato in quanto la sequenza degli eventi è ben
determinata, cioè l’ordine con cui vengono eseguiti è sempre lo stesso
Nei processi paralleli, invece, l’ordinamento non è completo, in quanto l’esecutore per
alcune istruzioni “è libero” di scegliere quali iniziare prima senza che il risultato sia
compromesso: possiamo affermare che nella elaborazione parallela l’esecuzione delle
istruzioni segue un ordinamento parziale.
Architetture e linguaggi per la programmazione concorrente
Disponendo di macchine concorrenti (in grado di eseguire più processi sequenziali
contemporaneamente) e di un linguaggio di programmazione con il quale descrivere
algoritmi non sequenziali, è possibile scrivere e far eseguire programmi concorrenti
L’elaborazione complessiva può essere descritta come un insieme di processi sequenziali
asincroni interagenti
Proprietà di un linguaggio per la programmazione concorrente
Contenere appositi costrutti con i quali sia possibile dichiarare moduli di programma
destinati ad essere eseguiti come processi sequenziali distinti
Non tutti i processi costituenti un’elaborazione vengono eseguiti contemporaneamente.
Alcuni processi vengono svolti se, dinamicamente, si verificano particolari condizioni. E’
quindi necessario specificare quando un processo deve essere attivato e terminato
pf3
pf4

Anteprima parziale del testo

Scarica Programmazione Concorrente: Concetti Fondamentali e Modelli di Interazione e più Appunti in PDF di Informatica solo su Docsity!

programmazione sequenziale quando la programmazione è fatta in modo tale che si

va ad eseguire un programma alla volta, il processore esegue un processo alla volta

programmazione concorrente quando ci sono più programmi attivati

contemporaneamente, si eseguono più processi insieme

Vantaggi della programmazione concorrente

vantaggio : vado ad attivare più processi contemporaneamente quindi il sistema si

velocizza

svantaggio: i processi sono concorrenti cioè possono entrare in conflitto quando si

contendono le stesse risorse

Modello di esecuzione: parallelismo e non determinismo Il modello di esecuzione del processo è deterministico , cioè è possibile stabilire dopo l’esecuzione di un’istruzione A quale sarà la prossima istruzione che verrà eseguita (se A è un’istruzione condizionale è necessario conoscere anche il valore delle variabili del programma). Il modello di esecuzione dell’Hardware invece è non-deterministico , perchè la prossima istruzione che verrà eseguita può dipendere anche dal verificarsi di eventi il cui esatto istante di accadimento è imprevedibile. Spesso un programma con thread multipli è non-deterministico, cioè non si può dire in base al codice del programma cosa accadrà esattamente, anche in assenza di dipendenza dai dati di input. Grafo delle precedenze Un grafo che descrive l’ordine con cui le azioni (o gli eventi) che costituiscono il processo si eseguono nel tempo prende il nome di grafo delle precedenze. Nei processi sequenziali la sequenza degli eventi che costituisce il processo è totalmente ordinata: il grafo risulterà totalmente ordinato in quanto la sequenza degli eventi è ben determinata, cioè l’ordine con cui vengono eseguiti è sempre lo stesso Nei processi paralleli, invece, l’ordinamento non è completo, in quanto l’esecutore per alcune istruzioni “è libero” di scegliere quali iniziare prima senza che il risultato sia compromesso: possiamo affermare che nella elaborazione parallela l’esecuzione delle istruzioni segue un ordinamento parziale. Architetture e linguaggi per la programmazione concorrente Disponendo di macchine concorrenti (in grado di eseguire più processi sequenziali contemporaneamente) e di un linguaggio di programmazione con il quale descrivere algoritmi non sequenziali, è possibile scrivere e far eseguire programmi concorrenti L’elaborazione complessiva può essere descritta come un insieme di processi sequenziali asincroni interagenti Proprietà di un linguaggio per la programmazione concorrente

  • Contenere appositi costrutti con i quali sia possibile dichiarare moduli di programma destinati ad essere eseguiti come processi sequenziali distinti
  • Non tutti i processi costituenti un’elaborazione vengono eseguiti contemporaneamente. Alcuni processi vengono svolti se, dinamicamente, si verificano particolari condizioni. E’ quindi necessario specificare quando un processo deve essere attivato e terminato
  • Occorre che siano presenti strumenti linguistici per specificare le interazioni che dinamicamente potranno aversi tra i vari processi Cobegin-Coend E’ un costrutto che permette di indicare il punto in cui N processi iniziano contemporaneamente l’esecuzione (co-begin) e il punto che la terminano, confluendo nel processo principale (co-end). All’interno dei singoli processi possono a loro volta essere presenti delle istruzioni di cobegin/coend, cioè è possibile avere l’annidamento di più costrutti cobegin/coend. Grafo strutturato Un grafo per poter essere espresso soltanto con cobegin e coend deve essere tale che detti X e Y due nodi del grafo, tutti i cammini paralleli che iniziano da X terminano con Y e tutti quelli che terminano con Y iniziano con X (o, più sinteticamente, ogni ‘sottografo’ deve essere del tipo one-in/one-out). In questo caso il grafo si dice strutturato. Modelli di interazione tra processi
  • Modello a memoria comune
  • Modello a scambio di messaggi Memoria comune Il sistema è visto come un insieme di
    • processi
  • oggetti (risorse)
  • risorse (private e comuni) Il modello a memoria comune è il solo caso nel quale possono verificarsi problemi per l’accesso a essa da parte di due (o più) processi che ne potrebbero richiedere l’attribuzione contemporaneamente. Sorge, quindi, la necessita` di specificare quali processi ed in quali istanti possono accedere alla risorsa. Modello a scambio di messaggi Nel modello ad ambiente locale ogni processo può accedere esclusivamente alle risorse allocate nella propria memoria (virtuale) locale che non può essere modificata direttamente dagli altri processi. Esistono due possibili modalità per implementare questo modello: Utilizzare linguaggi che prevedono costrutti espliciti per realizzare lo scambio di messaggi, come il CSP (Communicating Sequential Processes). Utilizzare la “chiamata di procedura remota”, come il DP (Distributed Processes). È inoltre necessario effettuare una classificazione dei modelli a scambio di messaggi: per esempio possiamo distinguere tra comunicazione sincrona e asincrona:
  • Nel caso di comunicazione asincrona la comunicazione da parte del processo mittente avviene senza che questo rimanga in attesa di una risposta da parte del processo destinatario.
  • Nel caso di comunicazione sincrona lo scambio di informazioni può avvenire solo se mittente e destinatario sono pronti a “parlarsi” e quindi è necessario che si sincronizzino, e questa interazione prende il nome di “rendez-vous”: ◗ stretto: se si limita alla trasmissione di un messaggio dal mittente al destinatario; ◗ esteso: se il destinatario, una volta ricevuto il messaggio, deve inviare una risposta al

proces- so interessato a entrarvi; ◗ Nessun processo deve attendere indefinitamente per poter accedere alla regione critica. Starvation e deadlock Un’ errata sincronizzazione può portare al fallimento delle elaborazioni, genera situazioni di incoerenza dei dati, e può portare a situazioni di blocco dei processi: ◗ Starvation (o blocco individuale): si verifica quando un processo rimane in attesa di un evento che non accadrà mai, e quindi non può portare a termine il proprio lavoro; ◗ Deadlock (stallo o blocco multiplo): si verifica quando due o più processi rimangono in attesa di eventi che non potranno mai verificarsi a causa di condizioni cicliche nel possesso e

nella richiesta di risorse. Per evitare il Dead Lock si usano dei semafori, ovvero

pacchetti di codice che assicurano la mutua esclusione e organizza la

sincronizzazione

Condizione di Bernstein

Il dominio è l’insieme delle variabili usate dall’istruzione, il rango è l’insieme delle

variabili modificate.

Le tre condizioni di Bernstein

1. A può modificare variabili diverse da quelle di B

2. A non può modificare variabili diversa da B

3. A Non può utilizzare variabili modificate da B

Proprietà di un programma concorrente

Safety , i processi devono essere eseguiti in maniera sicura

Fairness , criterio per cui tutti i processi possono utilizzare una risorsa

Liveness , deve garantire che il processo che avanza completi la sua esecuzione.