SISTEMI REATTIVI:
INTRODUZIONE
Event driven programming
• La tecnica usata per gestire eventi
è detta event-based o event-driven
programming
• Nella programmazione event-driven
non si ha un flusso di controllo
normale perché questo viene pilotato
da eventi esterni
Ambiente Esterno
Coda di eventi
Programma
Event driven programming
(2)
• I programmi event-driven sono
composti da piccole porzioni di
codice dette:
– event handlers
– event dispatcher
– event queue
Sistemi SW concorrenti
• I sistemi software sono costituiti da
componenti che reagiscono a richieste
esterne di servizio; ogni componente è in
grado di servire più richieste
concorrentemente.
• La concorrenza può essere vista in modi
diversi
–
–
–
–
Competitive
Cooperative
Internal
external
Sistema Reattivo
• E’ un sistema event-driven che
interagisce continuamente con
l’ambiente esterno reagendo agli
stimoli che da esso pervengono
• Un sistema è detto reattivo quando
il suo comportamento è influenzato
da eventi che hanno luogo nel mondo
reale, al di fuori dei computer che
governano il sistema stesso.
Sistema Reattivo
• Un sistema real-time è un
sistema reattivo che deve
rispettare vincoli temporali
nella gestione degli eventi.
• Soft real-time
• Hard real-time
• Sistema a stimolo/risposta
Struttura di massima di un
sistema reattivo
Caratteristiche
• Flessibilità nell'interfacciamento con il
controllo dispositivi e controllo di
produzione
• Semplicità di estensione ed adattamento a
situazioni diverse.
• Adattabilità nel processing dei dati di
produzione.
• Testabilità
• High Availability
• Prestazioni soft real-time.
• Scalabilità
Architetture SW sincrone
• Introdotte per la
programmazione sistemi reattivi
• L’ ipotesi di sincronia
(synchrony hypothesis) assume
che tutte le computazioni
avvengano in passi atomici
discreti durante i quali il
tempo viene ignorato
Determinismo
• Il programma a partire dalla stesse condizioni iniziali
deve produrre gli stessi risultati finali.
S0
A
S1
Esempio di non determinismo
A
S1
B
S3
D
S0
ε
A
S4
S2
C
Esempio di determinismo
A
S1
B
S3
S0
C
E
D
S2
S4
ESTEREL
Informazioni principali
• Sviluppato da Grard Berry a partire dal
1983
• E’ nato per applicazioni per robot
• E’ un linguaggio testuale e impertivo
• É definito formalmente tramite la
semantica matematica
Gli usi
• Orologi da polso (hanno un microprocessore a 4 o 8 bit.
Gli eventi a cui sono soggetti sono il clock che ha priorità maggiore
rispetto a quelli generati dall’utente premendo sui oulsanti)
• Componenti per processori, per esempio
cache controller
• Controllers, per esempio per protocolli di
comunicazione
• Areonautica, per esempio controllo carburante,
carrello, ecc
Le idee di base
•
•
•
•
Reactivity
Atomicity of reaction
Istantaneous broadcast
Determinism
Reactivity
Reactive Model
• i sistemi comunicano continuamente
con l’ambiente
• quando arriva un evento il sistema
reagisce producendo un evento di
output.
Atomicity of reaction
Esterel si basa su
Perfect Synchrony hypothesis
le reazioni sono istantanee
come se i programmi fossero eseguiti
da una macchina infinitamente veloce.
Istante
Tout – Tin  0
Esterel è un linguaggio sincrono
Atomicity of reaction (2)
l’ipotesi di Perfect
Synchrony
è ideale
realtà
le reazioni sono atomiche
una reazione non puo’ interferire con un’altra
Esempio di esecuzione
1. Il programma inizia con uno stato iniziale.
2. Se riceve degli stimoli, cioè un insieme di segnali di input
3. reagisce
4.
produce altri stimoli, cioè un insieme di segnali di output.
S1
S3
tempo
S2
S4
Alla fine dell'istante avrà un altro stato che gli permetterà di reagire
ad altri stimoli e così via….
Atomicity of reaction (3)
• Esterel prevede parallelism operator ( || )
il programma dirige entità parallele
(in Ada tali entità si chiamano task)
… e la concorrenza ??
• Se c’è concorrenza  il sistema non è
deterministico, ovvero che il suo comportamento
è imprevedibile perché esso non dipende solo
dagli input.
•Avendo però il concetto di reazioni atomiche non
si ha più la concorrenza, in quanto una azione non
può interferire con un’altra, ovvero non cè
sovrapposizione tra le due azioni  il sistema è
deterministico
Istantaneous broadcast
• Per sincronizzre le varie entità che lavorano
in parallelo esse devono comunicare.
• La comunicazione avviene tramite i segnali e
usando il meccanismo chiamato “broadcast”
• In Esterel ci sono due tipi di comunicazioni:
– Esterna: tra programma e mondo esterno
– Interna: tra moduli costituenti il programma stesso.
I segnali
• Un segnale ha due possibili stati:
– assente
– presente
• In un istante esso può essere in un solo
stato
• I segnali possono essere emessi
• È possibile verificare la presenza di un
segnale
• Un segnale può avere in valore
Istantaneous broadcast
Il broadcast e’ legato al concetto di istante:
l’emissione di un segnale in un determinato
istante e’ recepito nello stesso istante da
tutte le altre entita’
Questa caratteristica permette al
programma di chiamarsi “istantaneous
decision”
Esempio
Present S then emit T end
||
emit S
||
present S then emit U end
Riassumendo…
• Le reazioni sono istanatee  sincrono
• Più entità lavorano in parallelo
• Non c’è concorrenza
• Determinismo
• Le entità si possono sincronizzare tramite segnali e
opportune istruzioni
I comandi – le istruzioni
Sono di due tipi:
1) Combinational statements: usano “zero
time” di eseguzione, cioe’ vengono eseguite
e terminano nello stesso istante (es: emit)
2) Sequential statements: usano uno o piu’
istanti (es: await)
Esempio 1 - pausa
module Example1:
output A, B, C;
emit A;
present A then emit B end;
Ferma l’esecuzione per questo istante
pause;
e la riattiva nel prossimo
emit C;
end module
A
B
C
Esempio 2 -attesa
[
emit A ; pause ; pause; emit A
||
await A; emit B
]
A
A
B
Esempio 2-bis
[
emit A ; pause ; pause; emit A
||
await immediate A; emit B
]
A
B
A
Esempio 3 - interruzione
Abort
emit A;
pause;
emit B;
when C;
emit D;
Esegue il suo corpo finchè:
• non compare il segnale d'interruzione e termina
•quando il corpo stesso termina
C
L'attesa sul segnale
di interruzione si fa non subito
ma all'istante successivo a quello in cui
l'interruzione è stataBattivata.
A
D
Esempio cronometro
Un cronometro base ha solo un pulsante
START_STOP che permette
alternativamente di lanciare e fermare il
tempo.
Il controllore si basa su un segnale HS
(1/100 di secondi) per calcolare il suo
tempo TIME.
cronometro
module BASIC_STOPWATCH:
input START_STOP, HS;
Dichiarazione variabile
output TIME: integer;
e assegnazione
var TIME := 0 : integer in
loop
While (true)
emit TIME(TIME);
Aspetta finchè non è
await START_STOP;
stato premutoto lo start
Non abort
è possibile assegnare in parallelo alla
stessa variabile 2 valori diversi:
every HS do
TIME := TIME +1;
X := 0 || X := 1
emit TIME(TIME);
Segnale con valore
every
Perché esterelend
è deterministico
when START_STOP
Finchè non viene premuto lo stop
end loop
end var
end module
REACTIVE C
Il Reactive C è un'estensione del linguaggio C creata per
adattarlo alla programmazione reattiva.
Una caratteristica importante dei sistemi reattivi è il
concetto di tempo.
Mentre nei linguaggi tradizionali il tempo è assoluto, qui
diventa relativo.
Il tempo è diviso in istanti, e in ciascuno di essi vengono
eseguiti da uno o più statement.
Uno statement è un'insieme di istruzioni.
REACTIVE C
REACTIVE PROCEDURES
rproc CiaoBambini()
{
printf("Ciao Bambini");
}
(Dichiarazione di una procedura in RC)
REACTIVE C
EXEC
rproc Saluta()
{
exec CiaoBambini();
}
(Richiama una procedura)
REACTIVE C
STOP
rproc CiaoBambini()
{
printf("Ciao Bambini");
stop;
printf("Ho detto ciao.");
}
(Stop fa terminare l'istante corrente. Le istruzioni
successive verranno eseguite nel prossimo
istante)
REACTIVE C
ATTENZIONE!
rproc CiaoBambini()
{
printf("Ciao Bambini");
stop;
printf("Ho detto ciao.");
}
LA PROCEDURA “CiaoBambini()” RICHIEDE 2
ISTANTI PER ESSERE ESEGUITA 1 VOLTA E 3
ISTANTI PER ESSERE ESEGUITA 2 VOLTE!!!
REACTIVE C
LOOP
loop exec CiaoBambini();
(Esegue all'infinito uno statement)
REACTIVE C
EVERY
every (CiSonoBambini==1) exec
CiaoBambini();
(Esegue lo statement ogni volta che la
condizione è vera)
REACTIVE C
REPEAT
repeat (10) exec CiaoBambini();
(Ripete X volte uno statement)
REACTIVE C
WATCHING
watching (CiSonoBambini==0) exec
CercaBambini();
watching (CiSonoBambini==0) loop exec
CercaBambini();
(Esegue lo statement finchè la condizione
non è vera)
REACTIVE C
AWAIT
await (CiSonoBambini==1);
(Attende che la condizione sia vera)
REACTIVE C
WATCHING...TIMEOUT
watching (CiSonoBambini==0) exec
CercaBambini();
timeout exec AddioBambini();
(Se la condizione diventa vera prima della
fine dell'esecuzione dello statement1
allora viene eseguito anche lo statement2)
REACTIVE C
SELECT
select (x = !x)
exec p1();
exec p2();
(E' simile all'if)
REACTIVE C
ECCEZIONI
rproc CercaErrori()
{
raise errore;
}
catch errore
exec CercaErrori();
handle exec GestisciErrori();
REACTIVE C
PARALLELISMO
close
par
{ suspend; printf("1"); }
printf("2");
(Il codice viene eseguito in un istante. I due
statement vengono però eseguiti in
microistanti divesi. Suspend equivale a stop
ma si riferisce ai microistanti.)
Confronto fra
Reactive C ed Estrel
Caratteristiche di Estrel
• Comunicazione di tipo broadcast
• Instantaneous Broadcast
• Compilatore basato su una semantica
funzionale
• Rifiuta i programmi con “casuality
cicles”
Casuality cicles
Si possono verificare in presenza di:
• operazioni con contraddizioni
present S else emit S
• operazioni tra loro sincrone ma che verrebbero
eseguite in parallelo
emit S || present S then emit T end
• programmi non deterministici
present S1 else emit S2 end
||
present S2 else emit S1 end
Componenti importanti in
Estrel
1.
Divisione del tempo in istanti di tempo
(parte reattiva)
2. Comunicazione broadcast
3. Ricezione di un segnale non blocca
l’esecuzione dei processi
Caratteristiche di RC
• Estensione del C
• Parallelismo
usato
per
descrivere
la
concorrenza logica dei processi
• Processi paralleli e deterministici generano un
codice sequenziale
Ambienti di confronto
•
•
•
•
STATEMENTS REATTIVI
PARALLELISMO E COMUNICAZIONE
TRATTAMENTO DEI DATI E DEI PROCESSI
ESECUZIONE DEI PROGRAMMI
Statement reattivi
Reactive C statement derivano da
Estrel.
• Condizioni degli statement
• Statement stop e select di RC
• Microistanti solo in RC
Parallelismo e comunicazione
• Operatore parallelo non commutativo in RC
par
printf(“1”);
printf(“2”);
• Metodi di sincronizzazione e variabili globali
• Dialoghi istantanei in Estrel
present S1 then emit S2 end
||
emit S1; present S2 then emit S3 end
• Instantaneous broadcast in Estrel, ma broadcast e
radio in RC
Trattamento dei dati e dei
processi
Estrel:
• Tipi di dato primitivi
• No processi dinamici
RC:
• come il C
Esecuzione dei programmi
• L’eseguibile generato da Estrel può essere
utilizzato per produrre codice in altri
linguaggi di programmazione (in particolare C
e ADA) o per produrre input per formule o
sistemi di validazione.
• In RC no.
Bibliografia
• “Corso di informatica – Elementi di base” Renata Paola Dameri –
Genzianella Foresti Jackson Libri
• “Reactive C: An Extension of C to Program Reactive Systems“
Frédéric Boussinot
• “Architetture di sistemi reattivi” Carlo Pescio
• “The SL Synchronous Language” Frédéric Boussinot, Roert de
Simone
• “La Programmation par Objects Réactifs” Guillaume Doumenic,
Frédéric Boussinot
Scarica

Reactive Systems