Lenguaje de coordinación Reo


Reo [1] [2] es un lenguaje específico de dominio para programar y analizar protocolos de coordinación que componen procesos individuales en sistemas completos , interpretados de manera amplia. Los ejemplos de clases de sistemas que pueden componerse con Reo incluyen sistemas basados ​​en componentes, sistemas orientados a servicios, sistemas de subprocesos múltiples , sistemas biológicos y protocolos criptográficos. Reo tiene una sintaxis gráfica en la que cada programa de Reo, llamado un conector o circuito , es una dirigido etiquetado hypergraph . Tal gráfico representa el flujo de datosentre los procesos del sistema. Reo tiene semántica formal , que es la base de sus diversas técnicas de verificación formal y herramientas de compilación.

En Reo, un sistema concurrente consta de un conjunto de componentes que están unidos por un circuito que permite el flujo de datos entre componentes. Los componentes pueden realizar operaciones de E / S en los nodos límite del circuito al que están conectados. Hay dos tipos de operaciones de E / S: las solicitudes de envío envían elementos de datos a un nodo y las solicitudes de obtención obtienen elementos de datos de un nodo. Todas las operaciones de E / S están bloqueadas, lo que significa que un componente puede continuar solo después de que su operación de E / S pendiente se haya procesado con éxito.

La figura de la parte superior derecha muestra un ejemplo de un sistema de productores-consumidores con tres componentes: dos productores a la izquierda y un consumidor a la derecha. El circuito en el medio define el protocolo, que establece que los productores deben enviar datos sincrónicamente, mientras que el consumidor recibe esos datos en orden alterno.

Definición 1. Un circuito es un triple donde:

tal que , para todos . Si es un canal, entonces I se llama el conjunto de nodos de entrada de c y O se llama el conjunto de nodos de salida de c .

Los nodos tienen un comportamiento de fusión-replicador fijo: los datos de uno de los canales entrantes se propagan a todos los canales salientes, sin almacenar ni alterar los datos (es decir, el comportamiento del replicador). Si varios canales entrantes pueden proporcionar datos, el nodo hace una elección no determinista entre ellos (es decir, comportamiento de fusión). Los nodos que solo tienen canales entrantes o salientes se denominan nodos sumideros o nodos fuente , respectivamente; los nodos con canales entrantes y salientes se denominan nodos mixtos .


Circuito reo: alternador