47
Programmazione Concorrente e Programmazione Concorrente e Distribuita Distribuita Linguaggi e concorrenza

Programmazione Concorrente e Distribuita Linguaggi e concorrenza

Embed Size (px)

Citation preview

Page 1: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

Programmazione Concorrente e Programmazione Concorrente e DistribuitaDistribuita

Linguaggi e concorrenza

Page 2: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 2

Programmazione Concorrente e Distribuita

Bibliografia: Ancillotti- Boari. Principi e Tecniche di Programmazione

Concorrente. Utet Libreria

Ben-Ari. Principles of concurrent and distributed programming. Addison wesley (second edition)

Raynal. Distributed Algorithms and Protocols. Wiley & Sons

Lynch. Distributed Algorithms. Morgan Kaufman

Page 3: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 3

Programmazione Concorrente e Distribuita

La programmazione concorrente nasce per gestire i Sistemi Sistemi

ConcorrentiConcorrenti cioe’ sistemi in grado di supportare piu’ utenti (o programmi) contemporaneamente

Sistemi intrensecamente concorrenti • Sistemi Real Time

• Sistemi operativi

• Gestione di basi di dati

Applicazioni potenzialmente concorrenti• Uso di algoritmi paralleli per computazioni:

– su grandi quantita’ di dati

– con grande mole di calcolo

– vincoli di tempo reale

Page 4: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 4

Programmazione Concorrente e Distribuita

Per sistema concorrentesistema concorrente intendiamo: un sistema softwaresoftware implementato su vari tipi di hardwarevari tipi di hardware che porta avanti porta avanti contemporaneamentecontemporaneamente una molteplicita’ di attivita’

diverse tra di loro correlatecorrelate

possono cooperarecooperare ad un goal comune possono competerecompetere per risorse condivise

Page 5: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 5

Algoritmi, Programmi, ProcessiAlgoritmi, Programmi, Processi Algoritmo:Algoritmo:

procedimento logico che deve essere seguito per risolvere un problema, solitamente specificato da una sequenza di passi che l’esecutore dell’algoritmo deve seguire;

Programma:Programma:

descrizione dell’algoritmo mediante un opportuno formalismo (linguaggio di programmazione) che renda possibile l’esecuzione su un particolare elaboratore;

Processo:Processo:

sequenza di eventi cui dà luogo l’elaboratore quando opera sotto il controllo di un particolare programma.

Programmazione Concorrente e Programmazione Concorrente e DistribuitaDistribuita

Page 6: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 9

Algoritmi, Programmi, ProcessiAlgoritmi, Programmi, Processi

ATT!ATT! Il programma è una unità statica il processo è una unità dinamica

Se l’elaboratore e’ sequenziale => il processo è sequenziale: => la sequenza di eventi che costituisce il processo è

totalmente ordinata=> rappresentando il processo mediante il grafo orientato

dei suoi eventi (grafo di precedenza) il grafo risulterà totalmente ordinato.

Programmazione Concorrente e Programmazione Concorrente e DistribuitaDistribuita

Page 7: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 10

Grafo di precedenza di un processoGrafo di precedenza di un processo

nodi del grafo rappresentano i singoli eventi

archi del grafo rapprresentano le precedenze temporali

se il processo è sequenziale, il grafo sarà a ordinamento totale: cioè ogni nodo avrà un predecessore (eccetto il nodo iniziale) ed un successore (eccetto il nodo finale).

Programmazione Concorrente e Programmazione Concorrente e DistribuitaDistribuita

Page 8: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 11

G ra fo d i p receden za ad o rdin am ento tota le d elp ro cesso che va lu ta l'esp ress io n e:

(3 * 4) + (2 + 3) * (6 - 2)

F IN E

1 2 + 2 0 = 32

5 * 4 = 20

6 - 2 = 4

2 + 3 = 5

3 * 4 = 12

IN IZ IO

Programmazione Concorrente e Programmazione Concorrente e DistribuitaDistribuita

