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