La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Programmazione Concorrente e Distribuita Linguaggi e concorrenza.

Presentazioni simili


Presentazione sul tema: "Programmazione Concorrente e Distribuita Linguaggi e concorrenza."— Transcript della presentazione:

1 Programmazione Concorrente e Distribuita Linguaggi e concorrenza

2 PCD Linguaggi e concorrenza2 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

3 PCD Linguaggi e concorrenza3 Programmazione Concorrente e Distribuita Sistemi Concorrenti La programmazione concorrente nasce per gestire i Sistemi Concorrenti cioe’ sistemi in grado di supportare piu’ utenti (o programmi) contemporaneamente xSistemi intrensecamente concorrenti Sistemi Real Time Sistemi operativi Gestione di basi di dati xApplicazioni potenzialmente concorrenti Uso di algoritmi paralleli per computazioni: –su grandi quantita’ di dati –con grande mole di calcolo –vincoli di tempo reale

4 PCD Linguaggi e concorrenza4 Programmazione Concorrente e Distribuita sistema concorrente Per sistema concorrente intendiamo: software yun sistema software vari tipi di hardware yimplementato su vari tipi di hardware porta avanti contemporaneamente yche porta avanti contemporaneamente una molteplicita’ di attivita’ diverse correlate ytra di loro correlate cooperare xpossono cooperare ad un goal comune competere xpossono competere per risorse condivise

5 PCD Linguaggi e concorrenza5 Algoritmi, Programmi, Processi zAlgoritmo: procedimento logico che deve essere seguito per risolvere un problema, solitamente specificato da una sequenza di passi che l’esecutore dell’algoritmo deve seguire; zProgramma: descrizione dell’algoritmo mediante un opportuno formalismo (linguaggio di programmazione) che renda possibile l’esecuzione su un particolare elaboratore; zProcesso: sequenza di eventi cui dà luogo l’elaboratore quando opera sotto il controllo di un particolare programma. Programmazione Concorrente e Distribuita

6 PCD Linguaggi e concorrenza6 Algoritmi, Programmi, Processi Un esempio: Il M.C.D. tra due numeri naturali x e y Algoritmo: 1.controllare se i due numeri naturali x e y sono uguali tra loro, nel qual caso il loro M.C.D. coincide con il loro valore; 2.se sono diversi valutarne la differenza; 3. tornare al punto 1, prendendo in considerazione il più piccolo fra i due e la loro differenza. Programmazione Concorrente e Distribuita

7 PCD Linguaggi e concorrenza7 Algoritmi, Programmi, Processi Un esempio: Il M.C.D. tra due numeri naturali x e y Programma: begin a:= x; b:= y; while a <> b do if a > b then a := a - b; else b := b - a; end.

8 PCD Linguaggi e concorrenza8 Algoritmi, Programmi, Processi Un esempio: Il M.C.D. tra due numeri naturali x e y zProcesso: Per esprimere lo stato dell’elaboratore ci limitiamo ai valori delle variabili a, b, x e y (dati di ingresso). Siano x = 18 e y = 24: Stato iniziale Stato finale x y a b

9 PCD Linguaggi e concorrenza9 Algoritmi, Programmi, Processi ATT! zIl programma è una unità statica zil processo è una unità dinamica zSe 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 Distribuita

10 PCD Linguaggi e concorrenza10 Grafo di precedenza di un processo znodi del grafo rappresentano i singoli eventi zarchi del grafo rapprresentano le precedenze temporali zse 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 Distribuita

11 PCD Linguaggi e concorrenza11 Programmazione Concorrente e Distribuita

12 PCD Linguaggi e concorrenza12 Processi Concorrenti zL’ 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 Distribuita

13 PCD Linguaggi e concorrenza13 zGrafo di precedenza ad ordinamento parziale Programmazione Concorrente e Distribuita

14 PCD Linguaggi e concorrenza14 Programmazione Concorrente e Distribuita

15 PCD Linguaggi e concorrenza15 Programmazione Concorrente e Distribuita

