Patrones de comunicación en arquitecturas software de tiempo real

Como ya se ha visto anteriormente, la arquitectura software, es la disciplina del desarrollo software encargada del diseño a más alto nivel. Esta disciplina es la que permite el desarrollo de sistemas extremadamente complejos de forma que sean coherentes, escalable y mantenibles. La arquitectura software está detrás de componentes extremadamente complejos como pudiera ser el kernel de un sistema operativo, el middleware, la arquitectura de drivers, etc. 

Así, la arquitectura software, haciendo uso de patrones y abstracciones software define la estructura organizativa y funcional de los distintos componentes que se integran así como sus interfaces y la comunicación entre ellos, como si los planos de construcción de un edificio tratase.

La importancia de la arquitectura software reside no solo en la capacidad de plasmar sistemas enormemente complejos de forma organizada y coherente, sino en la reutilización de estas estructuras una y otra vez en distintos sistemas que presenten problemas similares. 

En el capítulo anterior vimos algunos de los patrones más utilizados por los sistemas de tiempo real para el diseño de componentes orientados al control. En esta nueva entrada hablaremos de los patrones de comunicación, un concepto fundamental en cualquier sistema basado en el rendimiento y la multitarea.



Introducción a los patrones de comunicación.

En los sistemas modernos, la programación concurrente toma un papel relevante, en ella, distintos elementos software interactúan simultáneamente en un mismo entorno, realizando tareas, en la mayor parte de las ocasiones relacionadas o dependientes unas de otras. Así, la información que genera un componente en una parte del sistema es utilizada por otro componente en otra parte distinta.

El intercambio de información entre estos elementos software es complejo y distintas estrategias de comunicación son necesarias para adecuarse a los requerimientos del sistema. Los patrones software de comunicación capturan las diversas estrategias que con el tiempo han ido surgiendo y son un buen punto de partida para el desarrollador de sistemas embebidos novato que desea comprender las opciones de las que dispone.

Comunicación síncrona vs comunicación asíncrona.

La distinción más importante a la hora de hablar de sistemas de comunicación reside en la sincronización llevada a cabo entre los distintos componentes que intervienen. La diferencia básica entre ambos tipos radica en que hace el elemento que envía la información (productor) mientras el elemento que recibe tal información (consumidor) la utiliza y posteriormente le responde (si es que lo hace).

En el caso de comunicación síncrona, el componente productor de información,  una vez ha enviado el mensaje al consumidor, pausará su ejecución hasta que el segundo le responda. Por su parte, en la comunicación asíncrona el productor de información, una vez enviado el mensaje, continuará con su ejecución, sin esperar a que el consumidor le responda que, en caso de que le responda, lo hará mediante algunas de las estrategias que veremos a continuación.


1. - Patrones de comunicación síncrona.

1.1.- Patrón de comunicación síncrona con respuesta.

Es el primero de los patrones de comunicación y uno de los más comunes y fáciles de entender. En este tipo de comunicación, el productor (cliente) envía la información al consumidor (servidor) y queda en estado de espera hasta que recibe la correspondiente respuesta. 

Este patrón es utilizado en aquellos componentes en los que la respuesta del servidor es necesaria para continuar con la ejecución como en el caso de lectura y escritura síncrona de periféricos, ejecución de algoritmos, etc.

Pese a ser una de las más comunes también es una de las estrategias menos flexibles y que menos cualidades ofrece debido a que acopla fuertemente la implementación y ejecución de los diferentes componentes.

   Comunicación síncrona con respuesta
Fuente: Gomma, Hasan. (2016), Real-Time Software Design for Embedded Systems.



1.2.- Patrón de comunicación síncrona sin respuesta.

Este segundo caso de comunicación síncrona se diferencia del primero en la acción que permite al productor de información continuar con su ejecución. Mientras que en el primer caso el detonante era la respuesta del consumidor servidor, en esta ocasión, el detonante es la aceptación de la información por parte del servidor. 

