# Computació en temps real

Un sistema en temps real es defineix com aquell sistema en el que el seu correcte funcionament no depèn únicament del resultat lògic del càlcul, sinó també del temps en què aquest es realitza. En altres paraules, la computació en temps real consisteix a realitzar còmput en l'instant de temps precís. Les característiques que tenen com a objectiu complir qualsevol d'aquests sistemes són:
* Rapidesa
* Predictibilitat
* Fiabilitat
* Adaptabilitat
Normalment aquests sistemes estan formats per dues parts: un "sistema controlador" i un "sistema controlat". El sistema controlador és aquell que s'encarrega de fer funcionar correctament el sistema controlat mitjançant la interacció amb l'entorn i la informació recollida d'aquest amb l'ajuda de sensors.
A diferència d'un sistema de còmput casual, l'objectiu no és realitzar una operació amb la major rapidesa possible, sinó que ha d'actuar en el moment adequat i a una velocitat controlada. Així doncs, podem dir que un sistema en temps real està subjecte a interactuar en un temps concret (en anglès, anomenat com real-time constraints). Segons la interacció, podem classificar-los en dos tipus:
* Tasques periòdiques: la tasca ha de ser executada cada T períodes (per exemple, un sonar).
* Tasques aperiòdiques: la tasca es crea i es destrueix en l'instant que és utilitzada.
Una de les principals dificultats a l'hora de dissenyar un sistema en temps real és la lluita contra les fallades, ja que un error pot provocar que es desestabilitzi i acabi realitzant una tasca inesperada o no desitjada.
L'airbag n'és un bon exemple, ja que aquest sistema de seguretat implementat en els vehicles ha de reaccionar quan sorgeix un estímul (en aquest cas, quan detecta un xoc) i amb la major rapidesa possible, doncs activar-se en un instant anterior o posterior podria posar en joc la vida del tripulant.

## Història

Els anomenats sistemes encastats van ser els que van propiciar l'aparició d'aquest tipus de computació a partir del 1970. Aquests necessitaven respostes ràpides, amb un ordre de prioritat marcat i amb interaccions de dades, així van aparèixer sistemes operatius capaços de complir aquests requisits. Els més remarcables van ser el RTOS o sistema operatiu en temps real per les seves sigles en anglés, i el RDOS o sistema operatiu en temps real d'operació de disc.
La popularització de la computació en temps real no va ser sinó fins a l'aparició del microprocessador MOS 6502, el qual va ser presentat per diverses empreses en alguns dels seus dissenys, tals com Nintendo (amb la Nintendo Family Computer), Atari (amb la seva Atari 2600 i Atari 800) o Apple (amb l'Apple II) a finals dels 70 i principis dels 80. Amb aquests es podien portar a terme les tasques dels sistemes en temps real i estaven a l'abast de qualsevol.

## Classificació

Els sistemes de temps real estan formats per unitats de treball denominades com tasques. Segons la gravetat d'acció en cas de fallada, en podem distingir dos tipus:
* Tasques hard real-time: són de nivell crític, determinístiques; un error en aquestes tasques poden provocar un error fatal en el sistema. Les restriccions de temps s'han de cumplir sempre.
* Tasques soft real-time:
** Tasques essencials: aquestes tasques sempre s'acaben realitzant encara que no sigui en el temps requerit.
** Tasques no-essencials: poden ser avortades sense que afectin greument al sistema en cas que no es facin a temps.
La principal diferència és que un error en els sistemes hard pot provocar que aquest es col·lapsi i no realitzi el càlcul esperat, o en el pitjor dels casos, un procés erroni que desemboqui en un comportament inesperat, mentre que els sistemes soft es poden permetre reaccionar amb una lleu variança en el temps de resposta.

## Característiques

Tots els sistemes en temps real pretenen complir els següents requeriments per ser considerats com a correctes:
* Puntualitat: les tasques han de ser executades en el moment indicat, ni amb anterioritat ni posteriorment.
* Correcte manipulació en pics de càrrega: el sistema no ha de col·lapsar-se quan arribi en moments crítics d'ús màxim.
* Predictible: s'ha de poder determinar en quin moment una tasca és executada, quan es crea, quan es destrueix, etc.
* Tolerància a errors: en cas que no es pugui evitar una fallada, el sistema ha de ser capaç de recuperar-se.
* Manteniment: un sistema en temps real ha d'estar habilitat per poder realitzar-li un manteniment constant, perquè no es pot permetre que s'espatlli i quedi inutilitzat periòdicament.

## Desavantatges

Com qualsevol sistema, els de temps real presenten una sèrie de desavantatges que han de ser mencionats:
* Programació costosa: el nivell d'abstracció pot provocar que el codi sigui molt difícil de comprendre.
* Difícil d'entendre, mantenir i reutilitzar.
* Verificació i testeig de les restriccions de temps quasi impossible d'obtenir.
* El sistema pot col·lapsar-se donades algunes circumstàncies a vegades (per factors físics, per exemple).

## Implementació

Com que aquests programes necessiten unes característiques especials (polítiques de planificació, processament, programació, comunicació entre les tasques, interrupcions de sistema, etc), no poden ser implementats amb un sistema operatiu quotidià, s'han d'utilitzar els anomenats sistemes operatius de temps real (real-time operating systems, RTOS).

## Referències

* ↑ Stankovic, John A. «Real-Time Computing». , 16-04-1992.
* 1 2 «Real-Time Systems» (en anglès). Insup Lee, primavera 2009. [Consulta: 15 maig 2015].

## Vegeu també

* Sistema operatiu de temps real