Page 9: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 12

Processi ConcorrentiProcessi Concorrenti

L’ ordinamento totale del grafo è solo in parte dovuto alla natura del problema da risolvere, in parte è dovuto alla natura sequenziale del calcolatore.

La natura del problema cioè impone di fatto solo un ordinamento parziale tra gli eventi.

Programmazione Concorrente e Programmazione Concorrente e DistribuitaDistribuita

Page 10: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 13

Grafo di precedenza ad ordinamento parziale

3*4 = 12 6 – 2 = 42 + 3 = 5

5 * 4 = 20

FINE

12+20 = 32

INIZIO

Programmazione Concorrente e Programmazione Concorrente e DistribuitaDistribuita

Page 11: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 14

Programmazione Concorrente e Distribuita

INIZIO

L1

S1

Ln

Sn

FINE

E1

En

Page 12: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 15

Programmazione Concorrente e Distribuita

INIZIO

E1L1

S1

E2L2

S2

E3L3

S3

EnLn

Sn

FINE

Page 13: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 16

Abbiamo visto che:alcuni problemi possono essere risolti mediante processi di calcolo non sequenzialisequenziali cioè rappresentati da un grafo ad ordinamento parziale in questo caso il problema puo’ essere risolto da alcuni moduli sequenziali che lavorano in parallelo.

Occorre quindi un elaboratore paralleloelaboratore parallelo, in grado cioe’ di eseguire un numero arbitrario di operazioni contemporaneamente.

Occorre quindi un linguaggio di programmazionelinguaggio di programmazione con il quale poter descrivere questi algoritmi non sequenziali.

Lo studio di questi linguaggi, dei loro compilatori e delle loro applicazioni prende il nome di Programmazione ConcorrenteProgrammazione Concorrente.

Programmazione Concorrente e Programmazione Concorrente e DistribuitaDistribuita

Page 14: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 17

Programmazione Concorrente e Distribuita

Programmazione concorrente

Programmazione concorrente

HardwareHardware

Software Di base

Software Di base

Linguaggi diProgramm.

Sist. OperativiSist. Operativi

Sist. Di ReteSist. Di Rete

Sist. Real TimeSist. Real Time

Sist. DistribuitiSist. Distribuiti

Page 15: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 18

Programmazione Concorrente e Distribuita

Hardware per sistemi concorrentiHardware per sistemi concorrenti

uniprocessoreuniprocessore

CPU unica+ processori

dedicati

CPU unica+ processori

dedicati

MultiprocessoriMemoria condivisa

MultiprocessoriMemoria condivisa

Nuove architetturedataflow e

macch. funzionali

Nuove architetturedataflow e

macch. funzionali

Vector eArray processor

Vector eArray processor

LANLAN

Local internetLocal internet

SistemiLAN/WANSistemi

LAN/WAN

Page 16: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 19

Programmazione Concorrente e Distribuita

Architetture per sistemi concorrentiArchitetture per sistemi concorrenti

SISD: SISD: Single instruction stream, single data streamSingle instruction stream, single data streamModello uniprocessore convenzionale (macchina di von Neumann)

SIMD: SIMD: Single instruction stream, multiple data streamSingle instruction stream, multiple data streamPiu’ processori che eseguono la stessa istruzione su dati diversi(array o vector instruction)

MIMD: MIMD: Multiple instruction stream, multiple data streamMultiple instruction stream, multiple data streamPiu’ processori che eseguono istruzioni diverse; possiamo ulteriormente

distinguere tra: Sistemi multiprocessori con memoria comune Sistemi a rete (senza memoria comune)

Page 17: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 20

Programmazione Concorrente e Distribuita

La macchina su cui un programma concorrente deve andare in esecuzione deve quindi essere in grado di :

eseguire un certo numero n di processi sequenziali (n > 1) => la sua architettura deve essere quella di un multielaboratore multielaboratore