16 PCD Linguaggi e concorrenza16 Abbiamo visto che: sequenziali alcuni problemi possono essere risolti mediante processi di calcolo non sequenziali cioè rappresentati da un grafo ad ordinamento parziale  in questo caso il problema puo’ essere risolto da alcuni moduli sequenziali che lavorano in parallelo.  elaboratore parallelo Occorre quindi un elaboratore parallelo, in grado cioe’ di eseguire un numero arbitrario di operazioni contemporaneamente.  linguaggio di programmazione Occorre quindi un linguaggio di programmazione con il quale poter descrivere questi algoritmi non sequenziali. Programmazione Concorrente Lo studio di questi linguaggi, dei loro compilatori e delle loro applicazioni prende il nome di Programmazione Concorrente. Programmazione Concorrente e Distribuita

17 PCD Linguaggi e concorrenza17 Programmazione Concorrente e Distribuita Programmazione concorrente Programmazione concorrente Hardware Software Di base Software Di base Linguaggi di Programm. Sist. Operativi Sist. Di Rete Sist. Real Time Sist. Distribuiti

18 PCD Linguaggi e concorrenza18 Programmazione Concorrente e Distribuita Hardware per sistemi concorrenti uniprocessore CPU unica + processori dedicati CPU unica + processori dedicati Multiprocessori Memoria condivisa Multiprocessori Memoria condivisa Nuove architetture dataflow e macch. funzionali Nuove architetture dataflow e macch. funzionali Vector e Array processor Vector e Array processor LAN Local internet Sistemi LAN/WAN Sistemi LAN/WAN

19 PCD Linguaggi e concorrenza19 Programmazione Concorrente e Distribuita Architetture per sistemi concorrenti zSISD: Single instruction stream, single data stream Modello uniprocessore convenzionale (macchina di von Neumann) zSIMD: Single instruction stream, multiple data stream Piu’ processori che eseguono la stessa istruzione su dati diversi (array o vector instruction) zMIMD: Multiple instruction stream, multiple data stream Piu’ processori che eseguono istruzioni diverse; possiamo ulteriormente distinguere tra: xSistemi multiprocessori con memoria comune xSistemi a rete (senza memoria comune)

20 PCD Linguaggi e concorrenza20 Programmazione Concorrente e Distribuita La macchina su cui un programma concorrente deve andare in esecuzione deve quindi essere in grado di : multielaboratore yeseguire un certo numero n di processi sequenziali (n > 1) => la sua architettura deve essere quella di un multielaboratore meccanismi primitivi di sincronizzazione e/o di comunicazione ypermettere ai processi di sincronizzarsi => deve fornire meccanismi primitivi di sincronizzazione e/o di comunicazione, sfruttati dal compilatore per tradurre i costrutti linguistici di sincronizzazione fornite dal linguaggio ad alto livello.

21 PCD Linguaggi e concorrenza21 Programmazione Concorrente e Distribuita programma sequenziale zUn programma sequenziale: sequenza di dichiarazioni e istruzioni che verranno eseguite sequenzialmente programma concorrente zUn programma concorrente: un insieme di programmi sequenziali che verranno eseguiti in parallelo

22 PCD Linguaggi e concorrenza22 moduli sequenziali asincroni interagenti zUn programma concorrente descrive l’ elaborazione come un insieme di moduli sequenziali asincroni interagenti. zUn linguaggio concorrente dovra’ contenere: processi sequenziali distinti y costrutti che permettano di dichiarare moduli di programma destinati ad essere eseguiti come processi sequenziali distinti interazioni ystrumenti linguistici per specificare le interazioni tra i moduli. Programmazione Concorrente e Distribuita

23 PCD Linguaggi e concorrenza23 Programmazione Concorrente e Distribuita po’ di terminologia: Un po’ di terminologia: zsistema parallelo: zsistema parallelo: sistema in cui l’esecuzione dei programmi si sovrappone nel tempo (parallelismo reale ) zsistema concorrente: zsistema concorrente: sistema in cui l’esecuzione dei programmi può (ma non necessariamente deve) sovrapporsi nel tempo (parallelismo apparente) concorrenza La concorrenza è una forma di astrazione del parallelismo e permette di trattare in maniera uniforme varie situazioni: yMultitasking di sistemi mono –processori ySistemi fortemente connessi (multiprocessori) ySistemi di rete

