Sistema real-time
Real-time (in italiano "tempo reale"), più precisamente real-time computing (RTC), è un termine utilizzato in ambito informatico per indicare le computazioni per i quali la correttezza del risultato dipende non solo dalla correttezza logica ma anche dal tempo di risposta[1][2]. Estendendo la definizione, possono essere anche aggiunti requisiti di affidabilità e interazione con l'ambiente [1].
Un sistema in grado di esegure computazioni real-time, considerato sia dalla parte hardware che quella software, è detto sistema real-time. Trovano applicazione nella maggior parte dei sistemi Mission Critical e Safety Critical, a causa della necessità di reazione ad eventi esterni entro tempi prestabiliti[3]. In questo caso si parla di deadline, ovvero il tempo entro in quale la computazione in reazione ad un evento deve avere terminato[4].
Concetti introduttivi
Un sistema real-time garantisce un certo tempo di risposta deciso a design-time. Real-time non è quindi sinonimo di velocità: un sistema real-time può essere estremamente lento, ma garantisce un upper-bound preciso al tempo necessario alla computazione[5]. In ottica di scheduling, l'obiettivo di un sistema normale è minimizzare il tempo di esecuzione dei task; l'obiettivo di un sistema real-time è il completamento dei task nel tempo stabilito.
I programmi real-time possono essere eseguiti autonomamente (tipico dei sistema embedded) o attraverso un sistema operativo, che in questo caso deve essere un sistema operativo real-time. Nel secondo caso non è quindi sufficiente che il programma sia real-time, ma richiede che anche il sistema operativo fornisca un appropriato scheduling real-time[6].
Per quanto il termine real-time venga spesso riferito ai sistemi operativi (vedi sistema operativo real-time ), la necessità di una risposta real-time è intrinseca al problema da risolvere prima che essere caratteristica della soluzione trovata. Una tipica applicazione in tempo reale è il controllo di .
Se a rigore tutte le applicazioni sono real-time, perché comunque ci si aspetta una risposta entro un tempo finito, in pratica il termine viene usato per quelle applicazioni dove i problemi relativi ai tempi di risposta sono preponderanti rispetto alla complessità dell'algoritmo da utilizzare.
All'interno dei problemi da trattare in tempo reale si tende a distinguere le applicazioni in tempo reale stretto in cui i tempi di risposta si esprimono tipicamente in millisecondi, o comunque in frazioni di secondo, da un tempo reale più lasco, in cui i tempi di risposta sono normalmente esprimibili in secondi.
Per la risoluzione di problemi real-time si usano di solito architetture hardware, sistemi operativi e programmi applicativi dedicati. Le tre componenti (hardware, software di base e software applicativo) sono spesso strettamente legate, in modo da conseguire le necessarie ottimizzazioni sui tempi.
Così come in altri settori, con l'evoluzione della tecnologia informatica molti problemi hardware sono state gradualmente riportate sul software (e quindi facilmente rimediabili tramite aggiornamenti opportuni).
Negli ultimi tempi questa terminologia è stata associata all'utilizzo di alcuni servizi della rete, quando in effetti i presupposti per poter realmente fruire di un servizio in modalità real-time sono davvero lontani dagli ambienti operativi d'uso comune.
Classificazione dei sistemi real-time
Una prima classificazione dei sistemi real-time riguarda la tollerabilità del non rispetto delle deadline temporali[1][7][8]:
- Sistema hard real-time: il non rispetto delle deadline non è ammesso; il mancato raggiungimento di una sola deadline può portare a conseguenze catastrofiche nell'ambiente in cui il sistema opera. È tipico delle applicazioni safety-critical;
- Sistema firm real-time: il mancato rispetto di alcune deadline è amesso purché entro certi limiti; se la deadline è mancata, il risultato non è utilizzabile ma non causa eccessivi problemi;
- Sistema soft real-time: il mancato rispetto di alcune deadline è amesso purché entro certi limiti; se la deadline è mancata, il sistema può utilizzare il risultato, tipicamente degradando in performance senza causare eccessivi problemi.
Spesso la distinzione tra firm e soft non viene marcata e i due concetti sono considerati equivalenti[9].
Esempi
Secondo la precedente classificazione alcuni esempi di sistemi real-time sono:
- Hard real-time:
- Sistemi di controllo delle centrali nucleari
- Avionica
- Sistemi Airbag[10]
- In generale tutti i sistemi safety-critical
- Firm real-time:
- Sistemi di previsione[7]
- Cruise control[8]
- Soft real-time:
- Riproduzione video [11]
- Gestione QoS nelle reti a pacchetto[12]
Perché real-time?
Rispondere ad un evento in tempo reale significa farlo ad una velocità che sia possibile predeterminare, quali che siano i contesti operativi dell'apparato. Questo richiede un'architettura hardware in grado di gestire e registrare gli eventi esterni e di un software in grado di reagire su più processi per attuare una reazione adeguata.
Esempio
Un esempio pratico è quello del 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é il sistema è impegnato in chissà quali operazioni: sarebbe come dire che l'aereo è caduto perché il sistema di controllo d'assetto stava facendo un defrag del disco rigido.
Per questo genere di sistemi viene utilizzata anche la terminologia di "hard real-time".
Problemi correlati
Solitamente le caratteristiche real-time sono richieste insieme ad altre particolarità. Un requisito che compare frequentemente associato è quello della continuità operativa: alcuni sistemi real-time devono lavorare in modo continuativo per lunghi periodi senza alcuna interruzione: è il caso del controllo di centrali nucleari o del controllo del traffico aereo.
In altri casi la caratteristica del tempo reale è associata a calcolatori incorporati (embedded) con il dispositivo che devono controllare. È questo il caso di alcune applicazioni militari (per esempio in artiglieria).
Note
- ^ a b c Shin, Kang G., Parameswaran Ramanathan, Real-Time Computing: A New Discipline of Computer Science and Engineering, in Proceedings of the IEEE, 1994.
- ^ Marco Giancola, Sistemi Real-Time (PDF), su matematicamente.it. URL consultato il luglio 2016.
- ^ Paul Pop, Safety-critical systems, su imm.dtu.dk, Technical University of Denmark. URL consultato il luglio 2016.
- ^ Gianluca Palli, Introduzione ai sistemi real-time (PDF), su www-lar.deis.unibo.it, Università di Bologna. URL consultato il luglio 2016.
- ^ Rigutini Leonardo, Sistemi operativi Real-Time (PDF), su dii.unisi.it, Università di Siena.
- ^ Jürgen Assfalg, dsi.unifi.it, Università di Firenze, http://www.dsi.unifi.it/~assfalg/SO/20042005/scheduling-rt.pdf . URL consultato il luglio 2016.
- ^ a b Stefan M. Petters, Real-Time Systems (PDF), su cse.unsw.edu.au, UNSW Australia. URL consultato il luglio 2016.
- ^ a b Donglin Liu, Xiaobo Sharon Hu, Senior Member, IEEE, Michael D. Lemmon, Qiang Ling, Firm Real-Time System Scheduling Based on a Novel QoS Constraint, in IEEE Transactions on Computers, 2006.
- ^ Pier Luca Montessoro, I sistemi operativi real-time (PDF), su web.diegm.uniud.it, Università degli Studi di Udine. URL consultato il luglio 2016.
- ^ Hard and Soft Real-Time, su docs.fedoraproject.org, Fedora. URL consultato il luglio 2016.
- ^ Hard and soft real time, su lwn.net. URL consultato il luglio 2016.
- ^ Karthik Channakeshava, Kaustubh S. Phanseg, Luiz A. DaSilva Binoy, Ravindran Scott F. Midkiff, E. Douglas Jensen, IP Quality of Service Support for Soft Real-Time Applications, in IEEE Euromicro Conf. Real-Time Systems, 2005.