permettere ai processi di sincronizzarsi => deve fornire meccanismi meccanismi primitivi di sincronizzazione e/o di comunicazioneprimitivi di sincronizzazione e/o di comunicazione, sfruttati dal compilatore per tradurre i costrutti linguistici di sincronizzazione fornite dal linguaggio ad alto livello.

Page 18: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 23

Programmazione Concorrente e Distribuita

Un po’ dipo’ di terminologia: terminologia:

sistema parallelo: sistema parallelo: sistema in cui l’esecuzione dei programmi si sovrappone nel tempo (parallelismo reale )

sistema concorrente: sistema concorrente: sistema in cui l’esecuzione dei programmi può (ma non necessariamente deve) sovrapporsi nel tempo (parallelismo apparente)

La concorrenzaconcorrenza è una forma di astrazione del parallelismo e permette di trattare in maniera uniforme varie situazioni: Multitasking di sistemi mono –processori Sistemi fortemente connessi (multiprocessori) Sistemi di rete

Page 19: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 24

Programmazione Concorrente e Distribuita

Concorrenza come “Concorrenza come “interleavinginterleaving” di istruzioni ” di istruzioni atomicheatomiche

Definizione::

Un programma concorrenteprogramma concorrente consiste di un insieme finito di processi sequenziali. I processi sono scritti usando un insieme finito di istruzioni atomicheistruzioni atomiche. L’esecuzione di un programma concorrente è ottenuta interfogliando in maniera arbitraria le istruzioni dei processi. Il risultato di questo interleaving viene detto computazionecomputazione.

Page 20: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 25

Programmazione Concorrente e Distribuita

Istruzioni atomicheIstruzioni atomiche

Un’ istruzione atomica viene eseguita completamente senza possibilita’ di interruzioni.

Proprieta’ delle istruzioni atomiche:

Il risultato ottenuta dall’esecuzione “simultanea” di due istruzioni atomiche e’ lo stesso che si otterrebbe dalla loro esecuzione sequenziale (in un qualsiasi ordine).

Page 21: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 26

Programmazione Concorrente e Distribuita

Istruzioni atomicheIstruzioni atomiche

E’ importante specificare con precisione quali siano le istruzioni atomiche.

Es. lo statement di assegnazione e’ atomico:

n := 0

n := n + 1n := n + 1

n := 0

temp := nn:= temp +1

temp := nn:= temp +1

Page 22: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 27

Programmazione Concorrente e Distribuita

CorrettezzaCorrettezzaNei programmi concorrenti alcune computazioni possono essere corrette altre no, ma le normali tecniche di debugging non funzionano poiche’ diverse esecuzioni dello stesso programma possono dare risultati diversi!!.

Ci sono due tipi di proprieta’ di correttezza:

Proprieta’ di “safetysafety”: La proprieta’ P deve sempresempre essere vera(P e’ vera in ogni stato della computazione)

Proprieta’ di “livenessliveness”: La proprieta’ P prima o poiprima o poi sara’ vera(in ogni computazione esiste uno stato in cui P e’ vera)

Page 23: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 28

Programmazione Concorrente e Distribuita

FairnessFairnessOgni possibile interleaving di iststruzioni e’ considerato essere una computazione di un programma concorrente, pero’ questo comporta che in alcune computazioni ci siano statement che non sono mai eseguiti. La proprieta’ di “fairness” esclude queste computazioni.Proprieta’ di “fairnessfairness”:

una computazione e’ fairfair se per ogni suo stato e’ vero che uno statement statement sempre abilitatosempre abilitato, prima o poiprima o poi sara’ eseguito

n := 0flag := false

while flag = falsen := n + 1

flag := true

Page 24: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 29

Le interazioni tra i processi possono essere classificate: cooperazionecooperazione: interazione prevedibile e desiderata

(sincronizzazione diretta o esplicita) scambio di segnali temporali scambio di informazione

competizionecompetizione: interazione prevedibile e non desiderata, ma necessaria