24 PCD Linguaggi e concorrenza24 Programmazione Concorrente e Distribuita Concorrenza come “interleaving” di istruzioni atomiche : Definizione: programma concorrente istruzioni atomiche computazione Un programma concorrente consiste di un insieme finito di processi sequenziali. I processi sono scritti usando un insieme finito di istruzioni atomiche. L’esecuzione di un programma concorrente è ottenuta interfogliando in maniera arbitraria le istruzioni dei processi. Il risultato di questo interleaving viene detto computazione.

25 PCD Linguaggi e concorrenza25 Programmazione Concorrente e Distribuita Istruzioni 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).

26 PCD Linguaggi e concorrenza26 Programmazione Concorrente e Distribuita Istruzioni atomiche E’ importante specificare con precisione quali siano le istruzioni atomiche. Es. lo statement di assegnazione e’ atomico: n :=  0 n :=  n + 1 n :=  0 temp :=  n n:= temp +1 temp :=  n n:= temp +1

27 PCD Linguaggi e concorrenza27 Programmazione Concorrente e Distribuita Correttezza Nei 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: safety zProprieta’ di “safety”: sempre La proprieta’ P deve sempre essere vera (P e’ vera in ogni stato della computazione) liveness zProprieta’ di “liveness”: prima o poi La proprieta’ P prima o poi sara’ vera (in ogni computazione esiste uno stato in cui P e’ vera)

28 PCD Linguaggi e concorrenza28 Programmazione Concorrente e Distribuita Fairness Ogni 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. fairness Proprieta’ di “fairness”: fair statement sempre abilitatoprima o poi una computazione e’ fair se per ogni suo stato e’ vero che uno statement sempre abilitato, prima o poi sara’ eseguito n := 0 flag := false while flag = false n := n + 1 flag := true

29 PCD Linguaggi e concorrenza29 zLe interazioni tra i processi possono essere classificate: ycooperazione ycooperazione: interazione prevedibile e desiderata (sincronizzazione diretta o esplicita) xscambio di segnali temporali xscambio di informazione ycompetizione ycompetizione: interazione prevedibile e non desiderata, ma necessaria (sincronizzazione indiretta o implicita) xmutua esclusione Programmazione Concorrente e Distribuita

30 PCD Linguaggi e concorrenza30 Compilazione di programmi concorrenti Programma sorgente scritto nel linguaggio L Compilatore Programma tradotto nel linguaggio oggetto per la macchina M Programmazione Concorrente e Distribuita

31 PCD Linguaggi e concorrenza31 macchina virtuale o astratta La macchina concorrente M in realta’ e’ una macchina virtuale o astratta aventi la caratteristiche funzionali desiderate, ma realizzata con tecniche software, basandosi su una macchina fisica M’ molto piu’ semplice. In particolare M’: ypuo’ avere un numero molto inferiore di processori (anche uno solo) supporto run time ypuo’ 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 time del compilatore del linguaggio concorrente. Un nucleo fornisce sempre due meccanismi basilari: multiprogrammazione ymeccanismo di multiprogrammazione sincronizzazione/comunicazione ymeccanismo di sincronizzazione/comunicazione P C D Architettura di una macchina concorrente

32 PCD Linguaggi e concorrenza32 Macchina virtuale e macchina fisica P C D Architettura di una macchina concorrente

33 PCD Linguaggi e concorrenza33 Due diverse organizzazioni logiche: memoria comune zgli elaboratori sono collegati ad una unica memoria comune (modello a memoria comune) modello a rete zgli elaboratori sono collegati da una sottorete di comunicazione, ma non condividono memoria (modello a rete) P C D Architettura di una macchina concorrente

34 PCD Linguaggi e concorrenza34 Programmazione Concorrente e Distribuita zEsecuzione di un programma come processo ylinguaggio sequenziale: programmaun processo xun programma -> un processo ylinguaggio concorrente: programmapiù processi xun programma -> più processi

