El término sistema
reactivo fue introducido en 1985 por David Harel y Amir Pnueli
[HP85] para
caracterizar un determinado tipo de sistema distinto de los tradicionales
sistemas transformacionales.
Un sistema
transformacional tiene una serie de entradas, las manipula y ofrece un conjunto
determinado de salidas. Su comportamiento puede equipararse al de una función,
dado que “transforma” los parámetros de entra obteniendo unos de salida.
A la hora de
trabajar con sistemas transformacionales muchas veces se suelen comparar con
cajas negras, donde no importa qué es lo que ocurre dentro, sino solamente la
relación entre las entradas y las salidas.
Sistemas
reactivos:
Interaccionan continuamente con el entorno, reaccionando a los estímulos que
éste genera. El entorno carece de capacidades de sincronización.
Características
de los sistemas reactivos
En general,
todos los sistemas reactivos comparten una serie de características comunes, independientemente
de la aplicación final a la que se destinen. Estas particularidades habrá que
tenerlas en cuenta a la hora de especificar sistemas reactivos. Entre estas características
podemos citar las siguientes:
• Paralelismo: los sistemas
reactivos se ejecutan en paralelo con otros sistemas (lo que genéricamente venimos
denominando entorno). Además, ellos mismos, posiblemente, estén
constituidos por una serie de módulos funcionando en paralelo.
Esto es muy
habitual, como veremos, dado que simplifica notablemente el diseño de sistemas
la posibilidad de dividirlo en un conjunto determinado de módulos que funcionan
en paralelo y que cooperan para obtener el comportamiento deseado.
• Condicionantes temporales: como ya hemos dicho antes, los
sistemas reactivos tienen que responder a los estímulos de entrada “instantáneamente”.
La definición exacta del término “instantáneo” depende mucho del tipo de
sistema a considerar, dado que no será igual para un sistema en tiempo real que
para otro tipo de sistemas.
Independientemente del tipo de sistema que se trate, los
condicionantes temporales (los que sean en cada caso) son una cuestión importante
a tener en cuenta a la hora de desarrollar y de verificar la corrección del
sistema.
• Confiabilidad: La mayor parte de los sistemas reactivos se
emplean en situaciones donde un error puede resultar crítico (un error en un
sistema de control de tráfico aéreo no es algo que pueda permitirse). Esto hace
que sean necesarios métodos de desarrollo y verificación rigurosos para poder
detectar antes de su implantación cualquier posible anomalía que pueda darse.
• Determinismo: otra de las características importantes que
todo programa reactivo debe tener es el determinismo. Un programa (o un sistema)
se considera determinista cuando produce las mismas secuencias de salida ante
las mismas secuencias de entradas. Esto parece contradictorio con la propia
definición de sistemas reactivos y con la paradoja de Brock-Ackermann antes
vista, pero en realidad no es así, si consideramos en todo caso el tiempo como
una entrada más. De todas maneras, esta característica hay que considerarla con
su justo valor: los sistemas reactivos deterministas son más fáciles de
especificar, depurar y analizar que los no deterministas. Sin embargo, como
veremos, algunas técnicas de especificación de sistemas reactivos aceptan el
no-determinismo como una característica más (aunque no sea deseable) de los
sistemas reactivos.
Aplicaciones:
- 1.
Secuenciadores de tareas. Son habituales
estas aplicaciones en interfaces hombre-máquina, en tableros de control y en sistemas
de fabricación integrada (CIM). Todos estos sistemas tienen que manejar
secuencias de órdenes de entrada (pulsaciones de teclas y movimientos de ratón,
por ejemplo) y efectuar las acciones requeridas para cumplimentar dichas
órdenes.
- 2.
Protocolos de comunicaciones de cualquier
tipo de red, en particular en redes de área local en tiempo real, donde los
requisitos temporales son más estrictos. Al igual que en el caso anterior, la
complejidad combinacional del problema es importante y es necesario un método
de desarrollo adecuado para diseñar e implementar protocolos de comunicaciones.
- 3.
Proceso de señal de bajo nivel. El tratamiento
de señales tradicionalmente se ha realizado mediante filtros analógicos. Hoy en
día se utiliza también el procesamiento digital de esas señales, que permite,
además, un filtrado adaptativo. En este caso de uso es fundamental el
rendimiento, por lo que es deseable manejar la arquitectura y el algoritmo de
filtrado dentro del mismo marco de trabajo.
- 4.
Control de procesos industriales. En este ámbito
hay controlar una proceso industrial, lo que conlleva gobernar distintos
actuadores (motores, interruptores, etc.) en función de distintos parámetros de
entrada (sensores, interrupciones, etc.). Hay que buscar una forma de
desarrollo de estos sistemas que permita una fácil especificación y que
garantice que la implementación cumple la especificación dada.
- 5.
Sistemas de procesamiento de señales complejas, como señales
de radar o de sonar. En este caso no sólo hay que tratar con el proceso de las
señales en sí, sino que hay un procesamiento añadido como puede ser compresión
de datos, fusión de datos, funciones de decisión, etc. Son sistemas que exigen una
computación intensiva donde se generan y combinan entre sí múltiples eventos
para lanzar nuevos cálculos. El tema fundamental en este caso es la velocidad,
para poder llevar a cabo el procesamiento en tiempo real.
- 6.
Sistemas complejos de vigilancia y control, como los
encargados del gobierno de aviones o de otros sistemas de transporte, de
controlar sistemas industriales particularmente peligrosos (como centrales
nucleares), etc. Este tipo de sistemas pueden llegar a constar de miles de
sensores, cientos de actuadores y decenas de ordenadores interconectados.
Suelen emplearse sistemas altamente distribuidos. La seguridad es un aspecto
crítico en estos sistemas.
- 7. Sistemas de Orden-Control-Comunicación. Conocidos como
sistemas C3
(Command-Control-Communicate)
y a veces como sistemas C3
I
(por inteligentes), se encuentran en campos diversos como pueden ser sistemas militares,
sistemas de control de tráfico aéreo, grandes sistemas de transporte, etc.
Comparar los sistemas reactivos y sistemas
Transformacional, ejemplos de cada uno.
Un sistema
transformacional tiene una serie de entradas, las manipula y ofrece un conjunto
determinado de salidas. Su comportamiento puede equipararse al de una función,
dado que “transforma” los parámetros de entra obteniendo unos de salida. A la hora
de trabajar con sistemas transformacionales muchas veces se suelen comparar con
cajas negras, donde no importa qué es lo que ocurre dentro, sino solamente la
relación entre las entradas y las salidas.
Un sistema
reactivo, por contra, puede ofrecer distintas salidas para el mismo conjunto de
entradas, en función de lo que haya ocurrido con anterioridad en el sistema. Se
suelen definir como sistemas de computación que están continuamente
interactuando con el entorno, de tal manera que tienen que actuar de inmediato
ante los estímulos por éste producidos. Los sistemas reactivos así considerados
se encuentra por todas partes: sistemas de control industrial (su principal ámbito
de aplicación), sistemas de comunicaciones, sistemas de software interactivo
(como los interfaces hombremáquina), etc. La abstracción que se puede hacer de
un sistema reactivo podría ser “cactus negro” (en contraposición con las “cajas
negras” de los sistemas transformacionales), según indica Pnueli en [HP85], para
enfatizar el protagonismo que tienen los canales de entrada/salida del sistema
(las “espinas” del cactus).
Compartí este post con tus amigos!
...o también puedes seguir el blog en:
0 comentarios:
Publicar un comentario