M.Giancola – Sistemi real-time
Transcript
M.Giancola – Sistemi real-time
M.Giancola – Sistemi real-time -1SISTEMI REAL-TIME Di Marco Giancola I sistemi real-time sono quei sistemi informatici atti a reagire ad eventi esterni entro precisi vincoli temporali. Essi, a differenza degli altri sistemi informatici, non devono limitarsi ad eseguire correttamente le loro funzioni, ma devono anche completarle entro chiari limiti temporali. Il termine real-time (tempo reale) può indurre facilmente a ritenere che tali sistemi siano più veloci degli altri, ma in realtà non è così; infatti, i vincoli temporali a cui essi sono sottoposti possono essere anche intervalli di tempo della durata di molti minuti. Tipici esempi di sistemi real-time sono: sistemi militari per la difesa (es.: sistemi di difesa missilistici); sistemi di controllo (es.: il pilota automatico di un aereo, il controllo di impianti nucleari e chimici, sistemi di guida di missili e satelliti); sistemi di monitoraggio/rilevamento (es.: rilevazione dati ambientali, sistemi di sorveglianza, controllo del traffico); robot; macchine di distribuzione automatiche; sistemi di telecomunicazioni; sistemi multimediali; piccoli dispositivi come cellulari, videogiochi, giocattoli computerizzati, elettrodomestici e simili. È da notare che molti di essi sono sistemi embedded, ossia hanno incorporato il computer che li controlla. Un sistema si definisce hard real-time o soft real-time a seconda che il limite temporale entro cui deve espletare la sua funzione sia specificato come valore assoluto o come valore medio. In parole povere, per i sistemi soft real-time, a differenza dei sistemi hard real-time, è ammissibile un certo margine di ritardo nel fornire la risposta. Un esempio di sistema hard real-time è il sistema di controllo della temperatura del nucleo di una centrale nucleare, dove il mancato rispetto dei vincoli temporali può provocare un evidente disastro. Un’altro esempio è il controllo di processo di un laminatoio per l'acciaio: la laminazione va eseguita entro un certo intervallo di tempo, dopo la formazione del materiale ferroso fuso, prima che le lastre si induriscano (questo è un esempio di sistema hard real-time tale che il non rispetto dei vincoli temporali produce effetti inaccettabili ma non catastrofici). Un esempio, invece, di sistema soft real-time può essere un riproduttore DVD, in cui il mancato rispetto dei vincoli temporali può determinare un degrado della qualità del filmato, ma non pregiudica il proseguimento della riproduzione. Un’altro esempio di sistema soft real-time è rappresentato dagli sportelli automatici per la distribuzione di banconote: tali sistemi, mediamente, devono avere un tempo di risposta accettabile per l'utente, altrimenti potrebbero causare l'insoddisfazione della clientela, ma niente di più. Rispetto alla velocità della risposta, possiamo suddividere i sistemi real-time in veloci e lenti, anche se non c'è una netta separazione tra queste 2 classi. I sistemi con tempi di risposta inferiori al secondo si possono certamente considerare veloci, mentre quelli con tempi di risposta misurabili in minuti si possono considerare lenti (lasciando, in tal modo, un intervallo d'incertezza dell'ordine dei secondi). 1 M.Giancola – Sistemi real-time -2- I sistemi real-time si possono inoltre suddividere in altre 2 categorie: quelli che modificano l’ambiente e quelli che non lo modificano. I sistemi appartenenti alla prima categoria si dividono in: 1. Sistemi ad anello aperto, le cui azioni sono preprogrammate. Esempi: robot per la verniciatura; robot per la movimentazione di pezzi. 2. Sistemi con feedback, le cui azioni sono in funzione delle informazioni sensoriali che ricevono. Esempi: controllori per impianti chimici o nucleari; sistemi di difesa militari; sistemi di regolazione di volo; robot evoluti. Il componente hardware di un sistema real-time deve essere in grado di gestire e registrare gli eventi esterni (per esempio, di ricevere dati dai sensori e inviare ordini agli attuatori), mentre il componente software deve essere in grado di reagire su più processi, ovvero deve essere un software multitasking. Infatti, le attività del sistema sono concorrenti, in quanto esso deve simultaneamente controllare diverse parti dell’ambiente e reagire ai suoi cambiamenti. Per comprendere meglio questo concetto, è sufficiente considerare, ad esempio, il sistema di controllo di volo di un aereo o di una centrale nucleare: è impensabile che un sistema del genere non reagisca ad un evento in real-time perché è impegnato a svolgere altre operazioni. Tra i linguaggi di programmazione utilizzati per sviluppare applicazioni real-time, citiamo: Assembly, che, tra tutti i linguaggi informatici, è il più vicino al linguaggio macchina. Ha avuto una certa diffusione in passato, poiché spesso utilizzava al meglio le risorse hardware, ma è stato ormai praticamente abbandonato il suo uso per scopi real time, a causa dei suoi forti vincoli con l'hardware e della difficoltà di programmazione, di manutenzione del software e di verifica dei vincoli temporali. Ada, un linguaggio sviluppato verso la fine degli anni 70, su iniziativa del Dipartimento della Difesa degli Stati Uniti, principalmente per lo sviluppo di applicazioni militari. Si tratta di un linguaggio estremamente efficiente, dotato di molte peculiarità (tra cui quella di consentire lo sviluppo di applicazioni multitasking) che lo rendono ottimale per lo sviluppo di varie tipologie di software, ma soprattutto per i software real-time. C, creato da Dennis Ritchie nei Bell Laboratories della AT&T nel 1972 come evoluzione del linguaggio B usato per lo sviluppo dei primi sistemi operativi UNIX. È stato per lungo tempo il linguaggio dominante nei domini applicativi caratterizzati da forte enfasi sull’efficienza, tra cui le applicazioni real-time. C++, un linguaggio di programmazione orientato agli oggetti, sviluppato da Bjarne Stroustrup nel 1983 presso i Bell Laboratories. Si tratta di un perfezionamento del linguaggio C, ottenuto aggiungendo al C alcune delle peculiarità del linguaggio Simula e di altri linguaggi come Ada e l’Algol 68. Insieme al C, è attualmente il linguaggio più utilizzato per lo sviluppo di software real-time. J2ME (Java 2 Micro Edition), che è la tecnologia più diffusa per lo sviluppo di software dedicato a dispositivi come cellulari, palmari e simili, che costituiscono un esempio di sitemi real-time. Un processo (o task o job) è una sequenza di istruzioni che, in assenza di altre attività, viene eseguita dal processore in modo continuativo fino al suo completamento. Un sistema real-time deve garantire che ciascun task termini entro un dato vincolo temporale detto deadline. Un task di un sistema real-time può essere: 1. periodico: quando viene eseguito periodicamente; 2. aperiodico: quando viene attivato ad intervalli di tempo irregolari (è attivato al verificarsi di un evento). 2 M.Giancola – Sistemi real-time -3- Può essere anche: 1. soft: se può non rispettare la sua scadenza (in gergo si dice sfondare la deadline), provocando un danno non irreparabile al sistema; 2. hard: quando, se sfonda la sua deadline, provoca un danno irreparabile al sistema. Un sistema hard real-time è in grado di gestire hard task. Gli stati di un task sono: ready (se è in attesa della CPU), running (se sta usando la CPU) e blocked (se è in attesa di un evento). Il release time è l’istante in cui un task diventa pronto per l’esecuzione, mentre il corrispondente stimolo viene chiamato release event. Può esserci un ritardo tra l’arrivo del release event e l’istante in cui il corrispondente task diventa ready. Il response time è l’intervallo temporale che intercorre tra il release time e l’effettivo completamento del task. Il massimo response time ammissibile per un task viene detto relative deadline. Viene denominata invece absolute deadline di un task la somma algebrica di response time e relative deadline. Nel funzionamento di un sistema real-time, ricopre un ruolo fondamentale lo schedulatore (o scheduler). Lo schedulatore è quel componente dei sistemi operativi multitasking in grado di far eseguire al processore più processi parallelamente, attraverso un’operazione chiamata schedulazione (scheduling). Nel caso dei sistemi real-time, nel momento in cui viene rilevato un evento esterno, lo schedulatore ha il compito di determinare un'opportuna sequenza di esecuzione dei processi tale da garantire il rispetto di tutti i vincoli temporali. Consideriamo un insieme di n task, ognuno con una propria deadline di. Definiamo la funzione di costo del task i-esimo come: 0 C i (t ) t di t di se il task i-esimo è di tipo hard, oppure come: 0 t di C i (t ) f (t ) t d i 3 M.Giancola – Sistemi real-time -4- se il task i-esimo è di tipo soft, dove f è una funzione monotona crescente. La funzione di costo totale sarà: n C (t ) C i (t ) i 1 I task di tipo hard dovranno quindi essere schedulati in modo da terminare entro un lasso di tempo minore della deadline, in modo da far valere la funzione Ci(t) 0 e non ∞; mentre i task soft dovranno anch’essi far valere 0 Ci(t), ma, in questo caso, un eventuale sfondamento della deadline non manderà il costo globale all'infinito. La schedulazione migliore è quella che minimizza la funzione di costo totale C(t). Si definisce utilizzazione di un task periodico il rapporto tra il suo tempo d’esecuzione e il suo periodo: Ui = Ei/Pi. Se abbiamo n task periodici, l’utilizzazione totale sarà la somma delle n utilizzazioni Ui: n n i 1 i 1 U U i Ei Pi U misura il carico del processore e deve essere ≤ 1, altrimenti il processore risulterà sovraccaricato e non sarà possibile schedulare gli n task periodici. Bibliografia http://feanor.sssup.it/~giorgio/slides/rts/intro1w.pdf http://feanor.sssup.it/~giorgio/slides/rts/intro2w.pdf http://it.wikipedia.org/wiki/Ada_(linguaggio) http://it.wikipedia.org/wiki/Assembly http://it.wikipedia.org/wiki/C%2B%2B http://it.wikipedia.org/wiki/J2ME http://it.wikipedia.org/wiki/Linguaggio_C http://it.wikipedia.org/wiki/Linguaggio_real-time http://it.wikipedia.org/wiki/Real-time http://it.wikipedia.org/wiki/Scheduler http://it.wikipedia.org/wiki/Sistema_embedded http://it.wikipedia.org/wiki/Sistema_operativo_real-time http://www.artisansw.it/RtPprocess/RtP_embedded.asp http://www.dii.unisi.it/~rigutini/teaching/talks/Sistemi%20Real-Time.pdf http://www.embedded.it/?q=content/definizioni http://www.math.unipd.it/~tullio/RTS/2009/L01.pdf 4