(sincronizzazione indiretta o implicita) mutua esclusione

Programmazione Concorrente e Programmazione Concorrente e DistribuitaDistribuita

Page 25: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 30

Compilazione di programmi concorrenti

Programma sorgentescritto nel linguaggio

L

Compilatore

Programma tradottonel linguaggio

oggetto perla macchina M

Programmazione Concorrente e Programmazione Concorrente e DistribuitaDistribuita

Page 26: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 31

La macchina concorrente M in realta’ e’ una macchina virtuale o macchina virtuale o astrattaastratta aventi la caratteristiche funzionali desiderate, ma realizzata con tecniche software, basandosi su una macchina fisica M’ molto piu’ semplice.

In particolare M’: puo’ avere un numero molto inferiore di processori (anche uno solo) puo’ essere priva di primitive di sincronizzazione/comunicazione:

queste saranno data da uno strato di software che funzionalmente rappresenta il nucleo (kernel) del SO e che viene chiamato supporto run timesupporto run time del compilatore del linguaggio concorrente.

Un nucleo fornisce sempre due meccanismi basilari: meccanismo di multiprogrammazionemultiprogrammazione meccanismo di sincronizzazione/comunicazionesincronizzazione/comunicazione

P C DArchitettura di una macchina concorrente

Page 27: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 32

Meccanismo di multiprogrammazioneMeccanismo di sincronizzazione

Macchina fisica M’

Macchina virtuale e macchina fisica

P C DArchitettura di una macchina concorrente

Page 28: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 33

Due diverse organizzazioni logiche:

gli elaboratori sono collegati ad una unica memoria comune (modello a memoria comunememoria comune)

gli elaboratori sono collegati da una sottorete di comunicazione, ma non condividono memoria (modello modello a retea rete)

P C DArchitettura di una macchina concorrente

Page 29: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 35

Programmazione concorrente e distribuitaProgrammazione concorrente e distribuita

Esprimere la concorrenzaEsprimere la concorrenza

In un linguaggio per la concorrenza occorrono costrutti linguistici per:

dichiarare, creare, attivare, terminare processi sequenziali che lavorino in parallelo;

permettere l’interazione (comunicazione e sincronizzazione) tra processi concorrenti.

Page 30: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 36

Programmazione concorrente e distribuitaProgrammazione concorrente e distribuita

Esprimere la concorrenzaEsprimere la concorrenza

Costrutti linguistici per la concorrenza: Coroutines Processi

Fork/ JoinCobegin/Coend Task

Page 31: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 37

Programmazione concorrente e distribuitaProgrammazione concorrente e distribuita

Esprimere la concorrenzaEsprimere la concorrenza

CoroutinesCoroutines costrutto presente nei linguaggi Simula (68),

BLISS, Modula, ec.. utile per simulare l’elaborazione non

sequenziale in ambiente monoprocessore meccanismo di passaggio di controllo simile al

go to realizza un trasferimento di controllo non

locale, cioè tra contesti diversi

Page 32: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 42

Programmazione concorrente e distribuitaProgrammazione concorrente e distribuita

Esprimere la concorrenzaEsprimere la concorrenza

La coroutine è costituita da: un insieme di dati locali insieme di istruzioni (body)

Nel body ci può essere l’istruzione : resume X X è il nome della coroutine chiamata l’esecuzione della resume X trasferisce il controllo dalla

coroutine chiamante alla coroutine X, previo salvataggio di contesto;

X viene attivata a partire dall’inizio (se è la prima volta che viene chiamata) oppure a partire dall’istruzione successiva all’ultimo resume da lei eseguito

Page 33: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 43

Programmazione concorrente e distribuitaProgrammazione concorrente e distribuita

Esprimere la concorrenzaEsprimere la concorrenza

Coroutine X Coroutine Y Coroutine Z

<dich. dati locali> <dich. dati locali> <dich. dati locali>

