Patrones software en arquitecturas orientadas a control

La arquitectura software sirve como un plano para el diseño de un sistema de computación. Provee una abstracción para gestionar la complejidad del sistema y establecer la comunicación y coordinación entre los diferentes componentes. 

El diseño de la arquitectura software de nuestro sistema es una parte fundamental de todo proyecto la cual determinará el adecuado desempeño del mismo así como la calidad de nuestro sistema en cuanto a escalabilidad, mantenimiento y reusabilidad.


En los sistemas embebidos toman especial relevancia aquellos componentes software designados para el control del sistema. Estos componentes actúan como los directores de una orquesta formada por los distintos grupos de elementos software del sistema, ofreciendo la coordinación general de todos ellos. En particular, estos componentes, deciden cuándo y en qué orden los demás componentes participan en la secuencia de ejecución y que es lo qué tienen que hacer.

A lo largo de esta entrada hablaremos de los principales patrones de diseño para la implementación de la arquitectura software de control en sistemas de tiempo real tal y como son descritos en el libro "Real-Time Software Design for Embedded Systems [1]".


 1. Patrón de control centralizado.

Es el patrón más utilizado no solo por su sencillez conceptual sino por la sencillez de su implementación. Hay un único componente software de control, el cual, en la mayoría de los casos, implementa una máquina de estados que gobierna el control general del sistema. Este componente conecta directamente con los elementos software de entrada (input components), recibiendo eventos que le permiten percibir el entorno y causan transiciones en la máquina de estados. A su vez interactúa con los componentes software de salida (output components) para realizar las acciones pertinentes sobre el sistema y el entorno.

 


Ejemplo de patrón de control centralizado.
Fuente: Gomma, Hasan. (2016), Real-Time Software Design for Embedded Systems.


2. Patrón de control distribuido.

A diferencia del control centralizado en el que solo encontramos un único elemento de control, en los sistemas distribuidos más complejos es común disponer de más de un componente de control, encargándose cada uno de ellos del control de una parte distinta del sistema. Cada uno de los componentes de control, como en el caso anterior, disponen de una máquina de estados la cual gobierna la ejecución global de los distintos componentes software. Según exista o no comunicación directa entre los diferentes componentes de control se distinguen dos tipos:


          2.1. Patrón de control distribuido colaborativo.

Este patrón de control permite el intercambio de información entre los distintos componentes de control mediante mensajes o eventos con comunicación directa "peer to peer". Este patrón es utilizado cuando los sistemas de control no son completamente independientes y el funcionamiento de uno depende del resto por lo que es necesario el intercambio de información entre ellos.


Ejemplo de patrón de control distribuido colaborativo.
Fuente: Gomma, Hasan. (2016), Real-Time Software Design for Embedded Systems.

          2.2. Patrón de control distribuido independiente.

A diferencia del anterior, en el patrón de control independiente, los componentes de control están desacoplados, es decir, son completamente independientes en su ejecución los unos de los otros. En esta arquitectura, no existe una comunicación directa entre cada par de componentes de control aunque es común encontrar un elemento de tipo servidor al cual reportan asíncronamente información de su estado.


Ejemplo de patrón de control distribuido independiente.
Fuente: Gomma, Hasan. (2016), Real-Time Software Design for Embedded Systems.


3. Patrón de control jerárquico.

Al igual que sucedía en el caso de los patrones de control distribuido, en el patrón de control jerárquico también existen múltiples componentes de control, cada uno de ellos controlando una parte diferente del sistema, ejecutando sus propias máquinas de estados. En adición a los patrones anteriores esta arquitectura agrega un componente de coordinación de alto nivel que coordina la ejecución de cada uno de los elementos de control, decidiendo la forma y la secuencia en la que se ejecutan cada uno de ellos.


Ejemplo de patrón de control jerárquico.
Fuente: Gomma, Hasan. (2016), Real-Time Software Design for Embedded Systems.

4. Patrón de control maestro/esclavo.

La arquitectura maestro/esclavo, al igual que en el control centralizado, dispone de un único componente de control, llamado componente maestro que se encarga del control general del sistema. Este componente está al mando de los diferentes componentes software esclavos a los cuales distribuye la carga de trabajo que se ha de realizar. Así, aprovechando las capacidades de multiprocesamiento y concurrencia, esta arquitectura permite la ejecución  ejecutarse en paralelo de los esclavos en los diferentes procesadores de un sistema multiprocesador o en diferentes máquinas en un sistema distribuido.

A diferencia de la arquitectura jerárquica, a la cual podría asemejarse conceptualmente, los componentes esclavos no implementan ningún sistema de control localizado.


Ejemplo de patrón de control maestro/esclavo.
Fuente: Gomma, Hasan. (2016), Real-Time Software Design for Embedded Systems.



Conclusión.

Identificar los diferentes tipos de arquitecturas orientadas a control y las capacidades que nos brindan cada una de ellas es indispensable cuando proyectamos sistemas de relativa complejidad. Mediante el uso de estos patrones, largamente estudiados, utilizados y testados, conseguiremos dotar a nuestro diseño con la estructura y cohesión adecuada sin tener que reinventar la rueda en cada nueva implementación, permitiendo a otros desarrolladores comprender más fácilmente la estructura interna de nuestro sistema y ofreciendo un sistema escalable, reutilizable y fácil de mantener.

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