concurrency: introduction1 ©magee/kramer modulo sulla concorrenza gabriella pasi e carla simone...
TRANSCRIPT
Concurrency: introduction 1©Magee/Kramer
Modulo sulla concorrenza
Gabriella Pasi e Carla Simone (dai lucidi tratti dal sito del
libro di Jeff Magee e Jeff Kramer)
Concurrency: introduction 2©Magee/Kramer
Libro di testo
Concurrency:State Models &Java Programs
Jeff Magee &Jeff Kramer
WILEY
Concurrency: introduction 3©Magee/Kramer
Obbiettivi di questo modulo
In questo modulo di lezioni sono presentano i concetti fondamentali relativi alla definizione di specifiche (modelli) di programmi concorrenti. NON sono presentati aspetti di programmazione concorrente in Java, che saranno affrontati nel corso di sistemi operativi.
Gli aspetti di modellazione sono di estrema importanza per una corretta comprensione e definizione di sistemi concorrenti, e per ragionare in termini di concorrenza
Concurrency: introduction 4©Magee/Kramer
Programma
Modelli
Costrutti grafici
notazione algebrica
Concettisi presenta un approccio modellistico alla specifica e
alla costruzione di programmi concorrenti
Esempi
Labelled Transition Systems (LTS)
Reti di Petri SA (ad automi sovrapposti)
Finite State Process (FSP)
Concurrency: introduction 5©Magee/Kramer
Cos’è un programma concorrente?
Un programma concorrente ha più “thread” di controllo che permettono sia la realizzazione di computazioni multiple sia il controllo di attività esterne che si presentano contemporaneamente.
Un programma sequenziale ha un singolo “thread” di controllo.
Concurrency: introduction 6©Magee/Kramer
Thread
Thread: filone, filo del discorso
Thread: [1] Una delle parti di un processo (applicazione in fase di esecuzione). Ogni thread dispone di una parte di memoria e di un gruppo di registri della CPU. Quando il thread termina (quando cioè termina la singola fase all'interno dell'esecuzione dell'applicazione) la memoria e gli oggetti di sistema che utilizzava vengono liberati. Quando termina l'ultimo thread di un processo, termina anche il processo, e quindi l'applicazione. Il termine multithreading denota l’esecuzione contemporanea di più thread
[2] In un newsgroup Usenet (in Internet) identifica i messaggi con un medesimo argomento.
Concurrency: introduction 7©Magee/Kramer
Perché la Programmazione Concorrente?
Applicazioni distribuite
Migliori prestazioni in caso di hardware multiprocessore
parallelismo
Incremento velocità di trasferimento dati
(throughput) tra applicazioni
Incremento dei tempi di risposta delle applicazioni
thread di alta priorità per le richieste utenti.
Strutturazione
nel caso di programmi che interagiscono con l’ambiente,
controllo di attività multiple e gestione di eventi multipli.
Concurrency: introduction 8©Magee/Kramer
modelli
Un modello è una rappresentazione semplificata della realtà.
focalizzazione su un aspetto di interesse - concorrenza animazione dei modelli per verificare un comportamento verifica di proprietà (ad esempio sicurezza & vivezza)
Concurrency: introduction 9©Magee/Kramer
modelli
Da un punto di vista notazionale un processo è sempre ben distinto dal suo comportamento
Da un punto di vista notazionale in alcuni casi un processo non è ben distinto dal suo comportamento
Diversi metodi di rappresentazione grafica:
In questo contesto i modelli sono descritti per mezzo di automi a stati finiti.
•Labelled Transition Systems LTS.
Un modello grafico può essere descritto linguisticamente mediante il linguaggio FSP (finite state processes) e, se denotato mediante LTS, può essere visualizzato e analizzato per mezzo dello strumento di analisi LTSA.
•Reti di Petri
Concurrency: introduction 10©Magee/Kramer
Materiale su Web
esempi in Java
esempi di modelli a stati
Il tool “Labelled Transition System Analyser (LTSA)” per animare i modelli LTS e per verificarne le proprietà.
http://www-dse.doc.ic.ac.uk/concurrency/
Concurrency: introduction 11©Magee/Kramer
Capitolo 2
Processi & Thread
Concurrency: introduction 12©Magee/Kramer
Processi concorrenti
I sistemi complessi sono strutturati come insiemi di attività semplici ognuna rappresentata come processo sequenziale. I processi possono sovrapporsi o essere concorrenti. La concorrenza può essere intrinseca al mondo fisico, oppure introdotta per ottimizzare i tempi di esecuzione o per gestire comunicazioni. La programmazione concorrente è complessa e può facilmente introdurre errori. Un approccio Un approccio rigoroso è essenzialerigoroso è essenziale
Modellazione di processi come macchine a stati finiti
A livello di programmazione: thread in Java.
Processo come sequenza di azioni
Concurrency: introduction 13©Magee/Kramer
Modellazione di Processi
Modelli descritti mediante macchine a stati, quali Reti di Petri e Labelled Transition Systems LTS. Queste possono essere descritte linguisticamente per mezzo di una notazione algebrica, detta finite state processes (FSP)
LTS - Reti di Petri forma grafica
FSP - forma algebrica
Notazioni con espressività diversa!Vedremo perchè
Concurrency: introduction 14©Magee/Kramer
Modellazione di Processi
Un processo è l’esecuzione di un programma sequenziale. E’ modellato come una macchina a stati finiti che transita da stato a stato per mezzo dell’esecuzione di azioni atomiche.
Un interruttore
onoffonoffonoff ……….
Una sequenza di azioni o “trace” comportamento
on
off
0 1
LTS Reti di Petrion
off
Concurrency: introduction 15©Magee/Kramer
FSP - azioni e processi
Se x è un’azione e P un processo (x-> P) descrive un processo che inizialmente esegue l’azione x e poi si comporta esattamente come P.
ATTIVAZIONEUNICA = (unavolta -> STOP).
Convenzione: le azioni hanno lettera iniziale minuscola
i PROCESSI hanno lettera iniziale maiuscola
once
0 1
Concurrency: introduction 16©Magee/Kramer
FSP - ricorsione
ATTIVAZIONE = OFF,OFF = (on -> ON),ON = (off -> OFF).
Un comportamento ripetitivo si modella mediante ricorsione:
Definizione più sintetica:
ATTIVAZIONE = OFF,OFF = (on -> (off -> OFF)).
E ancora:
ATTIVAZIONE = (on -> off -> ATTIVAZIONE).
on
off
0 1
Concurrency: introduction 17©Magee/Kramer
Animazione per mezzo del “tool” LTSA
Nella rappresentazione LTS associata, l’ultima azione è evidenziata in rosso.
Il programma LTSA può essere usato per produrre una “trace”.
on
off
0 1
Concurrency: introduction 18©Magee/Kramer
FSP - action prefix
SEMAFORO = (rosso->giallo->verde->giallo->SEMAFORO).
LTS :
Trace:
modello FSP di un semaforo :
red orange green
orange
0 1 2 3
rosso giallo verde
giallo
Reti di Petri
rosso
giallo
verde
giallo
rossogialloverdegiallorossogialloverde …
Concurrency: introduction 19©Magee/Kramer
FSP - costrutto di selezione
Se x e y sono azioni, (x-> P | y-> Q) descrive un processo che inizialmente realizza una delle due azioni x o y. Dopo l’esecuzione della prima azione, il comportamento successivo è descritto da P se la prima azione è stata x, da Q se la prima azione è stata y.
Chi o che cosa compie la scelta?
C’è una differenza tra azioni di input e output?
Concurrency: introduction 20©Magee/Kramer
FSP - scelta
DISTRIBUTORE = (rosso->caffè->DISTRIBUTORE |blu-> thè-> DISTRIBUTORE).
LTS
Modello FSP di una macchina distributrice di bevande:
red
blue
coffee
tea
0 1 2
rosso
blu
caffè
thè
rosso blu
caffè thè
Reti di Petri
Concurrency: introduction 21©Magee/Kramer
Scelta non deterministica
Il processo (x-> P | x -> Q) descrive un’azione iniziale x e un comportamento successivo modellato da P o Q.
LANCIOMONETA = (lancio->TESTA|lancio->CROCE),TESTA = (vistesta->LANCIOMONETA),TAILS= (viscroce->LANCIOMONETA).
Lanciare una moneta
Concurrency: introduction 22©Magee/Kramer
Scelta non deterministica Lanciare una moneta
toss
toss
heads
tails
0 1 2
lancio
lancio
viscroce
vistesta
lancio
vistesta viscroce
A)
lancio
vistesta viscroce
lancioB)
LTS : Reti di Petri
Concurrency: introduction 23©Magee/Kramer
Modellare errori (eccezioni)
Come si può modellare un canale di comunicazione inaffidabile che accetta un input (in) e produce un output solo nel cas in cui non si presenti un errore?
Uso del non-determinismo ... CHAN = (in->CHAN |in->out->CHAN).
in
in
out
0 1
in
error out
LTS : Reti di Petri
Concurrency: introduction 24©Magee/Kramer
Buffer che prende in input un valore nell’intervallo 0 .. 3 e restituisce in output quel valore:
FSP - processi e azioni indicizzati
BUFF = (in[i:0..3]-> out[i]-> BUFF).equivalente a:
O, usando un parametro di processo con valore di default:
BUFF = (in[0]->out[0]->BUFF |in[1]->out[1]->BUFF |in[2]->out[2]->BUFF |in[3]->out[3]->BUFF ).
BUFF(N=3) = (in[i:0..N]->out[i]-> BUFF).
Concurrency: introduction 25©Magee/Kramer
FSP - selezione su condizione
La selezione (when B x -> P | y -> Q) significa che quando la condizione B è verificata allora è possibile scegliere sia l’azione x sia l’azione y, altrimenti se B non è verificata l’azione x non può essere scelta.
COUNT (N=3) = COUNT[0],COUNT[i:0..N] = (when(i<N) inc->COUNT[i+1] |when(i>0) dec->COUNT[i-1] ).
inc inc
dec
inc
dec dec
0 1 2 3
Concurrency: introduction 26©Magee/Kramer
FSP - selezione su condizione
dec inc
dec
inc
inc
Valore 0
Valore 1
Valore 2
Valore 3
dec