35 PCD Linguaggi e concorrenza35 Programmazione concorrente e distribuita Esprimere la concorrenza zIn un linguaggio per la concorrenza occorrono costrutti linguistici per: y dichiarare, creare, attivare, terminare processi sequenziali che lavorino in parallelo; ypermettere l’ interazione (comunicazione e sincronizzazione) tra processi concorrenti.

36 PCD Linguaggi e concorrenza36 Programmazione concorrente e distribuita Esprimere la concorrenza zCostrutti linguistici per la concorrenza: yCoroutines yProcessi xFork/ Join xCobegin/Coend xTask

37 PCD Linguaggi e concorrenza37 Programmazione concorrente e distribuita Esprimere la concorrenza z Coroutines ycostrutto presente nei linguaggi Simula (68), BLISS, Modula, ec.. yutile per simulare l’elaborazione non sequenziale in ambiente monoprocessore ymeccanismo di passaggio di controllo simile al go to yrealizza un trasferimento di controllo non locale, cioè tra contesti diversi

38 PCD Linguaggi e concorrenza38 Programmazione Concorrente e Distribuita 1 programma 1 processo Sistema runtime del linguaggio Kernel del SO Sistema runtime del linguaggio 1 programma 1 processo 1 programma più processi 1 programma più processi Sistema runtime del linguaggio Sistema runtime del linguaggio Kernel del SO Linguaggio di programmazione sequenziale Linguaggio di programmazione concorrente senza supporto del SO

39 PCD Linguaggi e concorrenza39 Programmazione Concorrente e Distribuita 1 programma più processi 1 programma più processi Sistema runtime del linguaggio Sistema runtime del linguaggio Kernel del SO Linguaggio di programmazione concorrente con supporto del SO

40 PCD Linguaggi e concorrenza40 Programmazione Concorrente e Distribuita zStato di un processo nel SO (inseriti nel PCB, nel kernel) zProgram Counter zValore dei registri (contesto) zPartizioni di memoria z.. zFile aperti z.. z Stato di un processo nel linguaggio variabili accessibili z Valore delle variabili accessibili al processo in un dato istante: yvariabili del codice xprogramma utente xsupporto runtime xroutine di libreria yvariabili dei dati xstatici xdinamici (heap) yvariabili dello stack

41 PCD Linguaggi e concorrenza41 Programmazione Concorrente e Distribuita 1 programma 1 processo Kernel del SO Sistema runtime del linguaggio 1 programma 1 processo Linguaggio di programmazione sequenziale Codice del programma utente Supporto runtime Gestione dello stack e dello heap = Spazio indirizzi utente Sistema runtime del linguaggio

42 PCD Linguaggi e concorrenza42 Programmazione concorrente e distribuita Esprimere la concorrenza zLa coroutine è costituita da: yun insieme di dati locali yinsieme di istruzioni ( body ) zNel body ci può essere l’istruzione : resume X y X è il nome della coroutine chiamata yl’esecuzione della resume X trasferisce il controllo dalla coroutine chiamante alla coroutine X, previo salvataggio di contesto; y 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

43 PCD Linguaggi e concorrenza43 Programmazione concorrente e distribuita Esprimere la concorrenza Coroutine X Coroutine Y Coroutine Z begin begin begin …. …. …. …. resume Z …. resume Y …. resume Y …. resume X …. …. ….….. …. ….…. end endend

44 PCD Linguaggi e concorrenza44 Programmazione concorrente e distribuita Esprimere la concorrenza zOltre all’istruzione resume, occorrono altre istruzioni per: ycreare: co-id := co-create ( name, start-address, stack-size) ycancellare: kill ( co-id ) ychiamare: call ( co-id ) ysospendere: suspend una coroutine

45 PCD Linguaggi e concorrenza45 Programmazione concorrente e distribuita Esprimere la concorrenza zCaratteristiche delle coroutines : yin ogni istante una sola coroutine è attiva yl’ordine di esecuzione è controllato dal programmatore ysono utili per specificare particolari strategie di esecuzione in ambiente monoprocessore ynon sono adatte per programmare algoritmi concorrenti per ambienti multiprocessore

46 PCD Linguaggi e concorrenza46 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 gestire procedure separate