begin begin begin…. …. ….…. resume Z ….resume Y …. resume Y…. resume X ….…. …. …..…. …. ….

end end end

Page 34: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 44

Programmazione concorrente e distribuitaProgrammazione concorrente e distribuita

Esprimere la concorrenzaEsprimere la concorrenza

Oltre all’istruzione resume, occorrono altre istruzioni per: creare: co-id:= co-create (name, start-

address, stack-size) cancellare: kill (co-id)

chiamare: call (co-id)

sospendere: suspend

una coroutine

Page 35: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 45

Programmazione concorrente e distribuitaProgrammazione concorrente e distribuita

Esprimere la concorrenzaEsprimere la concorrenza

Caratteristiche delle coroutines: in ogni istante una sola coroutine è attiva l’ordine di esecuzione è controllato dal

programmatore sono utili per specificare particolari strategie di

esecuzione in ambiente monoprocessore non sono adatte per programmare algoritmi

concorrenti per ambienti multiprocessore

Page 36: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 46

Programmazione Concorrente e Distribuita

1 programma

1 processo

Kernel del SO

Sistema runtime

del linguaggio

1 programma

1 processo

Linguaggio di programmazione sequenziale: attività diverse nel

codice utente

Supporto runtime

Gestione dello stack e dello heap

Sistema runtime

del linguaggio

Codice per una procedura

Codice per una procedura

Codice per gestire procedure separate

Page 37: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 47

Programmazione Concorrente e Distribuita

1 programma

1 processo

Kernel del SO

Sistema runtime

del linguaggio

1 programma

1 processo

Linguaggio di programmazione sequenziale: attività diverse nel

codice utente

sistema runtime

Sistema runtime

del linguaggio

Codice coroutine

Codice coroutine

Codice coroutine

Codice creazione e gestione coroutine

Page 38: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 48

Programmazione concorrente e distribuitaProgrammazione concorrente e distribuita

Esprimere la concorrenzaEsprimere la concorrenza

Codice di una coroutine

Codice di una coroutine

Codice di una coroutine

Codice per la creazione di coroutine e per il passaggio di controllo

Sistema runtimeGestione della memoria Supporto per la creazione e

il trasferimento di controllo:co-createkillcallsuspendresume

heap

Uno stack ed un blocco di controllo per ciascuna coroutine

Page 39: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 49

Programmazione concorrente e distribuitaProgrammazione concorrente e distribuita

Esprimere la concorrenzaEsprimere la concorrenza

Consideriamo i seguenti problemi:

Un file serverfile server per una rete gira su una macchina dedicata. Riceve richieste dai clienti e lavora a più richieste contemporaneamente.

Un SO controllacontrolla un certo numero di perifericiperiferici e l’insieme delle routine di gestione.

Il sistema computerizzato di un impianto chimico periodicamente preleva ed esamina dati da sensoripreleva ed esamina dati da sensori e gestisce le situazioni critiche

Un sistema multiprocessre è utlizzato per ricerche ricerche paralleleparallele su grandi quantità di dati.

Page 40: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 50

Programmazione concorrente e distribuitaProgrammazione concorrente e distribuita

Esprimere la concorrenzaEsprimere la concorrenza

Il Il file serverfile server..Una possibile implementazione di questo problema con le Una possibile implementazione di questo problema con le coroutines si può ottenere creando una coroutines si può ottenere creando una coroutine per ogni clientecoroutine per ogni cliente del file server. Il server, in un loop, decide quale coroutine servire, del file server. Il server, in un loop, decide quale coroutine servire, il codice delle coroutine termina con una il codice delle coroutine termina con una suspendsuspend..

Questa soluzione va bene se il SO offre dell Questa soluzione va bene se il SO offre dell system call non system call non bloccantibloccanti e se non è e se non è necessaria una risposta immediata agli necessaria una risposta immediata agli eventieventi..

Call A

Call B

suspend

suspend

Main

Coroutine A

Coroutine B

Page 41: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 51