Este patrón es útil en aquellos sistemas en los que es necesario cerciorarse de que la información que se está enviando ha sido aceptada correctamente por el componente al que está dirigida. Muchos sistemas productores de información de alta densidad (generan gran cantidad de información) como por ejemplo los conversores ADC (analog-to-digital) utilizan este patrón para no colapsar el sistema con tantos mensajes y adecuan la frecuencia de envío de información a la velocidad de aceptación del consumidor, quedando en espera hasta que el anterior mensaje se haya sido aceptado.


Comunicación síncrona sin respuesta
Fuente: Gomma, Hasan. (2016), Real-Time Software Design for Embedded Systems.



2. - Patrones de comunicación asíncrona.

2.1.- Patrón de comunicación asíncrona sin respuesta.

La comunicación asíncrona es la más utilizada en los sistemas embebidos debido a su versatilidad y las capacidades que ofrece. Como norma general, a la hora de plasmar el primer boceto de la arquitectura de nuestro sistema, asumiremos todas las comunicaciones como asíncronas.

Entre ellas, la comunicación asíncrona sin respuesta es la más fácil de implementar y por ende la más utilizada. Con esta tipología de comunicación, el productor, una vez enviado su mensaje, continua con su ejecución, sin esperar a que el receptor le responda o acepte el mensaje debido a que, o no necesita respuesta o tiene otras cosas que hacer antes de recibir y procesar la misma. 

Con este tipo de comunicación se logra implementar un sistema altamente modulable, independiente y desacoplado.

Comunicación asíncrona sin respuesta
Fuente: Gomma, Hasan. (2016), Real-Time Software Design for Embedded Systems.



2.2.- Patrón de comunicación asíncrona bidireccional.

Aunque hay ocasiones en que ciertamente un componente generador no necesita una respuesta por parte del consumidor, en la mayoría de los casos esto no es así y aunque la respuesta no se requiera de inmediato sí que se necesitará posteriormente.

Así, el patrón de comunicación bidireccional permite a un generador enviar un mensaje al consumidor y continuar con sus tareas y que el segundo, una vez finalizada su ejecución pueda devolverle al primero el mensaje de respuesta. Con el uso de estructuras como las colas de mensajes o las estructuras FIFO, el consumidor puede depositar su respuesta la cual el productor chequeará en busca de nuevos cambios.

Este tipo de mensajería es muy similar y de hecho es en el que se basan sistemas de comunicación como el correo electrónico, en el que existen las llamadas bandejas de entradas que el lector revisa para comprobar la existencia de nuevos correos. 

Esta estructura de comunicación asíncrona aporta gran versatilidad permitiendo a varios generadores de mensajes transmitir a uno o varios consumidores y a su vez a diferentes consumidores responder a un mismo productor.


Comunicación asíncrona bidireccional
Fuente: Gomma, Hasan. (2016), Real-Time Software Design for Embedded Systems.



2.3.- Patrón de comunicación asíncrona mediante callback.

Por último encontramos el patrón de comunicación mediante llamada de retorno o callback. En este patrón, el consumidor continúa con su ejecución una vez ha enviado el mensaje al consumidor. El consumidor a diferencia del caso anterior no responde a través de una cola de mensajes o una estructura FIFO, sino que ejecuta una función especifica (callback) que previamente el productor se ha encargado de registrar.

Esta estrategia es menos versátil que la anterior, puesto que restringe la llegada de mensajes de respuesta por parte de único componente consumidor, pero es extremadamente útil en sistemas que requieran un comportamiento muy rápido ante la llegada de un mensaje de respuesta.

Comunicación asíncrona mediante
Fuente: Gomma, Hasan. (2016), Real-Time Software Design for Embedded Systems.



Conclusión.

En esta entrada hemos visto algunos de los patrones de comunicación más recurrentes y estudiados en el área de los sistemas embebidos. El conocimiento de estos patrones nos permite aplicar la arquitectura óptima para nuestro sistema y comprender mejor las interconexiones que pueden darse entre los distintos componentes de un sistema computacional.


Bibliografía

[1] Gomma, Hassan. Real-Time Software Design for Embedded Systems. Cambridge University Press, 2016







Comments

Popular posts from this blog

¿Qué es un sistema embebido?

Introducción a los sistemas multitarea

Patrones software en arquitecturas orientadas a control