47 PCD Linguaggi e concorrenza47 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 creazione e gestione coroutine

48 PCD Linguaggi e concorrenza48 Programmazione concorrente e distribuita Esprimere la concorrenza Codice di una coroutine Codice per la creazione di coroutine e per il passaggio di controllo Sistema runtime Gestione della memoria Supporto per la creazione e il trasferimento di controllo: co-create kill call suspend resume heap Uno stack ed un blocco di controllo per ciascuna coroutine

49 PCD Linguaggi e concorrenza49 Programmazione concorrente e distribuita Esprimere la concorrenza  Consideriamo i seguenti problemi : file server yUn file server per una rete gira su una macchina dedicata. Riceve richieste dai clienti e lavora a più richieste contemporaneamente. controllaperiferici yUn SO controlla un certo numero di periferici e l’insieme delle routine di gestione. preleva ed esamina dati da sensori yIl sistema computerizzato di un impianto chimico periodicamente preleva ed esamina dati da sensori e gestisce le situazioni critiche ricerche parallele yUn sistema multiprocessre è utlizzato per ricerche parallele su grandi quantità di dati.

50 PCD Linguaggi e concorrenza50 Programmazione concorrente e distribuita Esprimere la concorrenza Il file server. Una possibile implementazione di questo problema con le coroutines si può ottenere creando una coroutine per ogni cliente del file server. Il server, in un loop, decide quale coroutine servire, il codice delle coroutine termina con una suspend. Questa soluzione va bene se il SO offre dell system call non bloccanti e se non è necessaria una risposta immediata agli eventi. Call A Call B suspend Main Coroutine A Coroutine B

51 PCD Linguaggi e concorrenza51 Programmazione concorrente e distribuita Esprimere la concorrenza Controllo Periferici. Una possibile implementazione di questo problema con le coroutines si può ottenere creando una coroutine per ogni periferico. Il main è costituito da un polling loop in cui le routine dei periferici sono chiamate l’una dopo l’altra in un ordine prefissato. Questa soluzione va bene se non ci sono tempi critici di risposta ai devices. zAltri Problemi problemi di tempo reale mancanza di parallelismo effettivo Il problema del controllo computerizzato di un impianto chimico non si può realizzare per problemi di tempo reale, mentre quello dell’elaborazione parallela per mancanza di parallelismo effettivo !

52 PCD Linguaggi e concorrenza52 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 processi Sistema runtime del linguaggio 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

53 PCD Linguaggi e concorrenza53 Programmazione concorrente e distribuita Esprimere la concorrenza Specifica, creazione e cancellazione di processi.Fork/Join Espressione 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 X B: X: A A B B X X

54 PCD Linguaggi e concorrenza54 Programmazione concorrente e distribuita Esprimere la concorrenza Specifica, creazione e cancellazione di processi.Fork/Join : per congiungere più flussi di controllo si usa l’istruzione join : var cont : integer : join cont indivisibile l’istruzione join in forma indivisibile esegue queste azioni; cont := cont -1 if cont = 0 then

55 PCD Linguaggi e concorrenza55 Programmazione concorrente e distribuita Esprimere la concorrenza Specifica, creazione e cancellazione di processi.Fork/JoinEsempio begin cont := 3 A fork E1 B fork E2 D go to E3 E1: C F go to E3 E2: E E3: join cont G end A A E E C C B B F F G G D D

56 PCD Linguaggi e concorrenza56 Programmazione concorrente e distribuita Esprimere la concorrenza Specifica, creazione e cancellazione di processi.Fork/Join Alternativa al join con contatore: zla fork restituisce un valore ztale valore è utilizzato per specificare lóperando della join P:= fork X join P P:= fork Xbegin end X join P

57 PCD Linguaggi e concorrenza57 Programmazione concorrente e distribuita Esprimere la concorrenza var P1, P2 :process procedure E1 begin C F end procedure E2 begin E end begin A P1 :=fork E1 B P2:= fork E2 D join P1 join P2 G end


Scaricare ppt "Programmazione Concorrente e Distribuita Linguaggi e concorrenza."

Presentazioni simili


Annunci Google