Programmazione concorrente e distribuitaProgrammazione concorrente e distribuita

Esprimere la concorrenzaEsprimere la concorrenza

Controllo PerifericiControllo Periferici..Una possibile implementazione di questo problema con le Una possibile implementazione di questo problema con le coroutines si può ottenere creando una coroutines si può ottenere creando una coroutine per ogni coroutine per ogni perifericoperiferico. Il main è costituito da un polling loop in cui le routine dei . Il main è costituito da un polling loop in cui le routine dei periferici sono chiamate l’una dopo l’altra in un ordine prefissato. periferici sono chiamate l’una dopo l’altra in un ordine prefissato.

Questa soluzione va bene se non ci sono Questa soluzione va bene se non ci sono tempi critici di rispostatempi critici di risposta ai ai devices.devices.

Altri ProblemiAltri ProblemiIl problema del controllo computerizzato di un impianto chimico non si può realizzare per problemi di tempo realeproblemi di tempo reale, mentre quello dell’elaborazione parallela per mancanza di parallelismo effettivomancanza di parallelismo effettivo!

Page 42: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 52

Programmazione Concorrente e Distribuita

1 programma

1 processo

Kernel del SO

Sistema runtime

del linguaggio

1 programma

più processi

Linguaggio di programmazione concorrente: processi gestiti dal

linguaggio

Supporto runtime Gestione dei processiSistema runtime

del linguaggio

Codice per un processo

Codice per un processo

Codice per gestire la creazione di processi e il passaggio di controllo

...

heap

Supporto per la creazione e lo scheduling dei processi

Page 43: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 53

Programmazione concorrente e distribuitaProgrammazione concorrente e distribuita

Esprimere la concorrenzaEsprimere la concorrenza

Specifica, creazione e cancellazione di processi.

Fork/JoinFork/JoinEspressione linguistica proposta da Conway [63], Dennis[66]:

L’istruzione fork ha un comportamento analogo ad una chiamata di procedura (call), ma il programma chiamante prosegue assieme al programma chiamato:

A: fork XB: <istruzione

successiva alla fork>

X: <prima istruzioneprocedura invocata fork>

AA

BB XX

Page 44: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 54

Programmazione concorrente e distribuitaProgrammazione concorrente e distribuita

Esprimere la concorrenzaEsprimere la concorrenza

Specifica, creazione e cancellazione di processi.

Fork/JoinFork/Joinper congiungere più flussi di controllo si usa l’istruzione join::

var cont: integer

: join cont

l’istruzione join in forma indivisibileindivisibile esegue queste azioni;cont := cont -1if cont = 0 then <terminazione del processo>

Page 45: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 55

Programmazione concorrente e distribuitaProgrammazione concorrente e distribuita

Esprimere la concorrenzaEsprimere la concorrenza

Specifica, creazione e cancellazione di processi.Fork/JoinFork/Join

EsempioEsempio

begincont := 3Afork E1Bfork E2Dgo to E3

E1: CF go to E3

E2: EE3: join cont

Gend

AA

EE

CCBB

FF

GG

DD

Page 46: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 56

Programmazione concorrente e distribuitaProgrammazione concorrente e distribuita

Esprimere la concorrenzaEsprimere la concorrenza

Specifica, creazione e cancellazione di processi.

Fork/JoinFork/JoinAlternativa al join con contatore: la fork restituisce un valore tale valore è utilizzato per specificare lóperando della join

P:= fork X

join P

P:= fork X begin

end

X

join P

Page 47: Programmazione Concorrente e Distribuita Linguaggi e concorrenza

PCD 2006-2007 Linguaggi e concorrenza 57

Programmazione concorrente e distribuitaProgrammazione concorrente e distribuita

Esprimere la concorrenzaEsprimere la concorrenza

var P1, P2:process

procedure E1beginCFend

procedure E2beginEend

beginAP1 :=fork E1BP2:=fork E2Djoin P1join P2G

end