LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

152
LMAN: aquina Abstracta del C´ alculo NTCC para Programaci´ on Concurrente de Robots LEGO MARIA DEL PILAR MU ˜ NOZ RINCON ANDRES RENE HURTADO RODRIGUEZ PONTIFICIA UNIVERSIDAD JAVERIANA FACULTAD DE INGENIERIA INGENIERIA DE SISTEMAS Y COMPUTACION SANTIAGO DE CALI 2003

Transcript of LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Page 1: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

LMAN: Maquina Abstracta del CalculoNTCC para Programacion Concurrente de

Robots LEGO

MARIA DEL PILAR MUNOZ RINCON

ANDRES RENE HURTADO RODRIGUEZ

PONTIFICIA UNIVERSIDAD JAVERIANA

FACULTAD DE INGENIERIA

INGENIERIA DE SISTEMAS Y COMPUTACION

SANTIAGO DE CALI

2003

Page 2: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

LMAN: Maquina Abstracta del CalculoNTCC para Programacion Concurrente de

Robots LEGO

MARIA DEL PILAR MUNOZ RINCON

ANDRES RENE HURTADO RODRIGUEZ

Tesis de grado para optar el tıtulo de

Ingeniero de Sistemas y Computacion

Director

CAMILO RUEDA CALDERON

Profesor titular, Universidad Javeriana-Cali

PONTIFICIA UNIVERSIDAD JAVERIANA

FACULTAD DE INGENIERIA

INGENIERIA DE SISTEMAS Y COMPUTACION

SANTIAGO DE CALI

2003

Page 3: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Santiago de Cali, Enero 19 del 2004

Ingeniero

ANDRES JARAMILLO BOTERO

Decano Academico de la Facultad de Ingenierıa

Pontificia Universidad Javeriana

Ciudad

Certifico que el presente proyecto de grado, titulado “LMAN: Maquina Abstracta del

Calculo NTCC para Programacion Concurrente de Robots LEGO” realizado por MA-

RIA DEL PILAR MUNOZ RINCON y ANDRES RENE HURTADO RODRIGUEZ,

estudiantes de Ingenierıa de Sistemas y Computacion, se encuentra terminado y puede

ser presentado para sustentacion.

Atentamente,

Ing. CAMILO RUEDA CALDERON

Director del Proyecto

Page 4: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Santiago de Cali, Enero 19 del 2004

Ingeniero

ANDRES JARAMILLO BOTERO

Decano Academico de la Facultad de Ingenierıa

Pontificia Universidad Javeriana

Ciudad

Por medio de esta, presentamos a usted el proyecto de grado titulado “LMAN: Maquina

Abstracta del Calculo NTCC para Programacion Concurrente de Robots LEGO” para

optar el tıtulo de Ingeniero de Sistemas y Computacion.

Esperamos que este proyecto reuna todos los requisitos academicos y cumpla el proposi-

to para el cual fue creado, y sirva de apoyo para futuros proyectos en la Universidad

Javeriana relacionados con la materia.

Atentamente,

MARIA DEL PILAR MUNOZ RINCON ANDRES RENE HURTADO RODRIGUEZ

Page 5: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

ARTICULO 23 de la Resolucion No 13 del 6 de Julio de 1946

del Reglamento de la Pontificia Universidad Javeriana.

“La Universidad no se hace responsable por los conceptos emitidos

por sus alumnos en sus trabajos de Tesis. Solo velara porque no se

publique nada contrario al dogma y a la moral Catolica y porque las

Tesis no contengan ataques o polemicas puramente personales;

antes bien, se vea en ellas el anhelo de buscar la Verdad y la Justicia”

Page 6: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Nota de Aceptacion:

Aprobado por el comite de Trabajo de Grado en

cumplimiento de los requisitos exigidos por la

Pontificia Universidad Javeriana para optar el

tıtulo de Ingeniero de Sistemas y Computacion.

ANDRES JARAMILLO BOTERO

Decano Academico de la Facultad de Ingenierıa

CAMILO RUEDA CALDERON CAMILO RUEDA CALDERONDirector de la Carrera de Ingenierıa Director de Tesis

de Sistemas y Computacion

PERSONA1 PERSONA2Jurado Jurado

Page 7: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Maria del Pilar Munoz Rincon

A Dios por iluminar mis pasos cada dıa. A mis padres Benjamın y Edilma y a mis

hermanos Carlos Octavio y Maritza por darme acompanamiento constante, apoyo,

animo y guıa en la realizacion de mis suenos.

Andres Rene Hurtado Rodrıguez

A Dios por apoyarme y ser el pilar en mi caminar. A mi padre Rene y a mi madre

Alba Felisa, a mis hermanas Maritza, Alba Lucia y Carmen Beatriz, no serıa nada sin

ustedes

Page 8: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Ficha del Proyecto

Titulo LMAN: Maquina Abstracta del Calculo NTCCpara Programacion Concurrente de Robots LEGOMindStorm.

Facultad INGENIERIA - Ingenierıa de Sistemas y Computacion

Estudiantes MARIA DEL PILAR MUNOZ RINCONANDRES RENE HURTADO RODRIGUEZ

Director CAMILO RUEDA CALDERONGrupo de investigacion AVISPA (Ambientes Visuales de Programacion Aplicativa)Palabras clave Calculo de Procesos, Maquina Abstracta, Maquina Virtual,

Robots LEGO, Concurrencia, Restricciones, LMAN.Resumen del proyecto El actual proyecto de grado describe LMAN, maquina

abstracta del calculo NTCC para programacion concurrentede robots LEGO. LMAN incluye tanto la especificacion dela maquina abstracta, como la implementacion de la maquinavirtual, que actua como el ejecutor notacional del calculoNTCC. El modelo formal presentado en forma de maquinaabstracta, provee la especificacion de la maquina virtual.La maquina virtual esta compuesta de un conjunto deinstrucciones, registros y de un modelo de memoria; queactuando junto con un protocolo de comunicaciones,permiten controlar y ejecutar de manera eficiente y entiempo real programas escritos en NTCC sobre losrobots LEGO MindStorm.

Cuadro 1: Ficha del proyecto

i

Page 9: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Agradecimientos

A Camilo Rueda, director de la carrera de Ingenierıa de Sistemas y Computacion

de la Universidad Javeriana – Cali, y director del proyecto, por sus ideas, apoyo

y asesorıa incondicional en la consecucion del presente proyecto de grado.

A Frank Valencia, post–doctoral researcher en el Departamento de Tecnologıa de

Informacion en la Universidad de Uppsala – Sweden, y asesor del proyecto por

sus aportes y colaboracion en el desarrollo del presente proyecto de grado.

A Antal Buss, profesor de la carrera de Ingenierıa de Sistemas y Computacion de

la Universidad Javeriana – Cali, por todas sus ideas y retroalimentacion en las

etapas iniciales del proyecto.

A Catherine Garcıa, profesora de la carrera de Ingenierıa de Sistemas y Compu-

tacion de la Universidad Javeriana – Cali, por su ayuda y sus aportes en el acople

del modulo del Sistema de Restricciones con el presente proyecto.

A Marıa Constanza Pabon, profesora de la carrera de Ingenierıa de Sistemas y

Computacion de la Universidad Javeriana – Cali, por su colaboracion y apoyo en la

consecucion del modulo del compilador asociado al presente proyecto. Igualmente

agradecemos a todos los estudiantes que estuvieron participando en el proyecto,

en especial a Federico Rocha y Johana Chala.

Al grupo AVISPA.

A Dios, por ser nuestra guıa.

A nuestras familias, por su apoyo incondicional, por su acompanamiento y por

darnos animo en todos los momentos, en especial en los mas difıciles.

A Lady Janeth y a Jorge Alonso por ser pacientes, comprensivos y por su apoyo.

ii

Page 10: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

A todas aquellas personas que de una otra manera colaboraron para la consecucion

del presente proyecto de grado.

iii

Page 11: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Indice general

Indice de cuadros VIII

Indice de figuras X

Indice de Anexos XII

1. ANTECEDENTES 1

1.1. CONCURRENCIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.2. CALCULOS DE PROCESOS . . . . . . . . . . . . . . . . . . . . . . . 2

1.2.1. CCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

1.2.2. Default-TCC . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

1.3. MAQUINAS ABSTRACTAS Y MAQUINAS VIRTUALES . . . . . . . 10

1.3.1. Definiciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

1.3.2. Maquina Abstracta y Virtual de TyCO . . . . . . . . . . . . . . 11

1.3.3. Maquina Abstracta de PiCO . . . . . . . . . . . . . . . . . . . . 20

1.4. OBJETIVOS Y CONTRIBUCIONES DE ESTE TRABAJO DE TESIS 28

2. CALCULO NTCC 31

2.1. Descripcion General . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

2.2. Sintaxis de NTCC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

iv

Page 12: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

2.3. Semantica de NTCC . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

2.3.1. Sistema de Restricciones Aritmetico-Modular . . . . . . . . . . 34

2.3.2. Semantica Operacional . . . . . . . . . . . . . . . . . . . . . . . 34

2.4. Definiciones Recursivas . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

2.4.1. Codificacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

2.5. Celdas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

2.6. Aplicaciones y Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . 39

2.6.1. Controladores RCX: Ejemplo de Zig-Zag . . . . . . . . . . . . . 40

2.6.2. Sistemas Multiagentes: Presa y Predador . . . . . . . . . . . . . 41

2.6.3. Aplicaciones Musicales: Control de Improvisacion . . . . . . . . 41

3. LMAN: MAQUINA ABSTRACTA 43

3.1. Analisis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

3.1.1. Entorno de Programacion NTCC . . . . . . . . . . . . . . . . . 43

3.1.2. Evaluacion de Alternativas de Implementacion para la Maquina

Abstracta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

3.1.3. Evaluacion de Alternativas de la plataforma de implementacion

para la Maquina Virtual . . . . . . . . . . . . . . . . . . . . . . 46

3.2. Maquina Abstracta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

3.2.1. Especificacion formal . . . . . . . . . . . . . . . . . . . . . . . . 51

3.2.2. Sintaxis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

3.2.3. Estado inicial y Final . . . . . . . . . . . . . . . . . . . . . . . . 53

3.2.4. Semantica Operacional: Reglas de Reduccion . . . . . . . . . . . 54

3.2.5. Diagrama de Transicion . . . . . . . . . . . . . . . . . . . . . . 58

v

Page 13: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

4. LMAN: MAQUINA VIRTUAL 61

4.1. Arquitectura General . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

4.1.1. Memoria de Programa . . . . . . . . . . . . . . . . . . . . . . . 64

4.1.2. Interfaz STORE . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

4.1.3. Interfaz LEGOS . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

4.1.4. ControlLMAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

4.2. Funcionamiento de LMAN . . . . . . . . . . . . . . . . . . . . . . . . . 83

5. COMPILADOR NTCC–LMAN 87

5.1. Sintaxis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

5.1.1. Conjunto de Caracteres . . . . . . . . . . . . . . . . . . . . . . . 88

5.1.2. Reglas de Produccion . . . . . . . . . . . . . . . . . . . . . . . 89

5.2. Semantica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

5.3. Generacion de Codigo . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

6. Ejemplos y Pruebas 94

6.1. Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

6.1.1. Programa Zig-Zag . . . . . . . . . . . . . . . . . . . . . . . . . . 94

6.1.2. Programa de Evasion de Obstaculos . . . . . . . . . . . . . . . . 100

6.1.3. Aplicaciones Musicales . . . . . . . . . . . . . . . . . . . . . . . 103

6.2. Pruebas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

6.2.1. Etapa de pruebas de LMAN . . . . . . . . . . . . . . . . . . . . 107

6.2.2. Comparacion entre LMAN , ESTEREL y La Maquina estandar

de LEGO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

7. CONCLUSIONES Y TRABAJO FUTURO 113

vi

Page 14: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

ANEXOS 116

ANEXOS 125

Bibliografıa 127

vii

Page 15: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Indice de cuadros

1. Ficha del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i

1.1. Sintaxis de CCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

1.2. Semantica de CCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

1.3. Sintaxis de TCC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

1.4. Semantica de TCC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

1.5. Registros de la maquina virtual de TyCO . . . . . . . . . . . . . . . . . 19

1.6. Conjunto de Registros de MAPiCO . . . . . . . . . . . . . . . . . . . . 28

2.1. Sintaxis de NTCC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

2.2. Semantica de NTCC . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

3.1. Evaluacion de Alternativas de Implementacion para la Maquina Abstracta 45

3.2. Evaluacion de alternativas de la plataforma de implementacion para la

Maquina Virtual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

3.3. Sintaxis de LMAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

4.1. Formato de Instrucciones de LMAN . . . . . . . . . . . . . . . . . . . . 65

4.2. Alternativas de programacion de RCX . . . . . . . . . . . . . . . . . . 79

4.3. Alternativas de programacion de RCX . . . . . . . . . . . . . . . . . . 80

viii

Page 16: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

5.1. Palabras reservadas en el Compilador NTCC-LMAN . . . . . . . . . . 89

5.2. Operadores sobre restricciones . . . . . . . . . . . . . . . . . . . . . . . 91

6.1. Desempeno del programa Zig-Zag . . . . . . . . . . . . . . . . . . . . . 108

6.2. Desempeno del programa Evasion de Obstaculos . . . . . . . . . . . . . 109

6.3. Desempeno del programa Canon en Do mayor . . . . . . . . . . . . . . 110

6.4. comparacion de LMAN, ESTEREL y Maquina estandar de LEGOS . . 112

ix

Page 17: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Indice de figuras

1.1. Modelo de un entorno CCP . . . . . . . . . . . . . . . . . . . . . . . . 4

1.2. Ejemplo de un ambiente TCC . . . . . . . . . . . . . . . . . . . . . . . 8

1.3. Categorıas basicas del lenguaje de programacion TyCO . . . . . . . . . 12

1.4. Nuevas Categorıas del lenguaje de programacion TyCO . . . . . . . . . 12

1.5. Gramatica del lenguaje de programacion TyCO . . . . . . . . . . . . . 13

1.6. Reglas de Reduccion de la maquina abstracta de TyCO . . . . . . . . . 16

1.7. Areas de Memoria de la maquina virtual de TyCO . . . . . . . . . . . . 17

1.8. Flujo de datos del sistema TyCO . . . . . . . . . . . . . . . . . . . . . 20

1.9. Reglas de Reduccion de la maquina abstracta MAPiCO, parte I . . . . 25

1.10. Reglas de Reduccion de la maquina abstracta MAPiCO, parte II . . . . 26

1.11. Diseno de MAPiCO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

3.1. Flujo del entrono de programacion NTCC . . . . . . . . . . . . . . . . 44

3.2. Diagrama de Transicion LMAN . . . . . . . . . . . . . . . . . . . . . 59

4.1. Bloques Funcionales de LMAN . . . . . . . . . . . . . . . . . . . . . . 62

4.2. Conjunto de Instrucciones de LMAN . . . . . . . . . . . . . . . . . . . 66

4.3. Especificacion de Fuentes Src1 y Src2 . . . . . . . . . . . . . . . . . . . 67

4.4. Sintaxis para la especificacion de Formulas de Primer Orden en LMAN 68

x

Page 18: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

4.5. Instrucciones para construccion de restricciones en LMAN . . . . . . . 69

4.6. Arbol binario infijo que representa una restriccion en LMAN . . . . . . 70

4.7. Ambiente LEGO en LMAN . . . . . . . . . . . . . . . . . . . . . . . . 71

4.8. Protocolo del lado de la estacion de trabajo en LMAN . . . . . . . . . 76

4.9. Protocolo del lado del RCX en LMAN . . . . . . . . . . . . . . . . . . 77

4.10. RCX LEGO brick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

4.11. Algunos ejemplos de modelos LEGO . . . . . . . . . . . . . . . . . . . 80

4.12. Gestion del controlLMAN . . . . . . . . . . . . . . . . . . . . . . . . . 83

4.13. Requerimientos Hardware del Sistema LMAN . . . . . . . . . . . . . . 84

4.14. Requerimientos Software del Sistema LMAN . . . . . . . . . . . . . . . 84

4.15. Funcionamiento del Sistema LMAN . . . . . . . . . . . . . . . . . . . . 86

4.16. Comportamiento reactivo del Sistema LMAN . . . . . . . . . . . . . . 86

6.1. Ejecucion del programa Evasion de obstaculos . . . . . . . . . . . . . . 109

xi

Page 19: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Indice de Anexos

Anexo A. Traduccion de procesos NTCC a codigo de bytes de LMAN . . . . 116

Anexo B. Librerıas para la construccion de Programas en LMAN . . . . . . 125

xii

Page 20: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Resumen

NTCC (Non-deterministic Temporal Concurrent Constraint Calculus) [Val03] es una

extension de TCC[SJG94] para modelar dos nociones primordiales: No-determinismo

y Asincronıa en Sistemas Discretos-Temporales-Reactivos. Estas dos nociones, junto

con su naturaleza simple, expresiva, formal y su propiedad de combinar una vista ope-

racional, algebraica y declarativa de los procesos, hacen de NTCC un calculo de gran

aplicabilidad sobre sistemas multiagentes, dispositivos roboticos y aplicaciones musica-

les. Con esta motivacion en mente, surge la idea de implementar NTCC mediante una

Maquina Abstracta, modelando en particular uno de los posibles aplicativos propuestos

para NTCC: Programacion de controladores RCX en robots LEGO MindStorm.

De esta manera, el presente trabajo de grado tiene como objetivos, tanto la especi-

ficacion de la maquina abstracta de NTCC, como su implementacion mediante una

maquina virtual. La maquina abstracta actua como el componente que da formalidad

a la maquina virtual, siendo la maquina virtual propiamente el ejecutor notacional del

calculo NTCC. La especificacion de la maquina abstracta incluye las reglas de reduccion,

la definicion de estados inicial – final y las transiciones posibles. La maquina virtual

por su parte, se compone de un conjunto de instrucciones, de registros y de un modelo

de memoria que, actuando junto con un Sistema de Restricciones y un Protocolo de

Comunicaciones, permiten controlar y ejecutar de manera eficiente y en tiempo real

programas escritos en NTCC sobre los Robots LEGO MindStorm.

xiii

Page 21: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Introduccion

Los Calculos Computacionales constituyen la base teorica formal de los lenguajes de

programacion. Sobre esta base es posible demostrar formalmente propiedades como co-

rrectitud y completitud en las construcciones hechas en el lenguaje. Los calculos se

caracterizan basicamente por una sintaxis para describir formulas bien formadas y una

semantica que define las reglas de reduccion. Existen diversos calculos para modelar

diferentes ambientes computacionales; NTCC [Val03] es un calculo para programa-

cion de sistemas reactivos, heredero de los modelos CC[SRP91], TCC[SJG94] y CCS

Calculi[Mil99]. Este trabajo busca implementar una maquina abstracta para NTCC y

analizar su desempeno programando sistemas reactivos como los dispositivos roboticos

LEGO.

La Maquina Abstracta (LMAN) que se describe en el presente documento, incluye tam-

bien la implementacion de una Maquina Virtual que es realmente el ejecutor notacional

de NTCC. La maquina abstracta es el componente formal que define las reglas de re-

duccion y las transiciones posibles en las que se fundamenta la maquina virtual en su

ejecucion. La maquina virtual se compone de un conjunto de instrucciones, de registros

y de un modelo de memoria que, fundamentados en la definicion formal de la maquina

abstracta, permiten ejecutar eficientemente y en tiempo real construcciones de NTCC.

Esta maquina virtual ha sido construıda en bloques funcionales brindando modularidad

a la implementacion. Consta de una interfaz con los robots LEGO MindStorm (inter-

faz LEGOS) que permite modelar la interaccion constante con el ambiente propia de

un sistema reactivo, una interfaz con un Sistema de Restricciones (interfaz STORE)

(imprescindible en una implementacion de programacion CC[SRP91]) de dominios fi-

nitos, de una memoria de programa y, finalmente, de un control o cerebro operacional

(controLMAN). A diferencia de otras implementaciones de maquinas virtuales [Lop99],

[AB98] LMAN incluye no solo la nocion de planeacion de procesos, sino tambien la

xiv

Page 22: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

nocion de planeacion de maquinas en el tiempo.

Respecto al desempeno de LMAN, los resultados obtenidos en las pruebas demuestran

eficiencia en la ejecucion. Ha sido probada ejecutando construcciones NTCC[Val03] ta-

les como evasion de obstaculos y movimiento en zigzag. Cabe notar que los programas se

ejecutan en tiempo real, pese a que conllevan la resolucion de restricciones aritmeticas

de dominio finito. En cuanto a la interfaz de programacion que el actual proyecto provee

al usuario, el proposito es construır alrededor de LMAN un ambiente de programacion

aplicativa, que incluye un Lenguaje VISUAL VIN [FQ04] para programacion iconica en

alto nivel y un compilador NTCC–LMAN [RCP03] que toma las entradas en NTCC y

genera “Codigo de Bytes” para LMAN. El presente trabajo incluye el diseno e integra-

cion del compilador NTCC–LMAN, su implementacion se describe en [RCP03] por F.

Rocha, J.Chala y M. Pabon; este componente posibilita la programacion en alto nivel,

ya que los programas son escritos en NTCC, compilados y posteriormente ejecutados

por LMAN sobre el robot LEGO.

Este documento ha sido dividido en 7 capıtulos:

Capıtulo 1, presenta los antecedentes involucrados en el desarrollo del proyecto,

tales como la teorıa CCP, el calculo TCC, las definiciones de maquina abstracta y

virtual, y las maquinas para calculos de procesos que fueron referencia del actual

trabajo: TyCO y MAPiCO.

Capıtulo 2, esta dedicado al calculo NTCC, enfatizando la sintaxis, la semantica y

los aplicativos relacionados.

Capıtulo 3, trata la maquina abstracta definida para LMAN: analisis, especifica-

cion formal, reglas de reduccion, estados y transiciones.

Capıtulo 4, describe la implementacion de la maquina virtual, presentando la divi-

sion en bloques funcionales: interfaz con el Sistema de Restricciones, interfaz con

el dispositivo LEGO, el modelo de memoria y el Control. Se describe adicional-

mente el funcionamiento de la aplicacion y todos los elementos utilizados en la

implementacion.

Capıtulo 5, presenta el diseno del compilador NTCC–LMAN: sintaxis, semantica

y generacion de codigo. Tambien se trata su integracion con el actual trabajo de

grado.

xv

Page 23: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Capıtulo 6, se describen los ejemplos y pruebas realizadas ejecutando construccio-

nes NTCC sobre LMAN. Se muestran comparaciones entre LMAN, el lenguaje

ESTEREL[MR] y la maquina virtual estandar de LEGO.

Capıtulo 7, muestra las conclusiones del presente trabajo, enfatizando las activi-

dades a futuro y las recomendaciones a partir de este trabajo base.

En la actualidad, no se ha reportado previamente en la literatura ninguna implementa-

cion de un calculo temporal, concurrente, por restricciones validado sobre robots LEGO.

En nuestro conocimiento, el actual trabajo de tesis constituye la primera implementa-

cion de este tipo. No obstante, es importante mencionar los desarrollos JCC [SRP03]

y ESTEREL[MR] que estan en la misma lınea formal de este trabajo y que han sido

probados en programacion de robots LEGO.

xvi

Page 24: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

1 ANTECEDENTES

A lo largo de este capıtulo encontrara los principales aspectos metodologicos utilizados

en el desarrollo del actual trabajo de tesis; se trataran las nociones generales sobre

conceptos como concurrencia, calculos de procesos y maquinas abstractas y virtuales;

esto con el proposito de establecer una base conceptual clara que permita comprender

el presente trabajo. Al final del capıtulo se recopilan los objetivos y las contribuciones

del desarrollo que aquı se reporta.

1.1. CONCURRENCIA

La definicion de concurrencia esta asociada con sistemas de multiples agentes, tambien

llamados procesos, que interactuan entre si en un mismo ambiente y al mismo tiempo.

Esta definicion cubre una gran variedad de modelos de la vida real, como lo son las

aplicaciones sobre Internet, la programacion de dispositivos roboticos, la computacion

movil y los sistemas reactivos, entre otros.

Observando esta variedad de aplicaciones que tiene la computacion concurrente, se ha-

ce necesario tener herramientas para analizar y razonar en torno a la misma. Estas

herramientas deben ser confiables y precisas, por lo cual es necesario que tengan una

base matematica y logica, como la que existe ya para el modelo secuencial de progra-

macion a traves del lambda calculo. El problema es que modelos como el anterior no son

adecuados para la concurrencia debido a algunas propiedades inherentes a esta, tales

como:

No-determinismo, representa la escogencia aleatoria de una opcion entre multi-

ples.

Computacion Reactiva, mediante la cual se modelan sistemas de agentes que no

1

Page 25: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

presentan un estado final debido a que responden a estımulos del ambiente en

cualquier momento.

Movilidad, referencia procesos que pueden cambiar sus enlaces y configuracion de

comunicacion.

Teniendo la necesidad de crear modelos precisos y confiables para procesos concurrentes

y dado el gran campo de aplicaciones que tienen, es necesario construır modelos que

traten comportamientos especıficos y que posean al menos algunas de las caracterısticas

mencionadas anteriormente. Un modelo de esta naturaleza debe tener las siguientes

propiedades:

Debe ser simple, es decir que su base deben ser principios basicos.

Debe ser expresivo, permitir modelar diferentes situaciones.

Debe ser formal, fundamentado en bases matematicas y logicas.

Debe aportar tecnicas para poder razonar sobre los procesos.

Una vez completado el modelo puntual podran surgir extensiones a este para incluir

mas propiedades dentro del dominio de problemas particular que se considera, como

es el caso de los problemas que involucran numeros reales y aquellos que manejan la

nocion de tiempo(TCC), como se tratara a continuacion.

1.2. CALCULOS DE PROCESOS

La necesidad de obtener herramientas precisas y confiables que permitan demostrar pro-

piedades como correctitud y completitud, da origen a los calculos computacionales. Los

calculos llegan a constituirse en la base teorica formal de los lenguajes de programacion.

Los componentes basicos de un calculo computacional son:

Sintaxis, descripcion de formulas bien formadas en el calculo.

Semantica, definicion de las reglas de reduccion y la forma como se interpretan

cada una de las formulas.

2

Page 26: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Existe diversidad de calculos para modelar diferentes ambientes computacionales como

los calculos π, CCP , TyCO , PiCO , ρ(calculo del lenguaje OZ), entre otros. No

obstante, el enfoque de este trabajo de tesis son los calculos de procesos. A continuacion

se trataran los calculos de procesos pertinentes a este trabajo de tesis: CCP y Default-

TCC

1.2.1. CCP

El calculo concurrente de programacion por restricciones (CCP)[VS91] es uno de los mas

conocidos formalismos para concurrencia. La nocion basica de CCP considera multi-

ples agentes (procesos) ejecutandose al mismo tiempo y comunicandose por medio de

variables compartidas que se encuentran en un almacen comun o Store.

En el Store la nocion del valor de una variable se toma como un conocimiento parcial

sobre esta (ej: x se encuentra entre 10 y 20); conocimiento que se acumula dentro

del almacen por medio de una restriccion, que es una representacion de un conjunto

de posibles valuaciones (ej: 10 ≤ x ≤ 20). El sistema de restricciones asociado a un

ambiente CCP, es quien se encarga de la interaccion de los procesos con el Store.

Intuitivamente puede considerarse que el Store almacena o acumula las restricciones;

en el modelo, sin embargo, el Store representa la conjuncion logica de las mismas; por

lo tanto, este sera monotonico; lo cual quiere decir, que la informacion que se agregue

debe ser coherente con la que ya se tiene.

Los procesos se comunican adicionando (operacion tell) al Store (en el sentido des-

crito arriba) y consultando (ask) informacion sobre las variables. Cuando en el Store

no se tiene suficiente informacion para decidir si una restriccion es verdadera o falsa,

se suspende la ejecucion del proceso hasta tener suficiente informacion para dar una

respuesta; esta es la forma en que los procesos se sincronizan en el calculo.

Ejemplo 1.2.1. Considere el siguiente comportamiento; se tienen dos agentes, (A) es el

encargado de reportar la temperatura en un edificio y (B) sera el encargado de activar la

alarma de incendios, ejecutado un proceso Q si la temperatura es mayor que 75 grados

centıgrados. Estos dos agentes se comunican por medio de una variable en comun (t).

Suponga que A comenta que la temperatura es mayor de 25 grados centıgrados (tell t >

25), despues B pregunta si la temperatura es mayor que 75 (ask t > 75). Como en este

3

Page 27: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

momento la informacion brindada por A no es suficiente para tomar una decision, B

queda suspendido. Dos horas mas tarde, digamos, A reporta que la temperatura es igual

a 80 grados (tell t = 80); en ese momento B puede obtener mas informacion sobre el

valor temperatura y activa la alarma contra incendios. La figura 1.1 presenta el modelo

del problema.

Figura 1.1: Modelo de un entorno CCP

CCP posee varias extensiones: movilidad, comportamiento estocastico y una de las mas

significativas para el presente trabajo, la nocion del tiempo.

A continuacion se definen el sistema de restricciones utilizado por CCP y algunas ex-

tensiones.

1.2.1.1. Sistema de Restricciones

Se utilizara la definicion de sistemas de restricciones encontrada en la tesis doctoral de

Frank Valencia[Val03]:

Definicion 1.2.1.1 Un sistema de restricciones se define como una tupla (Σ,4), en

donde Σ representa un conjunto de constantes, funciones y sımbolos de predicado, y 4es una logica de primer orden consistente que opera sobre Σ.

Siendo (Σ,4) el sistema de restricciones, se definira Γ como su lenguaje de primer orden;

el cual consiste en una tupla (Σ, V, S), donde V es un conjunto de variables {x, y, ..., z},y S es un conjunto de operadores logicos como ¬, ∧, ∨, ⇒, ∃, ∀, true, false los cuales

hacen referencia a: la negacion, la conjuncion, la disyuncion, la implicacion, los cuanti-

4

Page 28: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

ficadores universales y existenciales, y los sımbolos de verdadero y falso. El sistema de

restricciones esta compuesto por restricciones, denotadas por c, d, ..., que son formulas

de primer orden sobre Γ. Se dira que c deduce a d bajo 4, escrito c ⇒4 d si y solo si

c⇒ d es verdadero de acuerdo a la relacion logica 4. Por comodidad se escribira c⇒ d

en vez de c ⇒4 d. Se dira c ≈ d si y solo si c ⇒ d y d ⇒ c son verdaderos bajo 4.

Algunos ejemplos de sistemas de restricciones son Herbrand y Getzen [VSG96].

1.2.1.2. Calculo CCP

La sintaxis de CCP esta dada por el cuadro 1.1:

Agentes A, B, ... := true no haga nada| tell(σ) tell σ

| ask(σ)→ A ask σ| (vX)A EscondaX|A||B Ejecucion en paralelo| p(X) Definicion de llamada

Definiciones D := ∈| p(X) :: A Definicion de agente|D.D

Programas P, Q := D.A

Cuadro 1.1: Sintaxis de CCP

Donde:

σ denota una o mas restricciones primitivas. X, Y... hace referencia a las variables del

calculo. A denota un agente o proceso. D denota una secuencia de declaraciones de

procesos y P, Q... es la definicion de un programa.

Los procesos se describen de la siguiente manera: El proceso true es equivalente a

vacıo; representa inactividad o el proceso que no hace nada. El proceso tell se encarga

de adicionar la restriccion σ al Store. El proceso ask pregunta al Store si la restriccion σ

se deduce de la informacion allı consignada; si puede deducirse, se ejecuta A, si deduce

la negacion de σ, se descarta A y si no puede deducir nada, el proceso queda suspendido

hasta que se tenga suficiente informacion para tomar una decision. EL proceso (vX)A

sirve para ocultar o crear una variable local al proceso A con el objetivo de que esta

solo sea visible para aquel. A||B denota la ejecucion en paralelo, lo cual dice que A

5

Page 29: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

y B se ejecutaran independientemente, pero se pueden comunicar y complementar de

acuerdo a las acciones de cada uno. El proceso p(X) es la definicion de llamada a un

proceso.

1.2.1.3. Reglas Semanticas de CCP

La descripcion de las reglas semanticas expuestas aquı, estan de acuerdo a la semantica

operacional, que interpreta un proceso como un conjunto de pasos computacionales.

Se define la relacion →(τ,τ ′) como la transicion del Store τ al τ ′.

Las reglas semanticas se ilustran en el cuadro 1.2:

TELL tell(σ)→(τ,τtσ) trueASK (ask(σ)→A)→(τ,τ)A si τ ` σ

PARA→(τ,τ)A

A||B→(τ,τ)A′||B ,

B→(τ,τ)B′

A||B→(τ,τ)A||B′

HIDEA→(τ,τ)A

(vX)A→(τ,τ)A′ si X es fresca

Cuadro 1.2: Semantica de CCP

La regla TELL especifica la accion de anadir la restriccion σ al Store mientras que el

proceso original reduce a true.

La regla del ASK modela el caso en que el Store puede deducir σ del Store τ , ejecu-

tandose el proceso A.

PAR especifica que la reduccion puede ocurrir en cualquiera de los dos procesos, mas

no en ambos en el mismo paso computacional.

HIDE implica el concepto de localidad de la variable X para el proceso A, lo que

quiere decir que solo este proceso (y sus subprocesos) tendra acceso a ella.

1.2.2. Default-TCC

El modelo de programacion concurrente por restricciones CCP ha demostrado ser muy

efectivo y de gran ayuda para modelar propiedades de concurrencia en problemas reales;

sin embargo, muchos de los problemas reales incluyen la nocion de tiempo, que CCP

no modela.

6

Page 30: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Para dar solucion a esta falencia, se ha propuesto la extension al calculo CCP denomi-

nada TCC – Temporal Concurrent Constraint Programming –. A partir de TCC sur-

gieron posteriormente otras extensiones y variantes, tales como Default-TCC y NTCC

–Non-deterministic Temporal Concurrent Constraint Programming – bases para el ac-

tual trabajo de tesis.

TCC implementa la nocion de tiempo discreto para poder modelar sistemas reactivos.

Basado en la programacion sincronica (Berrey & Gonthier(1992), Halbwachs et al. 1991,

Harel(1987)) TCC plantea agrupar todos los modelos temporales que se han trabajado

anteriormente, basandose en la nocion de tiempo multiforme y preemption (proceso

interruptible), que implica que cualquier senal puede ”servir como unidad de tiempo”.

Un sistema reactivo se define por su continua interaccion con su ambiente de ejecucion.

Un claro ejemplo se puede ver en los dispositivos roboticos, que interactuan constan-

temente con su ambiente, para reaccionar, por ejemplo, cuando se presiona un sensor

o se detecta un cambio en la percepcion de la luz. Los sistemas de tiempo multiforme

permiten modelar eventos condicionales de tiempo (time-outs) y retardos (unit-delays),

entre otros. Un ejemplo de esto son ciertas acciones de tipo time-out que puede presen-

tar un dispositivo robotico: si en una determinada cantidad de tiempo no ha recibido

senal alguna, ejecuta una accion o proceso determinado.

Con base en los sistemas reactivos y la nocion de tiempo multiforme, TCC divide el

tiempo en unidades discretas. En una unidad de tiempo TCC se captura el estado del

ambiente, despues se procesa esa entrada y, cuando se termina de procesar, se emite una

salida al ambiente. Es posible que queden algunos procesos residuales que se ejecutaran

en la siguiente unidad de tiempo. Es importante observar que en TCC el Store se vacıa

cada vez que una unidad de tiempo inicia.

Ejemplo 1.2.2. Suponga un proceso P que se ejecuta en todas la unidades; P interactua

con el ambiente evaluando si la variable del ambiente x se encuentra en “1”. Cada vez

que esto sucede, el ambiente debera de ejecutar un proceso Q, de lo contrario, no se

ejecuta nada. La figura 1.2 ilustra la ejecucion del proceso.

1.2.2.1. Propiedad por Defecto (Default)

Debido a que el modelo de programacion por restricciones CCP maneja la nocion de un

Store monotonico, lo cual implica que la informacion nueva debe de ser coherente con

7

Page 31: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Figura 1.2: Ejemplo de un ambiente TCC

la informacion actual, surgen problemas para expresar tanto la ausencia de informacion

como la informacion negativa. La ausencia de informacion hace referencia a aquella

informacion que no existe en el Store sobre la restriccion que se pregunta, y la infor-

macion negativa referencia aquella informacion que no es coherente con la informacion

que ya contiene el Store.

Debido al problema mencionado anteriormente, se ha propuesto modelar la propiedad

Default, que representa un valor por defecto para una variable en caso de que el Store

no tenga informacion sobre esta. Esta propiedad no es obligatoria, es decir no todas las

variables deben de tener un default.

1.2.2.2. Sintaxis de Default-TCC

Al ser TCC una extension de CCP, su sintaxis es similar. Se adicionan algunos cons-

tructores nuevos para manejar propiedades del tiempo y se perciben cambios de forma

al escribir los procesos.

La sintaxis de TCC esta dada por el cuadro 1.3:

A, B, .. = tell(σ) tell σ| if σ then A ask σ| if σ elseA ask negativo σ|A, B Composicion paralela|hence A Ejecucion de Aa partir de ahora|new X in A Encapsulamiento

Cuadro 1.3: Sintaxis de TCC

Donde: A, B, .. Denota un agente o proceso, X, Y, ... hace referencia a las variables del

8

Page 32: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

calculo. σ representa una o mas restricciones primitivas.

Las descripcion de los procesos es la siguiente: La accion de tell(σ) consiste en anadir

la restriccion σ al Store. El proceso if σ then A verifica si se puede deducir del Store

la restriccion σ; si esto es posible, se ejecuta el proceso A (note que este proceso tiene

cierta similitud con ask(σ → A) en CCP). El tercer proceso if σ elseA es el opuesto del

anterior: si no se puede deducir σ del Store, entonces se ejecuta A, aclaracion: el que

no se pueda deducir σ no implica que se cumpla ¬σ).“Estos dos procesos cumplen con

la propiedad de supuesto por defecto del calculo CC, ya que sirven para asegurar un

supuesto”. A, B es el proceso de composicion paralela, el cual representa dos procesos A

y B que se ejecutan independientemente sobre el mismo Store. hence A es el operador

del manejo del tiempo en TCC; significa que se impondran las restricciones del proceso

A en cada instante a partir de la ejecucion del hence. new X in A es el proceso que

construye la relacion de encapsulamiento en TCC, que significa que solo el proceso A

puede ver a X.

1.2.2.3. Semantica de Default-TCC

La descripcion de las reglas semanticas expuestas aquı es tomada de [VSG96].

Se define Γ, ∆, .. como multiconjuntos de programas,“que se entienden como procesos”

, σ(Γ) como el conjunto de todos los tell que hay en Γ y la relacion →b, como una

transicion binaria indexada por los supuestos finales b que seran usados para evaluar

las acciones con default.

La semantica de los procesos esta dada por el cuadro 1.4:

TELL σ(Γ)`aΓ`(tell(a),∆)

ASK1 ς(Γ)`a((Γ,if a then B),∆)→b((Γ,B),∆)

ASK2 ς(Γ)6`a((Γ,if a else B),∆)→b((Γ,B),∆)

PAR ((Γ, (A, B)), ∆)→b ((Γ, A,B), ∆)HENCE ((Γ, hence A), ∆)→b (Γ, (A, hence A, ∆))

NEW ((Γ, new X in A), ∆)→b ((Γ, A[Y/X]), ∆) para Y no libre en A y Γ

OBS∃b∈D (Γ,φ)→∗

b (Γ′,∆) 6→b σ(Γ′)=b

Γ;new−→Y in δ

Cuadro 1.4: Semantica de TCC

9

Page 33: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

La regla TELL se modela de manera similar que en CCP, especificando la accion de

anadicionar la restriccion σ al Store. ASK1 representa el caso en que se puede deducir a

del Store, por lo tanto se ejecuta el proceso B.La segunda regla ASK2, describe el caso

en que no hay suficiente informacion para deducir a, por lo que se ejecuta el proceso

B.PAR presenta la ejecucion de dos procesos en paralelo, bajo la condicion que se reduce

uno de los dos en cada paso computacional o transicion interna.HENCE describe la

ejecucion del proceso A y la posterior ejecucion de HENCE para el siguiente instante.

Este proceso hace una analogıa con la replicacion, del calculo π, para este calculo.La

regla NEW implica el concepto de encapsulamiento para la variable X en el proceso

A, este proceso remplaza al HIDE de CCP.

La ultima regla OBS se utiliza para definir una transicion observable. Una transicion

observable indica las acciones visibles de un proceso para los espectadores externos a

este; ademas de representar en este calculo el paso de la unidad actual de tiempo a la

siguiente. OBS se activa cuando el Store actual a alcanzado un estado de quietud impli-

cando que no se pueda deducir conocimiento nuevo y que ninguna de las reglas anterior-

mente expuestas pueda realizar alguna reduccion; de esta manera se finaliza la unidad

actual de tiempo, dando las instrucciones que debe ejecutar el ambiente(∃−→Y

σ(Γ)) y

presentado los procesos que se deben ejecutar en el siguiente instante. Es importante

mencionar que esta regla es la unica transicion observable de TCC .

1.3. MAQUINAS ABSTRACTAS Y MAQUINAS

VIRTUALES

1.3.1. Definiciones

Una Maquina Abstracta [Com00] puede definirse como un procedimiento para

ejecutar un conjunto de instrucciones en algun lenguaje formal, tomando una entrada

de datos y generando una salida. Algunas maquinas abstractas no pretenden ser im-

plementadas en Hardware. Ejemplo: Maquina de Estados Finitos, Maquina de Turing,

entre otras. Algunas maquinas abstractas implementan calculos como PICT para π,

MA TyCO para TyCO y MAPiCO para PiCO.

Una Maquina Virtual [Com00] es un procesador no implementado en Hardware,

pero que actua como el ejecutor notacional de un Lenguaje de Programacion particular.

10

Page 34: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Se compone de un conjunto de instrucciones, registros y un modelo de memoria. Es un

Software de emulacion para un ambiente fısico de computacion o Hardware. Ejemplo:

Maquina Virtual de Java y la Maquina Virtual de TyCO.

1.3.2. Maquina Abstracta y Virtual de TyCO

TyCO (Typed Concurrent Objects) [Lop99], es un calculo de procesos que implementa

los conceptos presentes en los Lenguajes Orientados-Objetos combinado con la Pro-

gramacion Concurrente, todo en un ambiente de paso de mensajes y objetos que se

comunican asincronicamente. Este calculo se origina en el CCS (Calculus of Communi-

cating Processes)[Mil89] y toma del calculo π las caracterısticas acerca de la definicion

de objetos, mensajes asıncronos y definiciones de plantillas, que se constituyen como

las entidades fundamentales de TyCO. Este calculo formalmente describe la interaccion

concurrente de objetos por medio de una comunicacion asıncrona. La comunicacion

sıncrona es implementada incorporando en los mensajes un nombre extra para cubrir el

resultado de la comunicacion. Las plantillas se usan para modelar clases y un comporta-

miento tıpico unbounded. Un sistema de tipos asigna tipos monomorficos a las variables

y tipos polimorficos a las plantillas.

A diferencia de otras implementaciones, la maquina virtual de TyCO descrita en [Lop99],

involucra la definicion de un lenguaje basado en el calculo TyCO y provee una semanti-

ca estatica, en la forma de un sistema de inferencia de tipos y una semantica dinamica,

en forma de una maquina abstracta. Este marco formal es el que define la base para el

diseno de la maquina virtual y el compilador del lenguaje asociado.

La maquina virtual ejecuta programas TyCO traducidos en un formato de ”codigo de

bytes”. Cuenta con una arquitectura compacta e independiente, y su desempeno resulta

favorable al comparase con otras implementaciones de su tipo. La maquina ha sido

afinada para TyCO, pero puede ser usada para implementar otro calculo incluyendo los

cambios necesarios o extensiones a su semantica. Es implementada como un emulador de

”codigo de bytes”, definiendo un monton (heap) para las estructuras de datos dinamicas,

una cola de ejecucion (run–queue) para planificacion del ”codigo de bytes, un arreglo

para las variables locales y una pila de operandos para la evaluacion de expresiones.

El lenguaje de programacion TyCO se define como un lenguaje tipado low–level

kernel, con una sintaxis y semantica muy cercanas al calculo mismo; solamente incluye

11

Page 35: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

unos pocos constructores derivados y tipos de datos. El sistema de inferencia de

tipos es el encargado de asegurar correctitud de tipos en los programas, en los nombres

y adicionalmente garantiza que no existiran errores de protocolo en tiempo de ejecucion.

1.3.2.1. Lenguaje de programacion TyCO

El lenguaje de programacion TyCO utiliza una sintaxis muy cercana al calculo mismo.

Toma como base la sintaxis del calculo TyCO y define las categorıas basicas para el

lenguaje de programacion subyacente que se observan en la figura 1.3.

Figura 1.3: Categorıas basicas del lenguaje de programacion TyCO

La novedad en el lenguaje TyCO es la introduccion de dos nuevas categorıas sintacticas:

instrucciones e hilos(threads), (Ver figura 1.4). Las instrucciones estan muy relacionadas

con los procesos TyCO y son elementos del conjunto Instr, nombrado como I. Los hilos

son elementos del conjunto Thread de colas de instrucciones, nombrado como T.

Figura 1.4: Nuevas Categorıas del lenguaje de programacion TyCO

La sintaxis del calculo fuente del lenguaje TyCO utiliza los hilos como la categorıa

principal, su gramatica se describe en la figura 1.5.

12

Page 36: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Figura 1.5: Gramatica del lenguaje de programacion TyCO

Para ilustrar el calculo TyCO se presenta un ejemplo tomado de [Lop99], que da solucion

al problema de la Criba de Eratostenes, tal como se describe a continuacion.

Se define una secuencia de procesos plantillas los cuales generan un flujo de numeros

naturales y chequean cuales de ellos son primos. Todos los numeros primos encontrados

se adicionan a la cadena de cribas que crece dinamicamente; de modo que se adiciona

una criba por cada numero primo encontrado. Esta cadena de cribas, filtra los naturales

mientras ellos son generados en Nats. El codigo que resuelve este problema en TyCO

sigue a continuacion.

def Nats = (n m sieve)

sieve![n] ; if n < m then Nats[n+1 m sieve]

and Sieve = (self prime nextsieve)

self ? (n done)

(if n % prime != 0 then nextsieve![n done]

else done![])

| Sieve[self prime nextsieve]

and Sink = (self)

13

Page 37: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

self ? (n done)

io!put[n] |

new newsieve Sink[newsieve] |

Sieve[self n newsieve] |

done![]

in io!put[2] | new sieve Nats[2 1000 sieve] | Sink[sieve]

Del ejemplo anterior se observa que Nats es quien genera el flujo de naturales entre n y

m, donde cada natural es enviado a la primera criba en la cadena de cribas (sieve) para

su chequeo. La generacion de un natural por Nats es sincronizada con senales generadas

cuando se realizan actualizaciones en la cadena. Sieve es una plantilla definida para las

cribas en la cadena.

El procedimiento, toma el natural n y lo pasa de criba en criba en la cadena chequean-

do que este no pueda dividirse por ninguna. Si sucede lo ultimo, el natural se olvida

y la criba envıa una senal a Nats para proceder a generar un nuevo numero natural.

Sink(llave) es quien senaliza el final de la cadena; de modo que, un natural que logra lle-

gar hasta el final se toma como un primo y se imprime. El proceso finaliza, extendiendo

la cadena al adicionar una nueva criba cuyo primo es n, situando sink luego del nuevo

primo para demarcar y enviando una senal a Nats para generar un nuevo numero. En

el anterior bloque de codigo, se llama a Nats para un flujo de naturales entre 2 y 1000.

1.3.2.2. Maquina Abstracta de TyCO

La semantica dinamica del lenguaje de programacion TyCO se define en forma de una

maquina abstracta. De esta manera, la maquina abstracta es quien confiere el compo-

nente de formalidad al flujo de implementacion que incluye el lenguaje, el compilador

y la maquina virtual. A continuacion se mencionan cada uno de los aspectos mas im-

portantes en la definicion de la maquina abstracta de TyCO.

1.3.2.2.1. Categorıas Sintacticas .

La definicion de la maquina abstracta incluye las siguientes categorıas sintacticas:

14

Page 38: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Ambiente de un hilo, representado como un mapeo de variables a valores:

VBind = Var 7→ Val. Se denota B.

Plantillas, son representadas como un mapeo de variables a pares de variables

y abstracciones: TBind = Tvar 7→ VBind x Abs. Se denotan K.

Mensajes, llevan una etiqueta y una secuencia de valores. Se mantienen en las

colas de: QComm = QueueLabel x Name*. Se nombran como ms.

Objetos, contienen una tabla de metodos y ligaduras de variables libres. Se

mantienen en las colas de: QMeth = Queue(VBind x Meth). Se nombran como

Ms.

Canales, son elementos del conjunto QBind = Name 7→ (QComm⋃

QMeth)

de colas de mensajes u objetos. Se nombran como Q.

Cola de ejecucion, es un elemento del conjunto RunQueue = Queue(VBind x

Thread) donde los hilos y sus ambientes se mantienen esperando por ejecucion.

Se nombra como R.

Estado–de–Maquina, denotado por S, es una tupla en el conjunto

State = TBind x VBind x QBind x Thread x RunQueue.

1.3.2.2.2. Estados Inicial y Final .

Para la maquina abstracta de TyCO se definen los estados inicial y final como sigue:

Estado Inicial: Dado un hilo T, la maquina abstracta inicia la computacion con

una cola de ejecucion vacıa, sin variables ni plantillas de ambientes y sin colas en

los canales. El estado inicial es representado por:

∅, ∅, ∅, T, •

Estado Final: La maquina se detiene cuando ninguna regla puede ser aplicada;

es decir, cuando se alcanza el estado final de la forma:

, , , •, •

15

Page 39: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

1.3.2.2.3. Reglas de reduccion .

Las reglas de reduccion descritas en la figura 1.6, realizan transformaciones de estados en

estados. Cada una de estas reglas requiere ciertas condiciones para que las reducciones

sean exitosas; de lo contrario, la maquina llega a un estado de bloqueo.

Figura 1.6: Reglas de Reduccion de la maquina abstracta de TyCO

1.3.2.2.4. Propiedades de la maquina abstracta .

La maquina abstracta de TyCO presenta las siguientes propiedades[Lop99]:

1. La maquina abstracta es sana, es decir, que cada transicion puede ser vista como

una reduccion o una congruencia entre las reglas y el calculo.

2. En cualquier momento de computacion, las colas asociadas con nombres estan

vacias o tienen solamente comunicaciones o tienen clausuras de metodos (method-

closures).

16

Page 40: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

3. Para programas correctos la maquina no presenta bloqueos. Esta propiedad esta li-

gada a la caracterıstica del sistema de tipos que garantiza que no existiran errores

de protocolo en tiempo de ejecucion.

4. La maquina abstracta es justa, es decir que, dado un hilo, este siempre se ejecuta

un tiempo despues de que llega a la cola de ejecucion.

1.3.2.3. Maquina Virtual de TyCO

La especificacion formal presentada anteriormente como maquina abstracta, define la

implementacion de la maquina virtual de TyCO. El diseno e implementacion fue inspira-

da en STG-Machine[Jon92, JNO97], la Maquina Virtual de Java[LY97] y WAM[War83];

no obstante, el modelo computacional es tomado de la especificacion formal de la maqui-

na abstracta. A continuacion se describe los componentes asociados a la implementacion

de la maquina virtual de TyCO.

1.3.2.3.1. Arquitectura de Memoria .

Para la maquina virtual de TyCO se definen cinco areas de memoria. Ver figura 1.7

Figura 1.7: Areas de Memoria de la maquina virtual de TyCO

1. Area de Programa: mantiene las instrucciones en codigo de bytes a ser ejecuta-

das. El codigo de bytes se compone de bloques de instruccion y tablas de metodos

(secuencias de punteros a los bloques de codigo).

2. Monton: es un espacio de direcciones planas donde las estructuras de datos

dinamicas como objetos, mensajes y canales son localizados. El bloque constructor

17

Page 41: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

basico del monton es la palabra(machine word); y la unidad de alocacion basica

es el marco(frame) y consiste de uno o mas palabras contiguas con un descriptor

para la recoleccion de basura.

La maquina manipula tres clases basicas de procesos en tiempo de ejecucion:

mensajes, objetos e instancias. Los mensajes y objetos se localizan en canales

compartidos, y son vistos externamente como marcos. Los marcos de mensaje

esperan por una etiqueta y una lista de argumentos. Los marcos de objetos es-

peran por un puntero al codigo donde se encuentra la tabla de metodos, mas las

ligaduras de las variables libres asociadas a los metodos. Un marco de instancia

espera por una referencia al codigo que ubica las plantillas, ligaduras y argumen-

tos de una instancia. Los canales finalmente son marcos especiales utilizados en

la comunicacion entre colas e implementan la nocion de nombres en el calculo.

3. Cola de Ejecucion: espera vm threads o bloques de instrucciones contiguas aso-

ciados a un hilo, listos para ejecucion y sus respectivos ambientes. Esta cola crece

en la misma direccion del monton. Cada vm thread consiste de una estructura de

datos con una referencia al codigo del programa, una referencia a un marco con

los parametros y una referencia a un marco en el monton con las variables libres.

Cada vez que una reduccion ocurre, un nuevo vm thread es creado y colocado,

junto con su ambiente, en la cola de ejecucion donde espera ser planificado para

ejecucion.

4. Arreglo de variables locales: Ya que cada vm thread crea nuevas variables loca-

les; cada vez que una variable local es creada, la siguiente posicion disponible en

el arreglo de variables locales es asignada y ligada al canal que ya ha sido definido.

Cada que un vm thread termina, las ligaduras locales se descartan y se sobrees-

criben las asignaciones cada vez que el siguiente vm thread pase a ejecucion.

5. Pila de Operandos: la maquina virtual admite directamente tipos de datos de-

finidos en TyCO; es decir, que existen instrucciones que implementan operacio-

nes booleanas sobre booleanos, operaciones aritmeticas sobre enteros y flotantes

y operaciones relacionales sobre enteros, flotantes y cadenas. Para las cadenas

tambien existen instrucciones para computar su tamano y para concatenar. La

implementacion actual admite listas. Todas estas operaciones se realizan en el

area de memoria denominada pila de operandos. Cuando las expresiones son sim-

ples como constantes o variables que no requieren evaluacion, son directamente

18

Page 42: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

copiadas al monton para procesar; de lo contrario, las expresiones que requieren

de evaluacion pasan del monton a la pila para evaluacion y de nuevo a una nueva

ubicacion en el monton para ejecucion.

1.3.2.3.2. Registros .

La maquina virtual utiliza registros globales para controlar el flujo del programa y

manipular la maquina y las estructuras de datos asociadas. El conjunto de registros se

muestra en el cuadro 1.5.

Registros Descripcion

PC (Program Counter) apunta a la siguiente instruccion a ser ejecutada.HP (Heap Pointer) apunta a la siguiente posicion disponible en el

monton.SQ (Start Queue) apunta al inicio de la cola de ejecucion.EQ (End Queue) apunta al final de la cola de ejecucion.OS (Operand Stack) apunta al ultima posicion utilizada de la pila.LV (Local Variable Array) apunta a la base del arreglo de variables.CC (Current Channel) apunta al canal actualmente usado en la reduccion.CF (Current Frame) espera por marcos temporales hasta que ellos sean

encolados o usados en una reduccion.OF (Other Frame) se utiliza cuando se esta ejecutando una reduccion.FV (Free Variable bindings) espera por variables libres.PM (Parameter bindings) espera por parametros.

Cuadro 1.5: Registros de la maquina virtual de TyCO

1.3.2.3.3. Conjunto de Instrucciones .

La maquina virtual de TyCO utiliza un tamano minimizado en el formato de ins-

trucciones para fines de eficiencia. Las instrucciones son identificadas por un codigo

de operacion unico apuntado por el registro del PC y han sido implementadas como

funciones tipo C, sin parametros.

1.3.2.3.4. Flujo de Datos TyCO .

19

Page 43: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Finalmente, es importante mencionar que la implementacion de TyCO incluye un com-

pilador de codigo fuente a codigo ensamblador, un ensamblador de codigo de bytes y

un emulador de codigo de bytes. El emulador es basicamente la implementacion de la

maquina abstracta. El codigo ha sido escrito en lenguaje C buscando eficiencia. La

figura 3.1 ilustra el flujo de datos en el sistema TyCO.

Figura 1.8: Flujo de datos del sistema TyCO

1.3.3. Maquina Abstracta de PiCO

El diseno e implementacion de la maquina abstracta para el calculo PiCO[ADQV98],

MAPiCO[AB98], no realiza la diferenciacion entre maquina abstracta y maquina vir-

tual, tal como se presento en la seccion anterior para TyCO. Sin embargo, esta di-

ferenciacion esta implıcita, ya que, para MAPiCO se define la maquina abstracta en

forma de reglas de reduccion y, adicionalmente, se implementa el emulador subyacente.

Para MAPiCO, igualmente, se define un flujo de datos que incluye el lenguaje visual

CORDIAL, un compilador de PiCO a MAPiCO y el emulador denominado MAPiCO.

A continuacion se describen los componentes mas importantes de la implementacion de

MAPiCO.

1.3.3.1. Especificacion Formal

PiCO[ADQV98] es un calculo que integra objetos concurrentes y restricciones como

elementos basicos. El modelo de objetos se extiende adicionando la nocion de un sistema

20

Page 44: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

de restricciones, ademas de la nocion de delegacion de mensajes, confiriendo una manera

natural de expresar comportamientos de comunicacion usando sincronizacion en el paso

de mensajes. Uno de las aplicaciones de este calculo es la representacion musical, de

manera que es posible utilizar PiCO para modelar objetos musicales como armonıas,

patrones, secuencias de acordes y melodıas, entre otros.

Como ilustracion del calculo PiCO se muestra la codificacion de factorial [AB98]. Pri-

mero se muestra la definicion recursiva y luego su codificacion en PiCO.

fact(x, r) ::= r = 1 si x = 1|r = fac(x− 1) ∗ x si x > 0

fact(3, r)

.(v x y)(v fac)((∗fac . [input : (n, r)(?(n = 0).!(r = 1)

. |?(n > 0).(v y a)((!y = n− 1)

. |(fac/ input[y, a]))

. |!(r = a ∗ n)))])

. |!(x = 3).fac/ input[x, y])

MAPiCO es la maquina abstracta que implementa el calculo PiCO. En MAPiCO se

definen todos los componentes que confieren formalidad a la implementacion, de modo

que se logre un nivel de correspondencia entre el calculo y la maquina.

1.3.3.1.1. Estructuras de Datos .

Las estructuras de datos usadas por MAPiCO en la especificacion formal se describen

en la siguiente tabla:

RunQ: cola de ejecucion.

Obj: cola de objetos suspendidos.

MsgQ: cola de mensajes suspendidos.

AskQ: cola de procesos ask suspendidos.

S: Store.

Memoria de Ligaduras: memoria dinamica que almacena las pilas de procesos

y el arbol sintactico con las restricciones.

21

Page 45: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Memoria del Programa: memoria estatica que almacena las instrucciones a

ejecutar.

Registros internos: se definen cinco registros internos para la maquina.

1.3.3.1.2. Estados Inicial y Final .

Cada vez que se ejecuta un hilo, el proceso asociado cambia de estado; los estados de

un proceso se definen, de acuerdo a su actividad actual, en: ejecucion, listo, suspendido

o finalizado. Un estado en MAPiCO se representa como:

�Hilo, HBind, HAux, ObjQ, MsgQ, AskQ, RunQ, Store�

donde Hilo, HBind y HAux representan el proceso que esta siendo ejecutado. La

memoria de programa no se referencia en la definicion de estado ya que esta es estatica;

por lo tanto, no se modifica en tiempo de ejecucion.

Los estados inicial y final se definen a continuacion (• es utilizado para indicar que la

cola esta vacia y :: indica concatenacion de colas).

Estado Inicial: la maquina comienza en un estado donde las colas de objetos,

de mensajes, de ask y de ejecucion, estan vacias y no hay ligaduras; ademas, el

Store esta inicialmente vacıo.

� ~P ~P , ∅, ∅, •, •, •, •, ∅ �

Estado Final: a este estado solo se llega cuando no hay nada mas que planificar

en la cola de ejecucion. La maquina reconoce que los procesos que han quedado

suspendidos en Oq, Msq y Aq estan suspendidos y que no pueden ser reducidos.

� nil, B, H, Oq, Msq, Aq, •, S�

1.3.3.1.3. Reglas de reduccion .

En la semantica operacional de MAPICO las reglas de reduccion son transiciones de

estados a estados. Las reglas de reduccion se muestran en las figuras 1.9 y 1.10.

22

Page 46: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

En MAPiCO cada regla toma el primer proceso de la cola de ejecucion RunQ y ejecuta

una paso de reduccion en el proceso. La regla SCHED remueve el proceso actual

en ejecucion, permitiendo que el siguiente pueda reducirse. NEW-REF es la regla

que define la creacion de nuevas variables; de modo que, el proceso (vx)−→P crea un

nuevo enlace de x a L, donde L es el nuevo nombre generado por el sistema. La regla

PARALLEL crea un nuevo proceso Q, lo situa al final de la cola RunQ, y sigue con

la ejecucion del proceso P. TELL define la forma en que se comenta al Store; asi, para

reducir un proceso tell(!φ.−→P ), la restriccion φ(L) es comentada al Store y los procesos

suspendidos en las colas Aq y Msq pasan a ejecucion para intentar ser reducidos, se

continua con la ejecucion de−→P . Para ASK se definen tres casos: ASK1 donde si el

store deduce φ(L), la maquina continua ejecutando (−→P ); ASK2 donde si el store logra

deducir ¬φ(L), la maquina elimina el proceso actual; y finalmente ASK3 caso en el

cual el Store no pude deducir φ(L), ni tampoco ¬φ(L), luego, se suspende el proceso y

se envia a la cola Aq.

En cuanto a las reducciones relacionadas con mensajes; MSgEnQ es la regla que define

la reduccion de un paso de mensaje a un objeto que no se encuentra en la cola Oq, caso

en el cual se suspende el mensaje en la cola Msq. La regla MsgComm define que si

el proceso es un mensaje I / li : [K].−→P a un objeto en la cola Oq y la etiqueta del

mensaje li concuerda con una en el conjunto de metodos del objeto, este ultimo se

elimina y el cuerpo del metodo−→Pi , con el nuevo enlace para K se envıan a la cola

RunQ para ejecucion. MsgDel define la reduccion en caso que el objeto (I ′, J ′) . [l1 :

(x1−→P1, . . . , lm : (xn)

−→Pm] exista en la cola Oq, no exista una etiqueta li para comunicarse

con I / li : [K].−→P , pero si posea una direccion de delegacion; entonces, el receptor

del mensaje se cambia por la direccion de delegacion. De igual manera si el objeto

anterior existe en Oq, noy ha una etiqueta li para comunicarse, y no tiene una direccion

de delegacion, el mensaje se suspende en la cola Msq como se describe en la regla

MsgWODel.

Para objetos se tienen las siguientes reglas; ObjEnQ que define la situacion en la cual no

hay ningun mensaje para comunicarse con el objeto (I, J). [l1 : (x1)−→P1, . . . , lm : (xn)

−→Pm]

en la cola Msq para comunicarse, por lo tanto el objeto es pasado a la cola de objetos Oq

para posterior reduccion. ObjComm presenta el caso en que el mensaje I/ li : [K].−→P

espera comunicarse con el objeto (I, J). [l1 : (x1)−→P1, . . . , lm : (xn)

−→Pm], y existe una

etique li; luego el mensaje es eliminado de la cola Msq, y la continuacion del mensaje−→P puesto para ejecucion, seguido por el cuerpo del metodo con el nuevo enlace para

23

Page 47: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

K. ObjDel describe la misma situacion anterior, con delegacion, pero sin etiqueta li;

luego el mensaje es pasado al final de la cola RunQ,pero cambiando el objeto receptor

pr la direccion de delegacion y el objeto es pasado a la cola Oq. Por ultimo, para el

mismo caso, pero sin delegacion, ni etiqueta, el objeto se pasa a la cola Oq, como se

muestra en ObjWoDel.

1.3.3.2. Diseno de MAPiCO

MAPiCO esta compuesta por dos areas de memoria, cuatro colas para los diferentes

estados de ejecucion de un proceso, y un sistema de restricciones que provee, tanto el

almacenamiento de restricciones, como las operaciones ask y tell [AB98]. La entrada

de la maquina es codigo de bytes y se asume que es correcta, por lo que no se realizan

chequeos. La implementacion fue realizada en lenguaje Java. El diseno se muestra en

la figura 1.11.

Los elementos basicos en el calculo PiCO son: objetos, mensajes, restricciones, variables

y nombres, los cuales se modelados uno a uno en la maquina. Existen cuatro colas de

procesos: una cola para los objetos que aun no han establecido comunicacion o son

replicados, otra para los mensajes y en tercer lugar una cola de ask que han quedado

suspendidos. Debido a la naturaleza de PiCO como calculo de procesos concurrente

y por restricciones, la implementacion de MAPiCO esta asociada a un Sistema de

Restrticciones que mantiene un Store monotonico donde se almacena la informacion,

y al que se accede via operaciones ask para hacer preguntas y tell para adicionar

informacion.

El programa se ubica en una memoria estatica o Memoria de Programa donde se

almacenan todas las instrucciones en codigo de bytes para ser ejecutadas.

Por ultimo, existe un area de memoria dinamica o Memoria de Traduccion utilizada

para mantener las ligaduras de variables y nombres. En esta area de memoria tam-

bien son almacenados los parametros usados por los metodos y el arbol sintactico que

representa una restriccion.

1.3.3.2.1. Registros .

En MAPiCO se definen cinco registros de uso especıfico que guardan informacion de la

24

Page 48: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Figura 1.9: Reglas de Reduccion de la maquina abstracta MAPiCO, parte I

25

Page 49: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Figura 1.10: Reglas de Reduccion de la maquina abstracta MAPiCO, parte II

memoria y de los procesos, los cuales se muestran en el cuadro 1.6.

1.3.3.2.2. Formato de Instrucciones .

Las instrucciones estan representadas por un codigo de operacion y de 0 a 3 atributos.

Las instrucciones pueden ser clasificadas en tres grupos: para manipular procesos, para

definicion de objetos y para la construccion de predicados de primer orden. Los atributos

utilizados en el formato de instrucciones se describen a continuacion:

Opcode: codigo de operacion de la instruccion, 8 bits

Dir: direccion valida en la memoria de programa, 32 bits

Ind: indice dentro de alguna de las listas de variables o nombres, 16 bits

Num: numero constante entero. Para objetos especifıca el numero de metodos.

Para metodos y mensajes especifıca su nombre o referencia, 16 bits.

26

Page 50: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Figura 1.11: Diseno de MAPiCO

Fun: codigo de la funcion, 8 bits para el sistema de restricciones actual.

Pred: codigo del predicado del atomos, 8 bits

Ari: aridad de la funcion o del atomo, 8 bits

Con: codigo del conector, and(0), or (1), 8 bits

Cuan: codigo del cuantificador o negacions, ∃ (1) ∀ (2) not (0) 8 bits

1.3.3.2.3. Sistema de Restricciones .

En PiCO las restricciones se definen como predicados de primer orden(∅)[AB98] bajo

una sintaxis de terminos, atomos y sentencias. Ası en MAPiCO, estos predicados son

modelados por instrucciones que permiten construir el arbol sintactico que describe la

27

Page 51: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Registros Descripcion

PCA (Puntero a Codigo Actual) apunta a la instruccion en ejecucion.PVA (Puntero a Variables Actual) apunta al PV del proceso en ejecucion.PNA (Puntero a Nombres Actual) apunta al PN del proceso en ejecucion.PAA (Puntero Auxiliar Actual) apunta al PA delproceso en ejecucion.PAUX (Puntero Auxiliar) usado en la manipulacion y ejecucion

de procesos.

Cuadro 1.6: Conjunto de Registros de MAPiCO

restriccion. Esta particularidad permite que el sistema de restricciones se adicione pa-

rametricamente a la maquina; es decir, que dado un sistema de restricciones que exprese

sus restricciones en terminos de predicados de primer orden, este puede adicionarse a

MAPiCO sin mayores modificaciones.

El sistema de restricciones que utiliza la actual implementacion de MAPiCO define

restricciones de dominio finito; este sistema se describe en [CG01]. Se fundamenta en

el modelo de Bjorn Carlson [Car95] y fue implementado en lenguaje C.

1.4. OBJETIVOS Y CONTRIBUCIONES DE ES-

TE TRABAJO DE TESIS

El presente trabajo de tesis utiliza el calculo de procesos NTCC – Non-deterministic

Temporal Concurrent Constraint Calculus – [Val03] para definir e implementar su

maquina abstracta y virtual; la maquina se prueba en aplicaciones asociadas a NTCC:

Programacion concurrente de controladores RCX en robots LEGO.

NTCC es una extension de TCC [SJG94], que adiciona las nociones de No-determinismo

y Asincronıa actuando sobre sistemas Discretos-Temporales-Reactivos. NTCC permite

modelar: retardos unitarios o unit-delays, para forzar la ejecucion de un proceso en

el siguiente instante de tiempo; time-outs, que esperan durante el instante actual a

que una pieza de informacion este presente y, de lo contrario, activan un proceso para

ejecutar en el siguiente instante; preemption y tiempo multiforme, que permiten que los

procesos sean “regulados” por otros procesos, dando la posibilidad de definir multiples

formas de tiempo en vez de tener un unico reloj global. Finalmente, modelan sincronıa

28

Page 52: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

al igual que TCC. La asincronıa es modelada como operaciones de retardos finitos

pero no limitados o unbounded-finite-delays y el no-determinismo por operaciones de

eventualidad limitada o bounded-eventuality.

La perspectiva reactiva de este calculo, hace que NTCC sea de gran aplicabilidad en

programacion de diversos dominios de concurrencia tales como: Shared Variables Com-

munication Systems, donde agentes interactuan escribiendo y leyendo informacion de

una locacion central o Store; Reactive Systems, donde se mantiene una interaccion conti-

nua con el ambiente; Timed Systems, en los que agentes se restringen por requerimientos

temporales y, finalmente, Syncronous y Asyncronous Systems. La aplicabilidad sobre

estos sistemas permite ilustrar la expresividad de NTCC, y para el caso del actual tra-

bajo de tesis permite ilustrar la aplicabilidad de NTCC para programar sistemas reac-

tivos como los dispositivos roboticos LEGO. En la actualidad existen algunos lenguajes

que permiten programar estos dispositivos siguiendo esta lınea, tales como LUSTRE y

ESTEREL [MR]; lenguajes sıncronos para robots LEGO y JCC[SRP03] que permite

integrar Timed Default Concurrent Constraint Programming con Java.

Este trabajo de tesis describe el diseno e implementacion de la maquina abstracta y la

maquina virtual de NTCC (LMAN). Adicionalmente, se describe el diseno y acople del

compilador NTCC-LMAN, que permite escribir programas NTCC en alto nivel para la

maquina. Los objetivos de este trabajo se describen a continuacion:

Construir la maquina abstracta del calculo NTCC, manteniendo una equivalencia

entre la maquina y el calculo.

Disenar e Implementar la maquina virtual del calculo NTCC, asegurando eficien-

cia y ejecucion en tiempo real sobre Robots LEGO MindStorm.

Acoplar un Sistema de Restricciones de dominios finitos y asegurar ortogonalidad

en su adicion a la maquina.

Disenar y Acoplar un Compilador NTCC-LMAN que permita crear programas en

alto nivel para LMAN.

LMAN toma principalmente como referencia las maquinas para calculos de procesos

TyCO[Lop99] y MAPiCO[AB98] descritas en brevedad en las secciones anteriores. La

semantica utilizada es realmente cercana a la defincion del calculo mismo, demostran-

do ası su expresividad. La especificacion de una maquina asbtracta para el calculo le

29

Page 53: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

confiere una base formal a la implementacion de la maquina virtual, idea tomada de la

maquina de TyCO[Lop99]; adicionalmente, facilita las pruebas formales de correspon-

dencia entre el calculo y la actual implementacion. La maquina virtual es implementada

como un emulador de codigo de bytes que se compone de cuatro bloques funcionales: me-

moria de programa, Interfaz LEGO, Interfaz STORE, y el ControlLMAN. A diferencia

de otras implementaciones de otras maquinas para calculos de procesos[AB98, Lop99]

LMAN maneja no solo la nocion de planificacion de procesos, sino tambien de planfi-

cacion de maquinas en el tiempo.

Un sistema de restricciones de dominio finito[CG01] ha sido adicionado a LMAN. La

definicion de restricciones como formulas de primer orden en LMAN, idea adoptada de la

implementacion de MAPiCO[AB98], asegura que el sistema de restricciones se adiciona

de forma parametrica a la actual implementacion, de modo que para extensiones futuras

cualquier sistema de restricciones que exprese sus restricciones como formulas de primer

orden puede ser adicionado. Respecto a la ejecucion, LMAN resulta completa y eficiente

ya que aunque se ejecuta desde una estacion de trabajo y requiere de un protocolo

de comunicaciones con el robot LEGO, se observa que los programas NTCC corren

eficientemente y en tiempo real. Adicionalmente, su implementacion posibilita modelar

problemas que involucran hasta dos agentes roboticos; con algunas adiciones es posible

modelar sistemas multiagentes.

LMAN ha sido desarrollada para servir como ambiente de pruebas y para la ensenanza

introductoria de lenguajes de programacion concurrente y por restricciones. Para ello. ha

sido disenado e implementado el compilador NTCC-LMAN y un lenguaje Visual[FQ04],

haciendo que la interfaz con el usuario resulte amigable. En la actualidad, no conocemos

de otra implementacion de un calculo de procesos, temporal, concurrente por restric-

ciones validado sobre robots LEGO. Consideramos que la maquina que aquı se reporta

es la primera implementacion de esta naturaleza. En particular, LMAN constituye una

implementacion completa y eficiente del calculo NTCC; esta modela de manera cercana

las reglas de reduccion del calculo, facilitando las pruebas formales de correctitud en la

actual implementacion.

30

Page 54: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

2 CALCULO NTCC

En este capıtulo se describe el calculo NTCC [Val03], base del presente trabajo de tesis.

Se describe en brevedad la sintaxis, semantica operacional y ejemplos de aplicaciones

NTCC.

2.1. Descripcion General

La extension TCC agrega la nocion de tiempo a CCP. Existen, sin embargo, otras

caracterısticas que se hace necesario modelar; dos de ellas son la asincronıa y el no-

determinismo. Procesos como: “el sistema debe entregar un mensaje pero no hay un

limite de tiempo preciso sobre cuando debe hacerlo”, “el sistema debe ejecutar la tarea

c en alguna de las siguientes t unidades de tiempo” o la posibilidad de escoger entre

multiples opciones correctas para ejecutar una tarea (Ejemplo: la decision que toma un

dispositivo robotico en el momento de moverse al ejecutar zig-zag), no son expresables

en TCC.

Con los ejemplos anteriores es posible concluir lo siguiente: “la asincronıa da libertad a

los procesos de responder a una velocidad relativamente indeterminada. Solo asegura que

los procesos se ejecutan en algun momento, mas no asegura cuando. El no-determinismo

es importante para modelar respuestas y comportamientos correctos e impredecibles de

los procesos. ”[Val03].

Estas propiedades tambien facilitan la tarea de describir procesos computacionales, sin

necesidad de sobre-especificarlos.

Debido a las necesidades de modelar y utilizar los beneficios de las propiedades anterior-

mente expresadas, surge el calculo NTCC (Non-Deterministic Temporal Concu-

rrent Constraint Programming ), que es una extension ortogonal del calculo TCC,

31

Page 55: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

al que se adicionan las propiedades de no-determinismo y asincronıa . En NTCC es

posible modelar con facilidad: retardos unitarios, para forzar la ejecucion de un proceso

en el siguiente instante de tiempo; time-outs, que esperan durante el instante actual

a que una pieza de informacion este presente y, de lo contrario, activan un proceso

para ejecutar en el siguiente instante; preemption y tiempo multiforme, que permiten

que los procesos sean “regulados”por otros procesos, dando la posibilidad de definir

multiples formas y senales de tiempo en vez de tener un unico reloj global. Finalmente,

modela tambien sincronıa al igual que TCC. La asincronıa en NTCC es representada

por operaciones de retardos finitos pero no limitados o unbounded-finite-delays y el no-

determinismo por operaciones de eventualidad limitada o bounded-eventuality, que se

tratan en los procesos ∗P y σ when ci doPi respectivamente.

NTCC es de gran aplicabilidad en la programacion de dispositivos roboticos, sincroni-

zacion de procesos musicales y sistemas multiagentes; aplicaciones en que se presentan

ciclos en los que se recibe una entrada del ambiente, se procesa y luego se regresa

de nuevo al ambiente la correspondiente salida, comportamiento propio de sistemas

reactivos. NTCC sigue el mismo comportamiento de TCC, en cuanto al manejo de la

unidad de tiempo; es decir, el lapso entre el retorno de una respuesta al ambiente y

la recepcion de la entrada del mismo, define una unidad de tiempo. A partir de esta

concepcion reactiva-temporal es que se definen nuevos procesos y propiedades en estos

calculos temporales.

2.2. Sintaxis de NTCC

La sintaxis de NTCC difiere en forma respecto a la de TCC, pero los conceptos glo-

bales son similares; ademas de incluir nuevos operadores para las propiedades de no-

determinismo y asincronıa. La sintaxis de NTCC esta dada en el cuadro 2.1.

c, d, ... denotan las restricciones. P, Q, A, ... representan los procesos del calculo. x, y, ..

se utilizan para hacer referencia a las variables de los procesos.

El proceso skip es utilizado para representar inactividad.

El proceso tell c adiciona la restriccion c al Store en el intervalo de tiempo actual;

operacion que puede causar inconsistencias en el Store, si c no es coherente con la

informacion actual.

32

Page 56: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

P, Q, ... = skip Nohaga nada|tell(c) tell c

|∑

i∈I when (ci) doPi Seleccione un Pi, si ci, i ∈ I|P ||Q Ejecucion en paralelo

|Local x in P Localidad|next P Ejecute P en la siguiente unidad de tiempo

|unless (c) do next P A menos que deduzca c ejecute next P|!P Replicacion| ? P Retardo infinito pero no limitado de P

Cuadro 2.1: Sintaxis de NTCC

El proceso∑

i∈I when (ci) doPi, llamado seleccion multiple con guarda (guarded-choice),

donde I es un conjunto de ındices, tiene como tarea escoger no-deterministicamente

algun Pj, j ∈ I, para el cual cj pueda deducirse de la informacion contenida en el Store.

Si se logra deducir cj, se ejecuta Pj y los demas procesos Pi, i ∈ I− j seran eliminados.

Si el Store deduce la negacion de todas las guardas cj ( ¬cj,∀j∈I), se eliminan todos los

Pj; y finalmente, si no hay suficiente informacion para deducir cj, entonces se suspende

el proceso∑

. Este proceso modela el no-determinismo en el calculo.

El proceso local x in P modela el encapsulamiento, mediante la definicion de una varia-

ble local x utilizada unicamente por P ; la informacion acerca de x no puede ser vista

por ningun proceso, excepto P .

El proceso next P ejecuta P en la siguiente unidad de tiempo; es decir que espera una

unidad para ejecutar P . Este proceso junto con !P es la unica forma que un proceso

perdure en el tiempo.

La composicion P ||Q, denota la ejecucion paralela de P y Q. Su comunicacion se hace

solo a traves de la informacion en el Store.

La primitiva unless (c) do next P , tambien conocida como el ask negativo, ejecuta P

en la siguiente unidad de tiempo, a menos de que, c pueda deducirse en la unidad de

tiempo y Store actuales. Esta primitiva permite modelar “time-outs”, ya que espera

que en la unidad actual se presente la informacion c; de lo contrario, se activa P en la

siguiente unidad.

!P modela el proceso de replicacion, que consiste en crear una copia de p de manera no

limitada en la unidad actual y en cada unidad de tiempo futura. Esta es la forma de

33

Page 57: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

modelar un comportamiento infinito en este calculo.

Finalmente, ?P activa P en algun instante de tiempo, ya sea el actual o alguno futuro,

permitiendo modelar asincronıa de procesos.

2.3. Semantica de NTCC

2.3.1. Sistema de Restricciones Aritmetico-Modular

El sistema de restricciones que usa el calculo NTCC, llamado Sistema de Restriccio-

nes Aritmetico-Modular, se apoya en la definicion del sistema de restricciones pre-

sentada en el capitulo anterior (ver definicion 1.2.1.1), modificando algunos aspectos,

que se describen a continuacion.

Definicion 2.3.1 Sea n > 0, Se define A[n] como un sistema de restricciones tal que:

Σ esta dado por 0, 1, 2....n− 1, succ, pred, +, x, =, <.

4 es el conjunto de sentencias validas de la aritmetica modulo n.

Se entendera por A[n] un sistema de restricciones sobre los naturales, modulo n; es

decir, que el rango de los posibles valores es 0..n − 1. Se utilizara v para referenciar

cualquier posible valor; los operadores aritmeticos tambien estaran sujetos al modulo

n. Este sistema se asumira como sistema de restricciones por defecto para el calculo

NTCC, de aquı en adelante.

NTCC tiene parametrizado su sistema de restricciones por lo cual no tiene que limitarse

a utilizar uno solo. Pueden utilizarse otros sistemas de restricciones, tales como: Inter-

valos racionales, tipos enumerados, sistemas de restricciones Kahn y Getzen[VSG96],

entre otros.

2.3.2. Semantica Operacional

La semantica operacional de NTCC [Val03] esta dada en terminos de las relaciones de

reduccion → y ⇒.

34

Page 58: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Las transiciones de un proceso a otro modelan el transcurso de una computacion: definen

paso a paso la ejecucion de un ”programa”en el calculo.

Se define una transicion interna (no observable) de la forma < P, d >→< P ′, d′ >,

que se lee ”P con Store d reduce, en un paso interno, a P ′con Store d′ ”, donde P ′ es

una evolucion interna de P .

Una transicion externa (observable) de la forma P →(c,d) R, se lee ”P , con entrada

c del ambiente, reduce en una unidad de tiempo a R, con salida d al ambiente”, donde

R es una evolucion observable de P .

La reglas de la semantica operacional se exponen en el cuadro 2.2:

TELL<tell(c),d>→<skip,d∧c>

SUM<

∑i∈I when ci do Pi,d>→<Pj ,d>

if d |= cj, j ∈ I

PAR <P,c>→<P ′,d><P ||Q,c>→<P ′||Q,d>

UNL<unless c next P,d>→<skip,d>

if d |= c

LOC <P,c∧∃xd>→<P ′,c′><(local x,c) P,d>→<(local x,c′) P ′,d∧∃xc′>

STAR<?P,d>→<nextnP,d>

if n ≥ 0

REP<!P,d>→<P ||next !P,d>

STRγ1→γ2

γ′1→γ′2if γ1 ≡ γ′1 y γ2 ≡ γ′2

OBS <P,c>→∗<Q,d> 6→P=⇒(c,d)R

if R ≡ F (Q)

Cuadro 2.2: Semantica de NTCC

En el cuadro 2.2, la notacion de las reglas PQ

se lee, cuando P se cumple, entonces Q se

cumple”.

La regla TELL adiciona c al Store d, quedando un nuevo Store d ∧ c y el proceso

reducido a skip.

35

Page 59: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

SUM escoge, no-deterministicamente, una guarda cj que pueda deducir el Store y

ejecuta entonces el proceso Pj. Si se deduce lo contrario de cada una de las guardas

ci ( ¬ci,∀i∈I), no se ejecuta ningun proceso Pi. Si no hay suficiente informacion para

deducir algun ci, se suspende el proceso∑

i∈I when ci doPi.

La regla PAR especifica que en una transicion interna solo se reducira uno de los dos

procesos.

UNL modela la ejecucion de P siempre y cuando la condicion c no sea deducida por el

Store. Esto se presenta de dos formas: la primera ocurre al deducirse ¬c y la segunda es

cuando el Store una vez alcanzado el estado de quietud no tiene suficiente informacion

para deducir si c se cumple.

LOC representa la propiedad de encapsulamiento creando una variable x a la que solo

puede aceder el proceso P ; esto se modela ocultando a P la informacion de alguna x

que se encuentre en el Store global mediante la cuantificacion existencial de esta (∃x d).

A su vez P oculta al Store global la informacion de la variable x mediante un Store

local c, el cual contendra toda la informacion sobre la x local.

La regla STAR activa, no-deterministicamente, el proceso P , sea en la unidad de tiempo

actual o en una futura; se modela ası la espera de tiempo limitada, mas no definida.

REP especifica la ejecucion de P en todos las unidades de tiempo, modelando el com-

portamiento infinito de un proceso.

La regla STR dice que procesos estructuralmente congruentes tienen reducciones que

producen procesos congruentes.

Las anteriores reglas se agrupan bajo el nombre de transiciones internas.

La regla OBS dice que una transicion observable de P , etiquetada por < c, d >, se

obtiene al realizar una secuencia interna de transiciones desde la configuracion inicial

< P, c > a la configuracion final < Q, d >, en la que ya no es posible hacer mas

evoluciones internas. El proceso residual R a ser ejecutado en la siguiente unidad de

tiempo, es equivalente a (F (Q)) ( Futuro de Q) . Futuro de Q se obtienen eliminando

de Q las sumatorias que no dispararon actividad en el intervalo actual, junto con la

informacion local almacenada en Q y eliminado el Store actual, dejando solo los procesos

next y unless[Val03].

36

Page 60: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Es importante mencionar como NTCC, al igual que TCC, introduce la programacion

reactiva-temporal [Val03]. El ambiente estimula a un proceso Pi dandole una entrada

ci. El proceso P reacciona en una cantidad de tiempo finita al ambiente dandole una

salida c′i y evolucionando al proceso Pi+1. Cada respuesta a estos estımulos definen una

unidad de tiempo. Los observadores externos al proceso no observan las transiciones

internas, solamente las entradas y salidas definidas.

2.4. Definiciones Recursivas

Resulta conveniente especificar determinados comportamientos mediante la recursion.

Por este motivo, se describira la forma de codificarla en NTCC. NTCC define la recur-

sion de la siguiente forma [Val03].

q(x) =def Pq

Donde q es el nombre de un proceso y Pq su cuerpo, que puede tener como maximo una

ocurrencia de q, y antepuesta al operador next; lo anterior es para forzar que se tenga

una respuesta de q(x) en cada unidad de tiempo, pues no se quiere que Pq haga infinitos

llamados recursivos a q en la misma unidad de tiempo. Para tratar los llamados q(t),

se considera a t como una variable con un valor v (el Store puede deducir que t = v),

obteniendose Pq[v/x], donde la operacion [v/x] denota el remplazo de toda ocurrencia

de x por v.

En NTCC se debe evitar que las variables que ocurren libres en Pq sean capturadas por

el alcance de las variables locales. Se hace necesario entonces utilizar el alcance estatico,

con la siguiente notacion:

q(x)[y1, ....., yn] =def Pq

Donde y1, ....., yn son las variables que pueden ocurrir libres en P .

Se expondra el siguiente ejemplo para aclarar la diferencia entre alcance estatico y

dinamico [Val03].

Ejemplo 2.4 Sea q(x) =def tell(y = 1)||next(localy)(q(x)||when y do P )

37

Page 61: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Si se considera alcance dinamico, en el momento que se ejecute el llamado recursivo

((localy)(q(x)||when y do P )) se asumira que el proceso tell(y = 1) hace referencia a la

variable local y, lo cual no es cierto porque tell(y = 1) utiliza una variable global. Si se

desea obtener la independencia de variables entre el proceso tell(y = 1) y el when y do P ,

es necesario utilizar alcance estatico, mencionando las variables que pueden ocurrir

libres en q(x).

2.4.1. Codificacion

A continuacion se presenta la codificacion para modelar recursion en NTCC.

Un proceso q(t) que representa el primer llamado recursivo, se define de la siguiente

forma:

(local q qarg)(pq(x) =def Pqq || q(t))

donde:

El proceso recursivo pq(x) =def Pqq es:

!(when call(q) do (local x)(x← qarg || Pq))

siendo:

- call q(t) la abreviacion de x = 1.

- x← t la abreviacion de Σv when t = v do !tell(x = v)

q(t): tell(call(q)) || tell(qarg = t)

q y qarg dos variables no libres en Pq

Se utilizan las variables locales q y qarg, para abolir posibles interferencias entre los

llamados recursivos externos.

38

Page 62: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

2.5. Celdas

Las celdas proveen herramientas para el analisis y especificacion de estructuras de datos

persistentes y variables, por lo cual es importante modelarlas en el calculo NTCC.

Para el modelamiento de las celdas se debe asumir que el sistema de restricciones cuenta

con un predicado que pueda expresar el estado de cambio de una variable; este predicado

sera change.

Definicion 2.5.“ Se define una celda x : (v) como una estructura x cuyo valor actual

es v y que puede mantenerse o cambiar en el futuro” [Val03]. Una celda x : (v) tiene la

forma:

x : (z) =def tell(x = z) ||unless change(x) next x : (z)

La anterior definicion representa una celda x, cuyo valor actual es z y, a menos que se

decida cambiar este valor, (tell chage(x) = 1) x, tomara el mismo valor z en el proximo

instante.

Ademas de la definicion de la celda existe otro operador utilizado. Se trata del operador

exchg[x, y], llamado operador de intercambio ( exchage). Se utiliza para asignar nuevos

valores sobre las celdas. Sea exchg[x, y], v el valor actual de x y y otra celda y g(v) la

funcion que calcula el siguiente valor de x. Se tiene:

exchg[x, y] = Σv when x = v do ( tell(change(x)) || tell(change(y))

||next(x : (g(v)) || y : (v)))

El uso del operador exchg[x, y] podra ser apreciado en la siguiente seccion de Aplica-

ciones y Ejemplos.

2.6. Aplicaciones y Ejemplos

Se ha mencionado anteriormente que por las propiedades reactivas-temporales, el no-

determinismo y la asincronıa que modela NTCC, existe un gran numero de aplicaciones

en las que se pueden demostrar la expresividad de este calculo, tales como: la progra-

macion de dispositivos roboticos, la sincronizacion de procesos musicales y los sistemas

39

Page 63: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

multiagentes. En esta seccion se mostraran algunos ejemplos, enfatizando la aplicacion

principal de este trabajo de tesis: Programacion Concurrente de controladores RCX en

dispositivos LEGO. Los ejemplos expuestos aquı son tomados de [Val03].

2.6.1. Controladores RCX: Ejemplo de Zig-Zag

“Un RCX es un dispositivo programable fabricado por LEGO, con el cual se pueden

crear diferentes clases de robots autonomos [LP99]. La tarea de zig-zag [Fre99] consiste

en que el robot-RCX se mueva aleatoriamente de izquierda a derecha con las siguientes

condiciones: 1. el robot no puede ir hacia adelante si su ultima accion fue ir adelante.

2. no puede girar a la derecha si su penultima accion fue ir a la derecha, 3. la segunda

condicion aplicada a la izquierda”[Val03].

La solucion que se plantea evita la sobre-especificacion, planteando solo los aspectos que

conciernen a la descripcion de la solucion. Se usaran dos celdas a1 y a2 para tener una

referencia de los dos ultimos movimientos que ha hecho el RCX. Ademas, se definiran

las constantes f, r, l ∈ D − 0 para denotar los predicados f=adelante(forward),

r=derecha(right), l=izquierda (left). La solucion es la siguiente:

goF =def exchf [a1, a2] || tell(forward)goR =def exchr[a1, a2] || tell(right)goL =def exchl[a1, a2] || tell(left)

Zigzag =def !(when (a1 6= f) doGoF+ when (a2 6= r) doGoR+ when (a2 6= l) doGoL)

GoZigzag =def a1 : (0) || a2 : (0) ||Zigzag

Inicialmente las celdas a1 y a2 contendran valores diferentes de f , r y l, lo cual hace

que se escoja no-deterministicamente la direccion de arranque; despues el RCX se di-

rigira por las condiciones 1, 2 y 3, grabando en a1 y a2 los movimientos anteriores. A

continuacion se da un ejemplo de la funcion exch[a1, a2]:

exchf [a1, a2] =def

∑v∈f,r,l,0 when a1 = v do

( tell(change(a1)) || tell(change(a2)) ||next( a1 : (f) || a2 : (v)))

Las demas operaciones exch[a1, a2] (exchr[a1, a2] y exchl[a1, a2]) son similares a la de-

finicion anterior.

40

Page 64: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

2.6.2. Sistemas Multiagentes: Presa y Predador

“El juego Presa y Predador [MBD86] es muy famoso debido a que sus multiples analisis

desde diferentes puntos de vista [HS96], permiten representar entornos multi-agentes

[SV00]. Este ejemplo puede ser modelado con multiples robots-RCX.”

El juego consiste en que los predadores y la presa se mueven en un tablero toroidal; si

llegan al final de este, salen por el otro lado del mismo. La presa y el predador se pueden

mover horizontal o verticalmente, en cualquier direccion. Los predadores tendran cierta

ventaja sobre su presa, ya que corren dos casillas del tablero mientras que la presa solo

puede correr una.

El objetivo del predador es capturar a la presa; esto ocurre cuando la presa se mueve

a una posicion entre las tres casillas que el predador puede atacar: la casilla donde se

encuentra actualmente el predador, la anterior a donde se encontraba o la casilla de la

mitad.

El juego comienza con la presa ubicada al frente de los predadores y estos posicionados

en la misma fila. El comportamiento que debe adoptar la presa para poder escapar

es ejecutar un zigzag no predecible sobre el mundo, mientras que la estrategia de los

predadores es cooperar entre ellos para capturar a la presa. De tal manera que, cuando

un predador se encuentre frente a la presa, se declarara como lıder del ataque y los

otros predadores seran sus cooperadores en la captura de la presa. Como consecuencia,

la posicion de lıder se alterna dependiendo de quien este mas cerca de la presa.

2.6.3. Aplicaciones Musicales: Control de Improvisacion

Un ejemplo de las aplicaciones musicales que tiene el calculo NTCC es el control de

improvisacion. Este consiste en tener un conjunto de musicos m, que tocaran un numero

fijo de notas (en este caso se tomara 3). Cada musico puede escoger que notas tocar,

pero se le establece un tiempo que puede utilizar entre las notas del bloque. Ejemplo:

sea la partitura del musico 1 [5,6,2], esto quiere decir que entre la primera y la segunda

nota tiene un espacio de 5 silencios para improvisar, entre la segunda y tercera 6 y

despues de la tercera 2. Cuando el musico termine su interpretacion de las tres notas

correspondientes, debe esperar a la senal del conductor que le dice que todos los musicos

ya han terminado de tocar su bloque y el puede volver a empezar. El tiempo entre los

41

Page 65: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

bloques consecutivos de cada musico no esta determinado, pero hay la restriccion de

que no debe demorarse mas que la suma de todos los tiempos de las partituras de los

otros musicos.

Los dos anteriores ejemplos se profundizan en [Val03], PHD Tesis de Frank d. Valencia.

42

Page 66: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

3 LMAN: MAQUINAABSTRACTA

Este capıtulo describe el Analisis y la Especificacion formal de la Maquina Abstracta

LMAN . Se presenta la evaluacion de alternativas sobre la implementacion, seguida de

la especificacion de la maquina abstracta: notacion, sintaxis de los procesos, las reglas de

reduccion que describen su funcionamiento y constituyen su nucleo, los estados inicial

y final, finalizando con un diagrama de transiciones que resume su funcionamiento.

3.1. Analisis

A continuacion se muestran las consideraciones que se tomaron en la etapa del analisis

de este trabajo de tesis, las cuales fueron determinantes para las siguientes etapas de

diseno e implementacion.

3.1.1. Entorno de Programacion NTCC

LMAN , hace parte de un flujo de implementacion que tiene como objetivo proveer

un entorno de programacion aplicativa. Este entorno de programacion NTCC [Val03]

se divide en 5 bloques funcionales(ver figura 3.1). El bloque superior VIN se encuentra

en desarrollo como proyecto de grado independiente al presente[FQ04] y su objetivo

es elevar el nivel de programacion en el calculo, programando en un lenguaje iconico.

El siguiente modulo es el COMPILADOR NTCC-LMAN que ademas de que actua

como un componente integrador entre el lenguaje visual y LMAN, permite programar

NTCC en alto nivel; su diseno se trata en el capıtulo 5. Los ultimos tres bloques hacen

referencia a LMAN y la base que la soporta; estos bloques funcionales se tratan en el

43

Page 67: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

siguiente capıtulo que describe la maquina virtual. El H8/300L es el microprocesador

del RCX brick y legOS es el sistema operativo que LMAN utiliza como interfaz con

este microprocesador. La integracion del lenguaje visual, el compilador y LMAN se hace

posible, dado que los tres utilizan el calculo NTCC base; de esta manera, el lenguaje

visual genera codigo NTCC, que el compilador entiende como entrada para la generacion

de codigo de bytes LMAN.

Figura 3.1: Flujo del entrono de programacion NTCC

3.1.2. Evaluacion de Alternativas de Implementacion para laMaquina Abstracta

En el desarrollo de LMAN, maquina que implementa el calculo NTCC [Val03] para

programacion de dispositivos roboticos LEGO se presentaron varias alternativas para

su implementacion. Por esta razon, se hizo conveniente establecer una analisis de al-

ternativas que permitiera decidir de manera objetiva, cual era la opcion optima. Los

criterios que se consideraron pertinentes para evaluar cada alternativa se describen a

continuacion:

Eficiencia en Tiempo de Ejecucion: Trata el factor del tiempo en la ejecucion

de un programa sobre la implementacion de la maquina.

Manejo Sistema de Restricciones: Trata la integracion e interaccion entre la

maquina y el sistema de restricciones.

Eficiencia en el Manejo de Memoria: Trata el manejo de memoria eficiente

sobre la implementacion de la maquina.

44

Page 68: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

El modo de calificacion de cada indicador, fue dado cuantitativamente en modo ascen-

dente, siendo 1 la opcion mas desfavorable y 10 la mas conveniente.

El cuadro 3.1, muestra la evaluacion de alternativas, posteriormente se sustenta la

puntuacion asignada para cada una de las opciones en los criterios evaluados.

Criterios/Indicadores Traductor Maquina Virtual

Eficiencia Tiempo de Ejecucion 10 8Manejo de Sistema de Restricciones 8 10

Eficiencia Manejo de Memoria 6 8Total 21 25

Cuadro 3.1: Evaluacion de Alternativas de Implementacion para la Maquina Abstracta

Las alternativas propuestas y su analisis de criterios sigue a continuacion. Los argumen-

tos dados toman como referencia otras implementaciones similares a las alternativas en

analisis.[LY97][Leg00].

Descripcion:

• Traductor : Un traductor [AB98] como su nombre lo indica, se encarga de

traducir un programa durante la etapa de compilacion, de un lenguaje de

alto nivel a uno equivalente en un lenguaje que pueda ejecutar el computador

o el dispositivo robotico.

• Maquina Virtual : La maquina virtual [Com00] es un procesador no imple-

mentado en Hardware, que actua como el ejecutor notacional de un lenguaje

de programacion particular.

Eficiencia en Tiempo de Ejecucion:

• Traductor : Debido a que la traduccion se realiza en tiempo de compilacion,

el programa sera ejecutado directamente por el dispositivo robotico; luego el

tiempo en ejecucion serıa optimo. Valoracion: 10.

• Maquina Virtual : La maquina virtual interpreta el programa en tiempo de

ejecucion, luego comparando con un traductor su desempeno no serıa el

mejor. Valoracion: 8.

Manejo Sistema de Restricciones:

45

Page 69: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

• Traductor : Debido a que el traductor actua en tiempo de compilacion, su

integracion con el modulo del sistema de restricciones se harıa extensa; ya

que serıa necesario unir ambos bloques de codigo para asegurar un funcio-

namiento en conjunto. Valoracion: 8.

• Maquina Virtual : La implementacion de una maquina virtual confiere modu-

laridad, lo cual combinado con su caracterıstica de interpretacion del progra-

ma en tiempo de ejecucion; posibilita la adicion del sistema de restricciones

como un modulo funcional, definiendo solamente una interfaz que le permita

interactuar con el control de la maquina. Valoracion: 10.

Eficiencia en el Manejo de Memoria:

• Traductor : Un traductor combinarıa en tiempo de ejecucion el bloque de

control que implementa la semantica operacional del calculo, con el codigo

del programa a ejecutar. Esto generarıa que los programas traducidos fuesen

de mayor tamano en memoria y que posiblemente requirieran de mayores

recursos mientras se realiza la traduccion. Valoracion: 6.

• Maquina Virtual : La maquina virtual interpreta los programas en tiempo de

ejecucion; por lo cual se separa el control de las construcciones hechas en el

calculo. Esto permitirıa un manejo mas eficiente de memoria, ya que solo se

consumirıan los recursos de ejecucion. Valoracion: 8.

Como conclusion de las valoraciones dadas, la alternativa que se escoge para imple-

mentacion es una maquina virtual . Una maquina virtual confiere modularidad a la

implementacion, eficiencia en el manejo de memoria, adminte la integracion de una

manera transparente del sistema de restricciones y el fundamento sobre la base formal

de una maquina abstracta.

3.1.3. Evaluacion de Alternativas de la plataforma de imple-mentacion para la Maquina Virtual

Para implementar una maquina virtual sobre un dispositivo robotico LEGO, existen

varias alternativas de plataformas de programacion; por este motivo se hace conveniente

establecer un analisis para decidir objetivamente cual es la alternativa optima. Los

criterios que se consideraron pertinentes para evaluar cada alternativa son los siguientes:

46

Page 70: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Eficiencia: Evalua el tiempo de ejecucion, la gestion de memoria y el manejo del

microprocesador.

Escalabilidad y Mantenimiento: Evalua las ventajas de la plataforma: faci-

lidad de instalacion, lenguajes admitidos, transparencia en las actualizaciones,

manejo de perifericos del robot.

Restricciones Legales: Evalua el tipo de restricciones que existen en la adqui-

sicion y utilizacion de la plataforma.

Compatibilidad: Evalua la portabilidad y el nivel de acceso por el usuario final

a la plataforma.

El modo de calificacion de cada indicador, fue dado cuantitativamente en modo ascen-

dente, siendo 1 la opcion mas desfavorable y 10 la mas conveniente.

El cuadro 3.2, muestra la evaluacion de alternativas, posteriormente se sustenta la

puntuacion asignada para cada una de las opciones en los criterios evaluados.

Criterios/Indicadores LEJOS BrickOS Maquina NQC(java) (legOS) Estandar de

(c++ y c) LEGO

Eficiencia 5 8 10 9Escalabilidad y Mantenimiento 10 10 1 6

Restricciones Legales 10 10 10 10Compatibilidad 7 8 7 8

Total 32 36 28 33

Cuadro 3.2: Evaluacion de alternativas de la plataforma de implementacion para laMaquina Virtual

Las alternativas propuestas y su analisis de criterios sigue a continuacion. Los argu-

mentos dados toman como referencia la documentacion y pruebas realizadas sobre las

alternativas en analisis.[LY97][Leg00].

Descripcion:

• LEJOS : Implementacion de la maquina virtual de JAVA para los robots

LEGO. Permite el manejo de todos los perifericos del RCX, el control total de

47

Page 71: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

los 32Kb de RAM y la programacion orientada a objetos en JAVA. El driver

de la torre LEGO USB se encuentra bajo desarrollo (para Linux solamente).

Funciona sobre Linux y Windows. [SR00].

• BrickOS : Sistema operativo de codigo abierto para robots LEGO, antes lla-

mado legOS. Permite programar en lenguajes C y C++ el RCX brick, admite

el manejo de todos los perifericos del RCX ,el control total de los 32Kb de

RAM y la programacion orientada a objetos. El driver de la torre LEGO

USB se encuentra bajo desarrollo (para Linux solamente); el driver de la

torre serial ha sido desarrollado y probado en Linux. Funciona sobre Linux,

Windows y MacOS. [MLNP00].

• Maquina estandar de LEGO : El RCX tiene un firmware original en forma de

maquina virtual para su control. Permite el manejo de todos los perifericos y

la programacion se realıza por medio de una interfase visual basica llamada

RIS (Robotic Invention System) SDK que funciona solo en Windows y Mac.

Esta maquina admite un numero de variables globales de 32 y locales de 16,

un numero maximo de programas en memoria de 5, cada uno con maximo

10 tareas y 8 subrutinas. Tiene soporte USB y serial. [Leg00].

• NQC(Not Quite C): Es un compilador de codigo de bytes nativo,que utiliza

la maquina estandar de LEGO en su funcionamiento. Toma los programas

escritos con una sintaxis basica muy similar al lenguaje C, de ahı su nombre; y

los traduce al codigo de bytes que entiende la maquina virtual estandar. Tiene

limitaciones en el manejo de variables (32),no se pueden definir estructuras

de datos,las subrutinas no pueden retornar valores y no admiten parametros.

Funciona en Windows, Linux y MacOS.[Bau00].

Eficiencia:

• LEJOS : La maquina virtual de JAVA es interpretada y maneja objetos, ra-

zones que pueden generar mas consumo de memoria y extender el tiempo de

ejecucion de los programas sobre el robot LEGO, tal como se ha observa-

do en otras implementaciones de maquinas virtuales en JAVA ejecutandose

sobre estaciones de trabajo [AB98]. Valoracion: 5.

• BrickOS : Se ha demostrado que la programacion C y C++ resulta eficiente,

adicionalmente admite una programacion estructurada y orientada a objetos

que confiere modularidad a las implementaciones. Lo anterior, en conjunto

48

Page 72: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

con las habilidades de BrickOS para el control del hardware de robot, per-

miten lograr una buena combinacion en eficiencia. Valoracion: 8.

• Maquina estandar de LEGO : la programacion directamente en el codigo de

bytes asegura un buen desempeno, ya que se estarıa tratando directamente

con las instrucciones nativas del microprocesador del RCX. Valoracion: 10.

• NQC : Aunque la sintaxis de NQC es basica, su propiedad de compilar al

codigo de bytes la hace eficiente en tiempo de ejecucion. No obstante el

manejo de memoria no resulta tan eficiente, debido a las limitaciones del

lenguaje. Valoracion: 9.

Escalabilidad y Mantenimiento:

• LEJOS : La implementacion de una maquina virtual confiere modularidad,

como se ha mencionado antes; esto hace de LeJOS un sistema administrable.

La programacion en lenguaje JAVA posibilita realizar construcciones com-

pletas y complejas. La programacion de los perifericos del RCX se realiza

mediante librerıas, ademas de que es posible utilizar las librerıas estandar.

Las actualizaciones son transparentes, ya que solo se requiere actualizar a

una nueva version de la maquina virtual, de modo que los programas siguen

ejecutandose sin modificaciones de fondo. Valoracion: 10.

• BrickOS : Es un sistema operativo que continuamente esta actualizandose

en versiones. El uso del lenguaje C como herramienta de programacion, le

confiere eficiencia a las construcciones en cuanto al control del hardware del

robot y la programacion convencional.Aunque la instalacion es un poco dis-

pendiosa, existen muchas ayudas para completarla. Es una de las plataformas

mas robustas y mas usadas para programacion de robots LEGO. Valoracion:

10.

• Maquina estandar de LEGO : Las actualizaciones son realizadas eventual-

mente y entregadas directamente por LEGO Group. Para programar utili-

zando esta maquina virtual se requiere un largo estudio de su arquitectura,

las instrucciones y de la generacion del codigo de bytes. Valoracion: 1.

• NQC : Al actuar como una interfaz de alto nivel con la maquina virtual

de LEGO, la programacion resulta mucho mas manejable que el lenguaje

ensamblador de la maquina virtual. Sin embargo, las construcciones hechas

49

Page 73: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

en NQC, conllevan las limitaciones de su sintaxis; lo cual se convertirıa en

un factor limitante para la implementacion. Valoracion: 4.

Restricciones Legales:

• Tanto LEJOS como BrickOS y NQC se han trabajado como proyectos

GNU/Linux. El firmware estandar de LEGO es propiedad de Lego Group,

sin embargo su uso no esta limitado. Valoracion: 10.

Compatibilidad:

• LEJOS : Es multiplataforma (Linux, Windows, MacOS entre otros). Su ins-

talacion puede resultar compleja. Valoracion: 7.

• BrickOS : Es multiplataforma (Linux, Windows, entre otros) y adicional-

mente es compatible con otras soluciones para programacion de RCX como

se describe los cuadros 4.2 y 4.3. Su instalacion puede resultar compleja.

Valoracion: 8.

• Maquina estandar de LEGO : Es multiplataforma. Valoracion: 7.

• NQC : Es multiplataforma (Linux, Windows, Mac, entre otros), su instalacion

es relativamente sencilla. Valoracion: 8.

Teniendo en cuenta el total para las valoraciones asignadas a las diferentes alternati-

vas de implementacion; la alternativa seleccionada para implementacion de la maquina

virtual es el Sistema operativo BrickOS(legOS) y el lenguaje de programa-

cion C . Esta plataforma es realmente estable, funciona como proyecto alrededor de

una comunidad GNU por lo cual facilita la busqueda de informacion y ayuda en las

tareas de configuracion, acople y desarrollo; es multiplataforma de modo que confiere

portabilidad a la solucion de la maquina virtual y permite controlar eficientemente el

hardware de los robots. El uso del lenguaje de programacion C confiere eficiencia a

la implementacion, admite programacion estructurada y cuenta con la funcionalidad

necesaria para realizar la implementacion de la maquina virtual.

3.2. Maquina Abstracta

A continuacion se define la maquina abstracta del calculo NTCC [Val03] para progra-

macion concurrente de robots LEGO. Se presenta la especificacion formal, la sintaxis, la

50

Page 74: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

definicion de estados inicial y final, las reglas de reduccion y el diagrama de transiciones

que muestra el funcionamiento de la maquina abstracta.

3.2.1. Especificacion formal

La Maquina Abstracta LMAN se define formalmente como sigue a continuacion:

3.2.1.1. Procesos

Un proceso en LMAN esta conformado por una tupla < P,B > donde P es un proceso

y B es una funcion que contiene todas las variables que puede alcanzar el proceso, siendo

B el ambiente, o asociacion de localidades a variables: B : LOC− > V AR.

3.2.1.2. Store

El Store(S) se define como una conjuncion de todas las restricciones iniciales mas las

adicionadas al Store en el instante actual.

S : c1 ∧ c2 ∧ c2 ∧ ................. ∧ cn

3.2.1.3. Colas de ejecucion

Las colas representan procesos concurrentes de la forma:

P1||P2||P3||.......||Pn

Se define una cola C como una concatenacion de procesos de la forma < P,B >:

C : < P1, B1 > || < P2, B2 > || < P3, B3 > ||.......|| < Pn, Bn >

La representacion de una cola vacıa es ∅.

La notacion C ::< P, B > representa una cola cuyo primer elemento es < P, B > y

cuyo residuo de elementos es la cola C.

51

Page 75: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

3.2.1.4. Estructura de LMAN

La estructura de la maquina esta dada por:

<<< P,B >, CL, CA, CU >, CC, S >

Donde:

P : es el proceso en ejecucion.

B: es el conjunto de variables asociadas al proceso P.

CL: Es la cola de procesos listos a ejecutar.

CA: Es la cola de procesos ask suspendidos por falta de informacion en el Store.

CU : Es la cola de procesos unless.

CC: Es la cola de construccion, donde se almacenan los procesos residuales del

instante actual, que seran ejecutados en el siguiente o siguientes instantes de

tiempo.

S: Es el Store comun, donde se almacenan las restricciones asociadas al instante

en ejecucion.

La tupla mas a la izquierda (< P ; B >) define un proceso en la maquina; la siguiente

estructura (<< P ; B >; Cl; CA; CU >) define la maquina que se esta ejecutando en

el instante actual y la tupla mas a la derecha (<<< P ; B >; Cl; CA; CU >; CC; S >)

define la estructura utilizada para construir la maquina en el siguiente instante. El Store

se trata como una estructura global a la definicion de la maquina.

En LMAN se maneja la nocion de “planeacion de maquinas”. Esta nocion implica

que se construye una sola maquina por instante de tiempo; es decir que al final de cada

instante se destruye tanto la maquina actual como el Store. La maquina para el proximo

instante se construye a partir de la cola CC, donde se encuentran todos los procesos

residuales de la actual unidad de tiempo.

52

Page 76: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

3.2.2. Sintaxis

Los procesos que implementa la maquina son esencialmente los expresados en la sintaxis

de NTCC. La unica diferencia esta realmente en el proceso de ejecucion eventual (∗P ),

que se delimita por eficiencia en la implementacion en un rango dado. La maquina

considera solamente procesos primitivos del calculo (la excepcion es nextn P ), pero no

las construcciones derivadas que se mencionan en [Val03](pagina 31). El cuadro 3.3

muestra la sintaxis de los procesos validos en LMAN .

P, Q, ... = skip Inactividad|tell(c) tell c

|∑

i∈I when (ci) doPi Seleccione un Pi, si ci, i ∈ I|P ||Q Ejecucion en paralelo

|Local x in P Localidad|next P Ejecute P en la siguiente unidad de tiempo|nextn P Ejecute P en la n−−esimaunidad de tiempo

|unless (c) next P A menos que deduzca c, ejecute next P|!P Replicacion

| ? [i, j]P Retardo infinito pero no limitado de P

Cuadro 3.3: Sintaxis de LMAN

Donde: c, d, ... denotan las restricciones. P, Q,A, ... representan los procesos del calculo.

x, y, .. se utilizan para hacer referencia a las variables de los procesos.

El proceso nextn P representa una abreviacion del proceso (next(next(...(nextP )...))),

con n ocurrencias de next.

El proceso ?[i, j]P modela eventualidad limitada en un intervalo entre i y j, donde j

es mayor que i, de modo que, P se ejecuta en una unidad de tiempo eventual en este

intervalo.

La equivalencia los anteriores dos procesos con los procesos primitivos se encuentra en

[Val03].

3.2.3. Estado inicial y Final

El estado inicial de la maquina esta dado por la siguiente configuracion:

53

Page 77: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

<<< skip, B >, CL, ∅, ∅ >, ∅, S >

Donde:

S es el Store inicial, B contiene todas las variables globales de la maquina y

CL contiene todos los procesos a ejecutar. Las variables globales son visibles y

modificables por todos los procesos de la maquina actual.

El calculo NTCC modela sistemas reactivos, los cuales pueden permanecer inac-

tivos por grandes periodos de tiempo y luego pueden volver a activarse. Ası si-

guiendo esta nocion, no se define un estado final para la maquina. Solo detiene su

computacion a menos que exista un fallo funcional o un bloqueo por inconsisten-

cias en el Store.

3.2.4. Semantica Operacional: Reglas de Reduccion

Las reglas de reduccion de la maquina estan basadas en la semantica operacional del

calculo NTCC; apoyandose en la siguiente definicion de ESTADO y la relacion →:

ESTADO : P x B x CL x CAx CU x CC x S

→:⊆ ESTADO x ESTADO

La regla SCHED se encarga de la planeacion de los procesos que se encuentran en la

maquina. Se divide en tres casos. El primer caso es cuando un proceso llega a su final

(skip), por lo cual se continua con el siguiente en la cola CL. El segundo caso es cuando

la cola CL se encuentra vacıa; entonces se procede a ejecutar los procesos de la cola CU .

La tercera regla determina el paso a la siguiente unidad de tiempo y la construccion de

una nueva maquina; esto sucede solo si las colas CL y CU se encuentran vacıas; lo que

quiere decir, que no hay procesos que se puedan reducir. Adicionalmente, se destruye

el Store anterior(S) y se crea el nuevo Store(S ′) el cual contiene solamente el estado

inicial del ambiente.

SCHED1 :

<<< skip, B >,CL ::< P, B′ >,CA, CU >, CC, S >→<<< P,B′ >,CL,CA,CU >,CC, S >

54

Page 78: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

SCHED2 :

<<< skip, B >, ∅, CA,CU ::< P, B′ >>, CC, S >→<<< P,B′ >, ∅, CA,CU >,CC, S >

SCHED3 :

<<< skip, B >, ∅, CA, ∅ >,CC, S >→<<< skip, B′ >,CC, ∅, ∅ >, ∅, S′ >

La regla TELL necesita del sistema de restricciones para agregar la restriccion c al

Store, en la unidad de tiempo actual.

TELL :

<<< tell(c), B >,CL,CA, CU >, CC, S >→<<< skip, B >,CL, CA,CU > CC, S ∧ c >

La regla ASK presenta los siguientes cuatro casos. El primer caso (ASK1), es para

la informacion positiva; esto quiere decir, que el ask da una respuesta afirmativa de

acuerdo con la restriccion c. El segundo caso (ASK2,1), sucede cuando el Store deduce

lo contrario de uno de los ask de la sumatoria que le ha sido preguntado (¬c ), entonces

elimina ese proceso particular de la sumatoria. El tercer caso (ASK2,2) es cuando

no hay mas procesos ask en la sumatoria, entonces se elimina el proceso∑

de la

cola CL. Y finalmente, el cuarto caso (ASK3), se presenta cuando el Store no puede

deducir ninguna de las opciones anteriores por ausencia de informacion, por lo tanto,

se suspende el procesos∑

en la cola CA.

ASK1 :

S |= cj ∧ j ∈ K

<<<∑

k∈K ask ck do Pk, B >,CL,CA, CU >, CC, S >→<<< Pj , B >,CL,CA, CU >, CC, S >

ASK2,1 :

S|=¬cj∧j∈K

<<<∑

k∈K ask ck do Pk,B>,CL,CA,CU>,CC,S>→<<<∑

k∈K−{j} ask ck do Pk,B>,CL,CA,CU>,CC,S>

ASK2,2 :

K = ∅<<<

∑j∈K ask ck do Pk, B >,CL,CA, CU >, CC, S >→<<< skip, B >,CL, CA,CU >,CC, S >

55

Page 79: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

ASK3 :

K 6=∅∧¬∃j∈k.(S|=cj∨S|=¬cj)

<<<∑

k∈K ask ck do Pk,B>,CL,CA,CU>,CC,S>→<<<skip,B>,CL,<∑

k∈K ask ck do Pk,B>::CA,CU>,CC,S>

La regla UNLESS presenta tres casos. El primer caso es cuando hay todavıa procesos

en la cola CL, por lo cual se pospone la ejecucion del proceso unless adicionandolo a

la cola CU . El segundo activa el unless solo si, CL se encuentra vacıa y la guarda no se

deduce. Finalmente, el tercer caso considera la no activacion del proceso unless debido

a que se cumple la guarda(c).

UNLESS1 :

CL6={}<<<unless c do next P,B>,CL,CA,CU>,CC,S>→<<<skip,B>,CL,CA,<unless c do next P,B>::CU>,CC,S>

UNLESS2 :

S 2 c

<<< unless c do next P >, B, ∅, CA,CU >,CC, S >→<<< next P,B >, ∅, CA,CU >,CC, S >

UNLESS3 :

S |= c

<<< unless c do next P,B >, ∅, CA,CU >,CC, S >→<<< skip, B >, ∅, CA,CU >,CC, S >

La regla LOC permite crear variables locales al proceso P , de modo que la nueva

variable solamente pueda ser vista por P ; para esto se selecciona una nueva etiqueta L

del universo de posibles etiquetas Uloc que haya sido utilizada en el rango de localidades

(ran(B)).

LOC :

L ∈ Uloc − ran(B)<<< local x in P, B >,CL,CA,CU >, CC, S >→<<< P,B + (L←|x) >,CL,CA,CU >, CC, S >

La regla NEXT1 ejecuta el proceso en el siguiente instante de tiempo, por lo cual se

adiciona a la cola CC.

NEXT1 :

<<< next P,B >,CL,CA, CU >, CC, S >→<<< skip, B >,CL, CA,CU >,< P, B >:: CC,S >

56

Page 80: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

La segunda regla de NEXT2 sirve para manejar la abreviacion de nextn, que se denota

(next(next......(nextP ))), n veces.

NEXT2 :

n > 1<<< nextn P,B >, CL,CA, CU >, CC, S >→<<< skip, B >,CL, CA,CU >,< nextn−1 P,B >:: CC,S >

La regla PAR ejecuta Q y adiciona P a la cola CL para su futura ejecucion.

PAR :

<<< (P |Q), B >,CL,CA, CU >, CC, S >→<<< Q,B >, < P,B >:: CL,CA, CU >, CC, S >

La regla REP ejecuta el proceso P y crea una “copia” que es adicionada a la cola CC

para ejecucion en los siguientes instantes.

REP :

<<<!P,B >, CL,CA, CU >, CC, S >→<<< P,B >, CL,CA, CU >, <!P,B >:: CC,S >

Por ultimo la regla STAR permite modelar una espera aleatoria finita de un evento,

escogiendo una unidad de tiempo entre i y j para activar P .

STAR :

n ∈ i..j

<<< ?[i, j]P,B >, CL,CA, CU >, CC, S >→<<< skip, B >,CL, CA,CU >,< nextnP,B >:: CC,S >

Las siguientes propiedades pretenden expresar la relacion entre la definicion formal de

la maquina abstracta y el calculo NTCC:

3.2.4.1. Conjetura 1: Correctitud de Transiciones No Observables

Sea P un proceso NTCC y d un Store. Entonces en NTCC

< P, d >→∗< Q, d′ >

si y solo si

<< skip, ∅, << P, var(P ) >, ∅, ∅ >, ∅, d >→∗<< skip,B,<< Q,B′ >>, CA, CU >,CC, d′ >

57

Page 81: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

3.2.4.2. Conjetura 2: Correctitud de Transiciones Observables

Sean R y P procesos de NTCC. Entonces:

P ⇒(c,d) R

si y solo si

<< skip, ∅, << P, var(P ) >, ∅, ∅ >, ∅, c >⇒(c,d)<< skip,B, ∅, CA, ∅ >,<< R, B′ >>, d′ >

Donde:

V ar(p) es la asociacion de localidades con las variables libres de P

⇒(c,d) representa en la maquina, la transicion por medio de multiples reducciones

entre el inicio de una unidad de tiempo con Store c y el final de la misma con

Store d.

Es importante mencionar que la regla expresada en la Conjetura 2, es quien define

el input-output behavior de la maquina con respecto a NTCC y el ambiente. El

proceso que comienza en la unidad de tiempo actual P se representa como el unico

proceso que contiene la cola de listos (CL), tal como se define en la regla SCHED1;

despues de presentar multiples transiciones no observables (Conjetura 1) llega a la

regla SCHED3, dando como resultado un Store final d, que contiene las instrucciones

para a ejecutar por el ambiente y el proceso residual R en la cola de construccion CC

para ejecucion en instantes posteriores. De esta manera, todos los instantes en la maqui-

na pueden ser modelados siguiendo el anterior comportamiento; lo cual resulta similar

al comportamiento que presenta NTCC en su definicion de input-output behavior

[Val03].

3.2.5. Diagrama de Transicion

En la figura 3.2, se muestra el diagrama de transicion de la maquina abstracta, el cual

se construye con base en las reglas de reduccion descritas anteriormente.

El comportamiento del diagrama de transicion es el siguiente:

1. Cuando el proceso en ejecucion llega a skip, se pasa el siguiente proceso de la cola

CL para ejecucion(regla SCHED1).

58

Page 82: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Figura 3.2: Diagrama de Transicion LMAN

2. Si se encuentra un proceso next P o nextn P en ejecucion se pasa a la cola

CC(regla NEXT1 y NEXT2).

3. Si el proceso en ejecucion es replicacion (!), se deja P y se pasa !P a CC(regla

REP ).

4. Cuando el proceso en ejecucion es when y no se puede resolver por falta de

informacion en el Store, se encola en CA(regla ASK3).

5. Cuando el proceso en ejecucion es un unless y la cola CL no esta vacıa, el proceso

se encola en CU(regla UNL1).

6. Si el proceso en ejecucion es un tell, los procesos suspendidos en CA se adicionan

a la cola CL(regla TELL).

7. Si la cola CL se encuentra vacıa, se pasan a ejecucion los procesos en CU(regla

SCHED2).

8. Cuando CL y CU se encuentren vacıas, se crea una nueva maquina y se transfiere

el contenido de CC a CL en la nueva maquina(regla SCHED3).

59

Page 83: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Se observa que el ciclo de transiciones esta determinado por las tres reglas SCHED,

que definen la forma en que se mueven los procesos en las colas: primero deben eje-

cutarse todos los procesos en la cola CL(SCHED1), luego los procesos en la cola

CU(SCHED2) y por ultimo cuando las dos colas anteriores se encuentran vacıas, se

construye a partir de los procesos residuales en CC(SCHED3), la nueva maquina para

el siguiente instante de tiempo.

60

Page 84: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

4 LMAN: MAQUINA VIRTUAL

En este capıtulo se describe la arquitectura e implementacion de la maquina virtual de

NTCC para programacion concurrente de robots LEGO. El objetivo principal es disenar

una maquina eficiente, modular y que provea la funcionalidad basica para programacion

concurrente, particularmente sobre robots LEGO. El modelo formal presentado en el

capıtulo anterior provee la especificacion para la maquina virtual.

Es importante notar, que en LMAN se modela ademas de la programacion concurrente,

la programacion temporal (al definir instantes de tiempo para ejecucion), y la pro-

gramacion por restricciones con el uso de un Sistema de Restricciones para gestionar

el almacenamiento de la informacion. Todos estos componentes han sido integrados en

LMAN, de modo que es posible aplicarlos para programar dispositivos roboticos LEGO.

A continuacion se presentan los aspectos de diseno e implementacion de la maquina

virtual.

4.1. Arquitectura General

La maquina virtual de LMAN consta de cuatro bloques funcionales: memoria de

programa, interfaz LEGO, interfaz STORE y controlLMAN , interactuando

tal como se muestra en la figura 4.1.

La memoria de programa guarda las instrucciones del programa en codigo de bytes

y es estatica, es decir, que no es modificable en tiempo de ejecucion. La interfaz

STORE es el modulo que permite interactuar con el Sistema de Restricciones asociado

a LMAN. Este bloque funcional crea el Store donde se almacenan las restricciones

durante el instante actual y luego lo destruye al final del mismo. La interfaz LEGO

es el bloque encargado de manejar el ambiente externo.

61

Page 85: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Figura 4.1: Bloques Funcionales de LMAN

ControlLMAN, actua como el cerebro ejecutor de la maquina virtual. Este bloque

es el encargado de planear maquinas y procesos, de ejecutar el programa almacenado

en la memoria de programa, de comunicarse con la Interfaz STORE por medio de

operaciones ask y tell, de comunicarse con la Interfaz LEGO para sensar el ambiente

y ejecutar instrucciones sobre el robot y, finalmente, es el encargado de construir el

siguiente instante, asegurando siempre continuidad en la ejecucion, a menos de que

exista un bloqueo en el Store.

Como se ha mencionado anteriormente, LMAN a diferencia de otras implementaciones

de maquinas para calculos de procesos [AB98, Lop99], introduce la nocion de Planeacion

de Maquinas. Esta nocion hace referencia a que solo debe existir una y solo una maquina

activa por instante de tiempo; esto se representa en la figura 4.1 como una lınea punteada

rodeando la maquina activa en el instante actual. De esta manera, aunque se define

una cola de maquinas al interior del control, siempre existira una y solo una maquina

activa por instante de tiempo. La Planeacion de Procesos en LMAN hace referencia al

62

Page 86: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

manejo de colas y registros que permiten ejecutar cada una de las instrucciones LMAN

equivalentes a un proceso en NTCC.

Para cada maquina en LMAN se definen tres registros y tres colas de procesos: PCN

es el registro contador de programa, PAN es el registro utilizado para construir arboles

sintacticos de restricciones y PAUX es el registro auxiliar. Respecto a las colas, CL

almacena los procesos listos para ejecucion, CA almacena los procesos ask suspendidos

y CU almacenan los procesos unless que se ejecutan solo al final de cada instante. La

cola CC se define externamente a la maquina activa, ya que almacena los procesos

residuales del instante actual, que pasaran a ejecucion en los siguientes instantes de

tiempo.

LMAN ha sido disenada en bloques funcionales de modo que se confiera modularidad

a la implementacion. El codigo ha sido escrito en C por eficiencia, y sigue la estructura

de un kernel de sistema operativo para efectividad en la ubicacion de los archivos re-

lacionados en la implementacion. Inicialmente, LMAN pretendıa ser ejecutada desde el

robot LEGO, siendo almacenada en los 10K o 14K de memoria RAM destinada para

el bloque del programa LEGO. Sin embargo, debido a que LMAN integra la implemen-

tacion de un Sistema de Restricciones parametrico inicialmente creado para el calculo

PiCO [CG01], el tamano de la implementacion excedio el tamano del espacio dispo-

nible. Por lo tanto, para suplir este inconveniente en la implementacion, se diseno un

ambiente de ejecucion particular para LMAN.

En este ambiente de ejecucion, LMAN y el Sistema de Restricciones asociado corren

sobre una estacion de trabajo, donde LMAN se comunica con el LEGO vıa protocolo

LNP(Lego Network Protocol). En el LEGO por su parte, se ejecuta un segundo com-

ponente de LMAN que realiza dos funciones: en primer lugar, se encarga de sensar el

ambiente del robot y enviarlo a la maquina y en segundo lugar, se encarga de recibir el

resultado de la computacion y de ejecutarlo sobre el robot LEGO, exhibiendo las tareas

programadas.

Cada uno de los componentes de la arquitectura de la maquina virtual anteriormente

mencionados y su funcionamiento, seran tratados en detalle en las siguientes secciones

de este capıtulo.

63

Page 87: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

4.1.1. Memoria de Programa

La memoria de programa es una memoria estatica, es decir que no es modificable en

tiempo de ejecucion. Su funcion es almacenar el codigo del programa expresado en

codigo de bytes, por lo cual se implementa como un arreglo en memoria fısica.

En el modelo de memoria de LMAN, no se utiliza una memoria dinamica o de traduccion

para el manejo de variables. Tomando ventaja de la definicion de recursion que confiere

el calculo NTCC, en donde la recursion es reemplazada por replicacion “ !”, por lo cual

cada llamado recursivo se extiende al siguiente instante de tiempo, y tambien buscando

eficiencia en el desempeno de la maquina; se delega la tarea del manejo de variables,

particularmente de la generacion de nuevas variables y sus alcances o ligaduras, al

compilador.

A continuacion se describen cada uno de los aspectos relacionados con la memoria del

programa y su implementacion.

4.1.1.1. Estructura de Datos

La estructura de datos que representa la memoria del programa en LMAN sigue a

continuacion:

#define MAX_ARCH 1500

//memoria del programa

char fp[MAX_ARCH];

4.1.1.2. Formato de Instrucciones

El cuadro 4.1 describe el formato de instrucciones utilizado en el codigo de bytes de

LMAN. Para fines de optimizacion se eligio un formato fijo de longitud 24 bytes, que

admite 64 instrucciones de maquina y direccionar maximo 8192 lıneas de codigo. Se

manejan ademas de un opcode, dos fuentes en la definicion de las instrucciones.

64

Page 88: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Opcode src1 src2

6 13 5

Cuadro 4.1: Formato de Instrucciones de LMAN

4.1.1.3. Conjunto de Instrucciones

La figura 4.2 describe el conjunto de instrucciones, opcode, src1 y src2 de LMAN. En el

cuadro 4.3 se encuentran las especificaciones dadas para los campos fuentes Src1 y Src2.

Observese que cada una de estas instrucciones corresponde a los procesos definidos en

la semantica de NTCC. El uso de las instrucciones de LMAN se trata en detalle en el

anexo A sobre Traduccion de procesos NTCC a codigo de bytes de LMAN.

4.1.2. Interfaz STORE

Con el fin de lograr que el Sistema de Restricciones asociado a LMAN se adicione pa-

rametricamente, las restricciones son definidas como formulas–de–primer–orden (fpo).

Una fpo es una expresion construida a partir de formulas atomicas combinadas con

conectores logicos not, and, or, y cuantificadores ∃, ∀; los atomos basicamente tienen la

construccion de ecuaciones o inecuaciones matematicas. Ejemplos: (x+y > 6)∧(z = 1),

x = 2 , entre otras.

Teniendo en cuenta la definicion anterior, cualquier Sistema de Restricciones que pueda

expresar sus restricciones como fpo, puede ser integrado a LMAN. En la actual imple-

mentacion ha sido acoplado el Sistema de Restricciones optimizado para el Lenguaje

CORDIAL[CG01] y la Maquina MAPICO [AB98]. LMAN usa la sintaxis que se muestra

en la figura 4.4 para la especificacion de fpo[McA92]; esta se toma de la definicion usada

por MAPICO[AB98] en su adicion del Sistema de Restricciones ya mencionado[CG01].

Este sistema de restricciones de dominios finitos[CG01] usado en LMAN, contiene el

sistema de restricciones aritmetico–modular propuesto para NTCC.∑

esta dado por

>, <, ≤, ≥ . +, −, ∗, /, =, <>. Es parametrico como ya se ha mencionado anterior-

mente; de modo que, utiliza fpo como entradas representadas en estructuras de arbol.

Se basa en el modelo de Bjorn Carlson [Car95], ası que utiliza la nocion de indexicals y

algoritmos de arco-consistencia en su implementacion. Por eficiencia, fue implementan-

do en lenguaje C, registrandose tiempos de ejecucion aceptables para diversos problemas

65

Page 89: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Figura 4.2: Conjunto de Instrucciones de LMAN

66

Page 90: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Figura 4.3: Especificacion de Fuentes Src1 y Src2

en el dominio de concurrencia.

Para el acople del sistema de restricciones con LMAN, se realizaron algunas modifica-

ciones. Estas se describen a continuacion:

Para asegurar equivalencia entre las estructuras para representar restricciones

usadas en el sistema de restricciones y en LMAN, se modifico la implementacion

de arboles con encadenamiento sencillo, por arboles con encadenamiento al padre.

El doble puntero se hizo necesario para asegurar consistencia en el arbol cuando

se construye la restriccion a partir del codigo de bytes de LMAN.

Al final de cada instante de tiempo, se hace necesario realizar una consulta al

Store (Browse) acerca de las variables de ambiente. El resultado de esta consulta

es enviando al LEGO para ejecucion. De esta manera, se adiciono al sistema de

restricciones una funcion que consulta el estado de las variables; particularmente

en LMAN se consultan solamente las variables del ambiente. Si la variable tiene

un valor fijo, se envıa ese valor; de lo contrario, si la variable tiene asociado un

rango, se realiza un seleccion aleatoria de un valor en el rango.

El valor de n para el sistema de restricciones se redefinio en 500 (aritmetica–

modulo 501). De esta manera, es posible asignar rangos de 0 a 500.

En el acople del sistema de Restricciones con LMAN, se implementaron arboles

binarios; es decir, que los predicados y funciones deben definirse de aridad 2. No

obstante, la sintaxis de formulas bien formadas usada para expresar restricciones

67

Page 91: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

en LMAN admite la definicion de aridad n, de manera que serıa posible extender

su uso.

Figura 4.4: Sintaxis para la especificacion de Formulas de Primer Orden en LMAN

4.1.2.1. Estructura de Datos

La estructura de datos que representa la interfaz con el STORE se muestra a continua-

cion:

typedef struct InterfazSTORE{

Store s;

Indexicals i;

Stamp st;

int indextemp;

}InterfazSTORE;

68

Page 92: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

4.1.2.2. Instrucciones asociadas al Sistema de Restricciones de LMAN

Las instrucciones para construir fpo en LMAN se describen en la figura 4.5.

Figura 4.5: Instrucciones para construccion de restricciones en LMAN

Los posibles valores que se definen para funciones y predicados se describen a continua-

cion. El sistema de restricciones actualmente usado por LMAN, no modela conectores

logicos, ni rangos, ni cuantificadores.

Funciones: ADD, SUBS, MULT, DIV, MOD.

Pred: IGUAL, DIF, MAY, MAI(mayor o igual), MEN, MEI(menor o igual).

4.1.2.3. Construccion de Restricciones en LMAN

A partir de las instrucciones presentadas en la figura 4.5, se construyen las restricciones

en LMAN. La siguiente restriccion, se expresa en LMAN como un arbol binario de

notacion infija (ver figura 4.6).

69

Page 93: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

( y + 2) = (x ? 4) – (z ÷ 6)

Figura 4.6: Arbol binario infijo que representa una restriccion en LMAN

Del arbol de la figura 4.6, que contiene una restriccion expresada como formula–de–

primer–orden se construye la restriccion que recibira el Sistema de Restricciones usado

por LMAN. Teniendo en cuenta las instrucciones descritas en la figura 4.5 y asumiendo

que la variable “x” tiene la etiqueta 74, “y” la etiqueta 75 y “z” la etiqueta 76; el codigo

necesario para construir la restriccion es el siguiente:

1 ATOM IGUAL 2 // =

2 TERMF ADD 2 // +

3 TERMV 75 0 // y

4 TERMC 2 0 // 2

5 TERMF SUBS 2 // -

6 TERMF MULT 2 // *

7 TERMV 74 0 // x

8 TERMC 4 0 // 4

9 TERMF DIV 2 // /

10 TERMV 76 0 // z

11 TERMC 6 0 // 6

Del anterior bloque de codigo, se aprecia como la restriccion se construye siguiendo

una notacion infija donde primero se describe el operador y luego los terminos varia-

70

Page 94: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

bles o constantes asociados a la operacion. En el Sistema de Restricciones actual las

restricciones se construyen como arboles binarios, luego la aridad aceptada es 2. ( ari

= 2).YA que LMAN acepta cualquier Sistema de Restricciones parametrico; la sintaxis

de restricciones requiere que la aridad se haga explicita como un parametro. (Ver figura

4.5).

4.1.3. Interfaz LEGOS

Un RCX es un microcontrolador programable basado en LEGO brick con un Hitachi

H8/300 como corazon y 32K en memoria RAM. Este puede operar simultaneamente

tres actuadores, tres sensores y un sistema IR; adicionalmente, con el RCX se inclu-

ye una baterıa y diferentes piezas intercambiables para crear variedad de dispositivos

roboticos autonomos. Es posible programar RCX en alto nivel utilizando combinaciones

de firmwares como legOS, lejOS, Lego MindStorm firmware junto con lenguajes como

C, Java, NQC, entre otros.

El modulo de la interfaz LEGOS es el encargado de la interaccion con el ambiente, en

otras palabras, es el encargado de controlar las variables asociadas al RCX. En LMAN el

ambiente se define como una estructura que permite controlar los motores, los sensores,

el sonido y la baterıa; definiendo para cada uno de estos componentes los atributos

necesarios para modelar adecuadamente el comportamiento del robot. La figura 4.7

ilustra la estructura usada para modelar el ambiente y para construir el paquete de

datos que se transmite entre el computador y el RCX. Notese que este modulo permite

programar el doble de dispositivos de un RCX convencional, con el fin de admitir

expansiones sobre los RCX o para modelar sistemas colaborativos entre RCX.

Figura 4.7: Ambiente LEGO en LMAN

Al finalizar esta seccion que define la interfaz LEGOS, se presenta una breve descripcion

de los dispositivos LEGOS y sus capacidades.

71

Page 95: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

4.1.3.1. Estructura de Datos

Las estructuras de datos utilizadas para modelar el ambiente LEGO se definen a con-

tinuacion:

//entrada define el estado y el valor

typedef struct {

char est;

char val;

}entrada;

//sensor define el tipo, estado y el valor de los sensores

typedef struct {

char tipo;

char est;

char val;

}sensor;

//soundl define el estado, la nota y la duracion de los controladores de sonido

typedef struct {

char est;

char nt;

char dur;

}soundl;

//se modela el ambiente LEGO

typedef struct {

//definicion de motores

entrada mot[7];

//definicion de sensores de movimiento

sensor sen[7];

//definicion de bateria

entrada bat[3];

//definicion para manejo de musica

soundl snd[3];

72

Page 96: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

}ambiente;

4.1.3.2. Ambiente LEGO

En LMAN las variables son representadas por etiquetas numericas unicas, que comien-

zan desde 1 y van incrementandose de uno en uno. Para modelar la interaccion de

LMAN con el ambiente, se reservan unas etiquetas fijas destinadas para definir varia-

bles de entrada, las cuales informan sobre como se encuentra el ambiente y variables

de salida, que contienen la informacion de que va a ser ejecutado sobre el LEGO.

Se debe de tener en cuenta, que para dar escalabilidad a la implementacion de LMAN,

se habilitaron el doble de dispositivos de un RCX convencional. Es decir, que LMAN

permite trabajar con 6 sensores, 6 motores, 2 baterıas y 2 manejadores de sonido. El

LCD o display que permite visualizar mensajes en el LEGO no fue modelado, ya

que el Sistema de Restricciones no incluye la posibilidad del manejo de cadenas. No

obstante, el LCD se utiliza para visualizar mensajes de depuracion durante la ejecucion

de programas.

A continuacion se describe en detalle el uso de variables que hace LMAN. La notacion

utilizada para las variables es mayuscula, ya que se definen como constantes en la

maquina virtual.

4.1.3.2.1. Variables de Entrada .

Las variables de entrada comienzan en la etiqueta 1 y van hasta 34, estas se encuentran

divididas de la siguiente forma:

Motores: Cada uno de los 6 Motores, contiene 2 variables para indicar los atributos

a continuacion. El total de variables de Motores es 12.

Estado: Indica si esta encendido el motor y en que direccion se desplazara.

Los valores posibles: 0 Apagado, 1 Adelante, 2 Atras, 3 Frenar.

Ejemplo: IMOTEST1 = 1, indica que el motor 1 tiene estado Adelante.

Valor: Indica la velocidad que tiene el motor. Valores: 0 a 255.

Ejemplo: IMOTSP1=80 indica que la velocidad del motor 1 se configura en

73

Page 97: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

80.

Sensores: Cada uno de los 6 Sensores contiene 2 variables para indicar los atributos

a continuacion. El total de variables definidas para los sensores es 12.

Tipo: Indica el tipo de sensor que se utiliza: 1 tacto, 2 luz, 3 rotacion, 4

temperatura; 5 y 6 se reservan en caso de que se adiciones mas sensores. Estos

valores deben asignarse a las constantes que definen los tipos de sensores en

la interfaz LEGO.

Estado: Indica si el sensor se ha habilitado o no. Valores: 1 o 0.

Ejemplo: ISENEST1=1 indica que el sensor 1 se encuentra activo.

Valor: Indica el valor del sensor, por ejemplo si el sensor es de tacto dice si

esta oprimido o no.

Ejemplo: ISENVAL1=1 para un sensor de tacto, indica que el sensor ha sido

oprimido.

Baterıas: Cada una de las 2 Baterıas contiene 2 variables para indicar los atributos a

continuacion. El total de variables definidas para baterıas es 4.

Estado: Indica si la Baterıa esta en funcionamiento o no. Valores: 1 o 0.

Ejemplo: IBATEST1=1, indica que la baterıa 1 esta en funcionamiento.

Valor: Indica le nivel de energıa de la Baterıa. Valores: 0 a 255.

Ejemplo: IBATVAL1=180, indica que la baterıa 1 tiene un nivel de energıa

de 180.

Sonido: Cada uno de los 2 controladores de Sonido contiene 3 variables para indicar

los atributos a continuacion. El total de variables asociadas a los controladores de

sonido es 6.

Estado: Indica si esta en funcionamiento el controlador de Sonido o no.

Valores: 1 o 0.

Ejemplo: ISNDEST2=1, idica que el estado del controlador 2es activo.

Nota: Indica la Nota y la escala de la misma. Valores: 0 a 255.

Ejemplo: ISNDNT2=55, representa la nota LA en escala 5 para el controla-

dor 2.

74

Page 98: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Duracion: Variable opcional para delimitar el tiempo de duracion de la nota.

Valores: 0 a 255.

Ejemplo: ISNDDUR2=2, representa duracion de una octava para una nota

ya definida en el controlador 2.

4.1.3.2.2. Variables de Salida .

El manejo de las variables de salida es similar a las variables de entrada, con la diferencia

que inician en la etiqueta 35 y terminan en la etiqueta 68. Para el caso de las constantes

que definen las etiquetas, solo se hace el cambio de la letra inicial I (INPUT) por la O

(OUTPUT).

Ejemplo:

Variable de Entrada: ISNDDUR1

Variable de Salida: ONDDUR1

4.1.3.2.3. Variables de Usuario .

A partir de la etiqueta 69 inician las variables que pueden usar los programas de usuario.

4.1.3.3. Protocolo de comunicaciones

LMAN utiliza en su funcionamiento el protocolo LNP (Lego Network Protocol) del

Sistema Operativo LegOS. Este protocolo posibilita la comunicacion entre varios RCX

y varias estaciones de trabajo. Existe sobre los lenguajes C, Java y Python. Actua como

un protocolo UDP (User Datagram Protocol), por lo cual no realiza acuso de recibo o

chequeos de integridad en la recepcion de paquetes.

LNP es usado en la implementacion de LMAN, para suplir el inconveniente de tamano

en memoria, por el cual se imposibilitaba la ejecucion de la maquina desde el mis-

mo dispositivo LEGO. Consecuentemente, se hizo necesario implementar un protocolo

de entrega y recepcion de datos que usa LNP para el envıo, tal como se describe a

continuacion.

El protocolo modelado no es complejo, utiliza asincronıa y time-out para asegurar

entrega de datos. Una Bandera determina el tipo del enlace.

75

Page 99: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Protocolo del lado de la estacion de trabajo: Ver figura 4.8

1. Se envıa al LEGO, la BANDERA en estado de sensar (1).

2. La estacion de trabajo espera la respuesta con el ambiente sensado por el

RCX.

3. Si se presenta un time-out(No se recibe respuesta), se regresa al paso 1.

4. Se envıa al LEGO, la BANDERA en estado de ejecutar (2).

Figura 4.8: Protocolo del lado de la estacion de trabajo en LMAN

Protocolo del ladol RCX: Ver figura 4.9

1. El RCX espera la BANDERA.

2. Si el estado de la BANDERA es sensar (1), el RCX sensa el ambiente.

3. EL RCX envıa el ambiente sensado a la estacion de trabajo.

4. Si el estado de la BANDERA es ejecutar (2), el RCX captura el ambiente

recibido.

5. El RCX ejecuta el ambiente.

4.1.3.4. Dispositivos Roboticos LEGO

El RCX 2.0 Robotics Command System (Ver figura 4.10) es un dispositivo brick pro-

gramable [Gro00]. Cuenta con 3 puertos de entrada para sensores, 3 puertos de salida,

76

Page 100: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Figura 4.9: Protocolo del lado del RCX en LMAN

cuatro botones de control, un display LCD, y un transmisor de infrarrojos. Adicional-

mente, posee un microprocesador para el procesamiento de programas, una memoria

interna para almacenar el firmware y los programas y un speaker para producir beeps

y tonos.

4.1.3.4.1. LEGO Brick .

Los puertos de sensores permiten conectar sensores de luz, tacto, rotacion y tempera-

tura. Los dos ultimos no se incluyen en el kit LEGO MindStorm. Los puertos de salida

permiten conectar motores y otros dispositivos como luces que no se incluyen en el

kit. Adicionalmente es posible conectar otros LEGO bricks. Internamente el dispositivo

cuenta con 3 sensores internos: temporizador, para mantener un rastro del tiempo; un

manejador de mensajes, que espera por mensajes enviados por otros RCX y por ultimo,

variables definidas por el usuario. Por medio de estos dispositivos, el robot puede mo-

verse y reaccionar con su ambiente.El brick requiere 6 baterıas AA/LR6 de 1.5 voltios

para su funcionamiento.

La torre IR es la encargada de establecer un enlace inhalambrico entre la estacion de

trabajo y el RCX. Por medio de la torre IR que utiliza senales infrarrojas para enviar

mensajes, se descarga el firmware y los programas a la memoria del RCX. Para descarga

la distancia sugerida entre la torre y el RCX es 10-12 cm; en condiciones optimas de

luz se puede transmitir hasta una distancia de 30 metros usando una torre USB.

77

Page 101: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Figura 4.10: RCX LEGO brick

4.1.3.4.2. Firmware y lenguajes de programacion .

El firmware es un software especial que posibilita la comunicacion entre una estacion de

trabajo y el RCX. Actua como el sistema operativo del RCX. En la actualidad existen

diversos metodos para programar RCX; los cuadros 4.2 y 4.3 resumen algunos de los

mas utilizados.

4.1.3.4.3. Modelos de Robots .

Las piezas intercambiables de LEGO pueden utilizarse para construir diferentes tipos

de robots, la figura 4.11 muestra algunas de las opciones mas utilizadas. EL presente

trabajo se prueba sobre un modelo Roverbot.

78

Page 102: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Firmware BrickOS (legOS)Autor Markus L. NogaTipo Reemplazo de FirmwareLenguajes C,C++Plataformas Desarrollado sobre x86 GNU/Linux, probado sobre PPC Linux.

Es portable en Cygwin-DJGPP sobre MSWindows y soportado en Mac.Descripcion LegOs es un sistema operativo multitarea para el RIS

(Robotics Invention System). Los programas son escritos en C,C++compilados en la estacion usando gcc-cross-compilery luego descargados al RCX para ejecucion. Incluye random, puntoflotante, hilos con semaforos, y almacenamiento multiple deprogramas. Permite recibir y enviar datos entre estaciones windows olinux. Usa la velocidad nativa del mircroprocesador (16 MHz) yutiliza LNP como protocolo de comunicacion basado en transmisor deinfrarrojo con el RCX. Es una poderosa alternativa para RCX.

Firmware Not Quite C (NQC)Autor Dave BaumTipo compilador de codigo de bytes nativoLenguajes lenguaje similar a C, llamado Not Quite C.Plataformas GNU/linux, MS Windows, y Macintosh.Descripcion NQC es un compilador de codigo de bytes que toma programas

escritos en una sintaxis similar a C y la traduce a un codigode bytes que el firmware utilizado en el LEGO pueda entender.NQC tiene limitaciones en el numero de variables dispobiblesque es 32, no existen estructuras de datos, las subrutinasno pueden retornar valores, solo pueden usarse variablesglobales y las subrutinas no admiten parametros.

Firmware Tiny VM y leJOSAutor Jose SolorzanoTipo Reemplazo de firmwareLenguajes JavaPlataformas GNU/Linux, Win32.Descripcion Tiny VM es una implementacion de la Maquina Virtual de Java

que se descarga en el RCX para sustituir el firmware estandar.Los programas para Tiny VM, pueden usar algunas librerıas javaestandar y una librerıa disponible para el control desensores y motores del LEGO. Los programas escritos en java,requieren ser compilados y luego descargados en el RCX para suejecucion. leJOS es un proyecto similar realizado por el mismoautor, que incluye adiciones como soporte de punto flotante y cadenas.

Cuadro 4.2: Alternativas de programacion de RCX

79

Page 103: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Firmware PylnpAutor Les SmithsonTipo Libreria de control remotoLenguajes PhytonPlataformas GNU/Linux.Descripcion Pylnp es una libreria de control remoto que a difrencia

de otras librerias, interactua con legOS y no con elfirmware estandar. Esto posibilita que el usuario puedainvocar funcionalidades legOS.

Firmware Lego::RCX.pmAutor John C. QuillanTipo Remote control libraryLenguajes PerlPlataformas GNU/Linux, MS Windows y SolarisDescripcion Lego::RCX.pm es una librerıa perl para el control remoto

de el RCX utilizando la torre IR para enviar los comandosal firmware estandar para que este, los interprete y actue.

Cuadro 4.3: Alternativas de programacion de RCX

Figura 4.11: Algunos ejemplos de modelos LEGO

80

Page 104: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

4.1.4. ControlLMAN

Con todos los modulos anteriores dispuestos, controlLMAN es quien se encarga de

gestionar recursos, tareas y el tiempo. Cabe mencionar que el instante de tiempo definido

para LMAN no se rige por un reloj explıcito; el fin del instante lo define la ausencia de

procesos en las colas. Es decir, que el instante termina cuando tanto la cola de procesos

listos (CL) como la cola de procesos Unless(CU) se encuentran vacias.

4.1.4.1. Estructura de Datos

La estructura de Datos que modela el control se muestra a continuacion. ColaM es

la implementacion de colas de maquinas y ColaP es la implementacion de colas de

procesos. LZumatoria es la implementacion de listas de guardas, donde el TAD guarda

es utilizado para modelar la lista de ask del proceso guarded-choise en el calculo. Solo se

admite un nivel en esta estructura, es decir que no puede definirse un proceso sumatoria

dentro de otro proceso sumatoria. Las estructuras de maquinas y procesos se muestran

a continuacion:

typedef struct controlLMAN{

//cola de maquinas, se define una maquina por instante

ColaM cMaquinas;

//cola de construccion de la maquina del siguiente instante

ColaP cConstruccion;

//memoria del programa

char fp[MAX_ARCH];

//store

InterfazSTORE iStore;

}ControlLMAN;

typedef struct MAQUINA {

int PCN; //registro contador PCN de la maquina

FrameConst PAN; //registro apuntador de restricciones de la maquina

FrameConst PAUX; //registro auxiliar de la maquina

ColaP cListos; //cola de procesos listos

ColaP cAsk; //cola de procesos ask suspendidos

81

Page 105: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

ColaP cUnless; //cola de procesos unless

} Maquina;

typedef struct PROCESO {

int PC; //registro contador del programa

FrameConst PA; //registro apuntador al arbol restricciones

FrameConst PAux; //registro auxiliar

int instante; //almacena instante actual, usado para reglas star y next

ListaG lZumatoria; //guarda la lista de when asociadas a una zumatoria

} Proceso;

typedef struct GUARDA {

int PC; //registro contador del programa

FrameConst PA; //registro apuntador arbol restricciones

char marca; //utilizada para la regla gask, ndet

} Guarda;

4.1.4.2. Gestion de ControlLMAN

La gestion que realiza el control puede resumirse en la figura 4.12. ControlLMAN es

quien regula la ejecucion de la maquina ”mientras no se presente un error”, es decir

que mientras existan reducciones que no generen bloqueos o errores en la maquina,

esta se ejecutara infinitamente. El control define un nuevo instante e inicia el estado

de ”Planeacion de Maquinas”. En este estado y para un instante diferente al inicial, el

control destruye la maquina y el Store anterior, crea la nueva maquina y Store para el

instante actual; y procede a sensar el ambiente y a comentar su resultado en el Store.

Si se trata del instante inicial, simplemente crea la maquina y el Store para comenzar

la computacion.

A continuacion llega al estado de Ejecucion, en donde ejecuta secuencialmente las ins-

trucciones almacenadas en la memoria de programa. En este estado es donde realiza la

planeacion de procesos, que involucra la ejecucion de las reglas de reduccion definidas

en la maquina abstracta, en otras palabras, ejecuta las transiciones internas. Luego que

termina la computacion de reglas, llega al estado PonerAmbiente, en donde pregunta al

82

Page 106: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Store por el estado final de las variables asociadas al ambiente y procede a enviar esta

informacion al LEGO para su ejecucion. Con este ultimo estado, finaliza el instante,

es decir que se produce una transicion observable y de nuevo el control inicia su ciclo

reactivo.

Figura 4.12: Gestion del controlLMAN

4.2. Funcionamiento de LMAN

LMAN requiere como plataforma de Hardware (Ver figura 4.13) los siguientes ele-

mentos:

RCX 2.0 dispuesto en un modelo de robot LEGO.

Torre USB/serial. La transmision vıa LNP ha sido probada utilizando una torre

serial.

Estacion de trabajo para la comunicacion y procesamiento de LMAN. El sistema

ha sido probado ejecutandose desde una estacion Pentium III a 930Mhz, 256KB

RAM con linux Debian Woody 3.0.

LMAN requiere como plataforma de Software (Ver figura 4.14) los siguientes ele-

mentos:

83

Page 107: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Figura 4.13: Requerimientos Hardware del Sistema LMAN

Sistema operativo BrickOS, ejecutando Cross Compiler gcc y H8300binutils para

controlar el microprocesador del RCX. El sistema ha sido probado para BrickOS

version 2.6.1.

Modulo de Comunicacion LNP.

Driver USB/serial.

LMAN incluyendo los modulos del Sistema de Restricciones y el Compilador aso-

ciados.

Figura 4.14: Requerimientos Software del Sistema LMAN

Sobre la estacion de trabajo se ejecutan LMAN, el Sistema de Restricciones y el Com-

pilador. El RCX debe contener BrickOS (legOS) como firmware y el componente de

LMAN disenado para sensar el ambiente y ejecutar comandos sobre el robot. Con to-

dos estos requisitos dispuestos correctamente, el flujo de datos en el sistema se realiza

tal como se muestra en la figura 4.15.

84

Page 108: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

La entrada de datos al Sistema se produce desde el editor VINE del Lenguaje Visual

VIN o desde el editor de texto gvin configurado para chequear sintaxis NTCC. Ası, una

vez construido el programa NTCC en una de estas dos herramientas y guardado con

extension .lmn, se compila haciendo uso del Compilador NTCC-LMAN que traduce

entradas NTCC a codigo de bytes de LMAN, generando un archivo extension .out.

La maquina virtual toma como entrada el archivo generado por el compilador e ini-

cia el ciclo reactivo de computacion mientras no se produzcan fallos de comunicacion

o bloqueos en el Store. Si no es el instante inicial, el control crea la maquina y Sto-

re actuales destruyendo los anteriores, y envıa una senal al RCX (Bandera=1) para

indicarle que debe sensar. El RCX recibe la senal y captura el estado de su mundo;

empaqueta esta informacion del ambiente y la envıa hacia LMAN usando la torre IR

y el modulo LNP. LMAN entonces, comenta esta informacion al Store y con ella inicia

el procesamiento del programa y las reducciones hasta determinar el fin de la unidad

de tiempo. Cuando las colas de ejecucion y de procesos unless se encuentran vacıas, el

control consulta el estado final del Store, y procede a empaquetar esta informacion y

enviarla al RCX(Bandera=2) para ejecucion; en este momento se determina el fin de la

unidad de tiempo y de nuevo se da inicio al ciclo reactivo.

Si entre el envıo de la senal de sensar(Bandera=1) y la recepcion del paquete con la

informacion del ambiente, la maquina no recibe respuesta; se genera un time–out que

retorna al paso de envıo de senal para sensar. Si durante 5 intentos continuos la maquina

no recibe el paquete, se aborta la ejecucion.

En este momento no ha sido liberado el driver USB para legOS, por lo tanto la comu-

nicacion vıa LNP en la actual implementacion se hace utilizando una torre serial.

La figura 4.16 muestra el comportamiento reactivo que sigue LMAN. Cada unidad de

tiempo comienza con un Store Inicial Si. Durante la unidad la maquina procesa con

esta informacion como entrada y al final genera una salida que se envıa al robot para

ejecucion. Este procedimiento lo realiza infinitamente mientras no exista un bloqueo en

el Store o un fallo en la comunicacion.

85

Page 109: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Figura 4.15: Funcionamiento del Sistema LMAN

Figura 4.16: Comportamiento reactivo del Sistema LMAN

86

Page 110: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

5 COMPILADOR NTCC–LMAN

Como ya se ha mencionado en capıtulos anteriores, la implementacion del Calculo

NTCC define un flujo que incluye 3 modulos: un LENGUAJE VISUAL VIN, un COM-

PILADOR NTCC-LMAN y una MAQUINA ABSTRACTA LMAN para finalmente

permitir programacion concurrente de robots LEGO MindStorm.

El modulo del COMPILADOR NTCC–LMAN, es usado para definir una interfaz de

programacion de alto nivel para el usuario. Por medio del editor gvin configurado para

chequear sintaxis NTCC; el usuario puede construir programas usando la sintaxis propia

del calculo, y posteriormente compilarlos para generar el codigo de bytes de LMAN. En

este punto, ya LMAN toma el codigo de bytes, procesa y ejecuta sobre el robot.

Adicionalmente, debido a que tanto el lenguaje visual VIN ya mencionado, como el

compilador utilizan la sintaxis basica del calculo, se hace posible integrarlos. De esta

manera, el lenguaje visual genera codigo NTCC, que el compilador interpreta y traduce

a codigo de bytes de LMAN para ejecucion. Ası con estos tres modulos dispuestos,

se completa el flujo de implementacion de NTCC que permite al usuario programar

utilizando, sea el lenguaje iconico, el editor NTCC o directamente en las intrucciones

de la maquina virtual.

A continuacion se describen las consideraciones del diseno del compilador NTCC-

LMAN; su desarrollo no esta considerado entre los alcances del actual trabajo de tesis.

La implementacion de este, fue realizada como proyecto de semestre en el curso de

compiladores en la Pontificia Universidad Javeriana–Cali por F. Rocha, J. Chala y M.

Pabon [RCP03]. De comun acuerdo con el profesor del curso se diseno el compilador,

y se motivo a los estudiantes continuamente para lograr una buena implementacion.

Al finalizar el semestre se selecciono la mejor implementacion[RCP03], se acoplo con la

implementacion de LMAN y se realizaron las pruebas pertinentes de funcionamiento y

desempeno arrojando los resultados esperados en efectividad y eficiencia.

87

Page 111: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

5.1. Sintaxis

5.1.1. Conjunto de Caracteres

El conjunto de caracteres basico esta formado por: Letras mayusculas, minusculas,

dıgitos y caracteres especiales:

( ) [ ] ! .. = + -- /

* > < & | \# . \&\& ,

Los identificadores de las constantes deben escribirse con letras mayusculas y los de

las variables empiezan con letras minusculas y pueden seguir con letras mayusculas o

minusculas y numeros.

Debido a que LMAN interactua con el robot, es necesario definir una serie de variables

que manejan su ambiente. Estas actuan como variables globales a todo proceso en

NTCC y se definen de dos tipos: de entrada anteponiendo la letra i al listado que se

describe a continuacion, y de salida anteponiendo la letra o. Ejemplo: imot1, omot1 ...

isen1, osen1 ... ivalsnd2, ovalsnd2, entre otras.

mot1,mot2, ..., mot6. Identifican los motores del robot.

spmot1, spmot2, ..., spmot6. Identifican las velocidades de los motores.

sen1,sen2, ..., sen6. Identifican los sensores en funcionamiento.

valsen1,valsen2, ..., valsen6. Identifican el estado de los sensores.

bat1, bat2. Identifican las baterıas en funcionamiento.

valbat1, valbat2. Identifican el estado de las baterıas.

snd1, snd2. Identifican el sonido en funcionamiento.

valsnd1, valsnd2. Identifican el estado del sonido activo.

88

Page 112: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

when do max succunless tell min prednext local in skip

Cuadro 5.1: Palabras reservadas en el Compilador NTCC-LMAN

Las palabras propias del calculo son reservadas y no pueden ser usadas como nombres

definidos por el usuario; estas se muestran en el cuadro 5.1

Las variables son de tipo entero y tienen un rango definido en los numeros enteros

positivos de 0 a n, donde n es una constante definida previamente. Para efectos de este

compilador, se tomara n = 500.

Las variables de salida no pueden tener asignaciones directas mayores a 255, esto se

debe las limitaciones de los dispositivos LEGO descritas en la seccion Interfaz LEGO

del capıtulo que describe la maquina virtual. Ejemplo: tell(omot1=289) no es valido

pues es una asignacion directa a una variable de salida mayor a 255.

Los comentarios en NTCC se efectuan con dos guiones adyacentes “ —- ” en cualquier

posicion de una lınea, y terminan con nueva lınea. Ejemplo:

-- Proceso TELL de NTCC

(tell x=5)

5.1.2. Reglas de Produccion

En la definicion de la sintaxis para el compilador se tienen las siguientes consideraciones:

<nombre> identifica el nombre de un sımbolo (terminal o no terminal)

“→” especifica una regla de produccion y “|” separa las reglas de produccion que

corresponden a un mismo sımbolo no terminal.

En una regla de produccion, los sımbolos que no estan encerrados entre” <>”

son palabras o sımbolos propios del lenguaje.

Cuando la definicion no se hace con una regla de produccion (no lleva → ), esta

corresponde a una descripcion (no formal) del sımbolo.

89

Page 113: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

A continuacion se describe las reglas de produccion utilizadas por el compilador:

5.1.2.1. Variables y Constantes

Los identificadores no declarados se asumen como variables globales. La declaracion de

variables locales tiene la siguiente forma:

< V ar dec > → local < ID list > in| ( local < ID list > )

< ID list > lista de nombres de variables

La declaracion de constantes tiene la forma:

< Const dec > → ε| < const dec > const < ID constante > = < Lit int >

< Lit int > literal entero

< ID constante > nombre de una constante

5.1.2.2. Restricciones

El Store se define como una conjuncion logica de restricciones expresadas como formulas

de primer orden. Las reglas para expresar restricciones como formulas de primer orden

siguen a continuacion:

< Constraint > → < Expresion >

< Expresion > → < Lit expresion >| < V ar reference >|(< Expresion >)| < Expresion > < Operador > < Expresion >| < V ar reference > in < Rango >|succ(< Expresion >)|pred(< Expresion >)

< Rango > → < Constante > :: < Constante >|– (< Rango >)|min(< Rango >)|max(< Rango >)| < Rango > && < Rango >| < Constante > .. < Constante >

90

Page 114: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

< V ar reference > → < ID variable >| < ID constante >

< Lit expresion > → < Lit int >

< Operador > son todos los operadores del cuadro 5.2.

< ID variable > nombre de una variable

< Constante > → < Lit int >| < ID constante >

Los operadores para la construccion de restricciones se definen en el cuadro 5.2. En la

definicion del rango el sımbolo “::” significa union, el sımbolo “–” significa complemento,

el sımbolo “&&” interseccion, y el sımbolo “..” representa un rango (inicio y fın).

Clase de Operador Operador

Logico & | |Negacion Not

Relacionales = |! = | < | > | ≤ | ≥Aritmeticos +| − | ∗ |/|%

Cuadro 5.2: Operadores sobre restricciones

5.1.2.3. Procesos

A continuacion se muestran las reglas que definen los procesos NTCC:

< P > → when < Constraint > do P| < P > || < P >| ∗[< Constante >, < Constante >] < P >| ! < P >| unless < Constraint > next < P >| next < Const op > < P >| (< P >)| var dec < P >| < P > + < P >| tell < Constraint >| skip

< Const op > constante opcional

91

Page 115: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

5.1.2.4. Programa

Un programa esta formado por la declaracion de constantes y una serie de procesos:

< Programa > → < Const dec > < Procesos >< Procesos > → < P >

| < Procesos > < P >

Ejemplos de programas NTCC se muestran en el capıtulo 7 de pruebas y ejemplos.

5.2. Semantica

Los chequeos semanticos que realiza el compilador tratan las operaciones aritmeticas,

relacionales y logicas de las restricciones. Adicionalmente trata los tres puntos que se

describen a continuacion:

Gramatica Ambigua . Para evitar que la gramatica definida para el compilador re-

sultara ambigua, se realizo una modificacion a la notacion con parentesis utiliza-

da en [Val03]. Esta modificacion obliga que toda restriccion debe escribirse entre

parentesis.

Precedencia de Procesos . La precedencia de procesos se presenta a continuacion.

Es importante notar, que los procesos estan organizados segun su alcance.

!,*,next,unless,local ligan al mas cercano

|| liga al proceso mas cercano de la suma (+)

Ejemplo: P + local x in next Q || RSignifica: P + ((local x in (next Q)) || R)

Se observa que el local x in P tambien se puede escribir como (local x)P

Restriccion Semantica . No pueden definirse procesos

local < ID list > in

( when < Constraint > do < P > + when < Constraint > do < P > + . . . ).

Lo anterior hace referencia al caso particular en que el programa NTCC incluya

!!P en ciertas condiciones, lo cual generarıa un estado de inconsistencia en la

maquina. Para solucionar lo anterior, se define que “!!P ∼= !P sii P tiene un local

92

Page 116: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

con determinismo“; es decir que, mientras no exista un proceso tipo guarded-

choise en un local para P, se puede asegurar que !!P se ejecuta como !P.

5.3. Generacion de Codigo

La generacion de codigo es el paso final en la compilacion, en el cual se genera el archivo

con la traduccion al codigo de bytes de LMAN. La descripcion de como se traducen los

procesos, se describe detalladamente en el Anexo A, acerca de Traduccion de procesos

NTCC a codigo de bytes LMAN. El Anexo B describe todas las librerias usadas por el

compilador para construir programas en codigo de bytes LMAN.

93

Page 117: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

6 Ejemplos y Pruebas

En este capıtulo se describen ejemplos de programacion y pruebas realizadas sobre

la maquina virtual LMAN ejecutado construcciones NTCC. Como se menciono ante-

riormente en la seccion 1.4, no conocemos alguna otra implementacion de un calculo

de procesos, temporal, concurrente por restricciones validado sobre robots LEGO; por

lo cual una comparacion entre LMAN y otras maquinas virtuales no serıa realmente

equitativa; sin embargo, en este capıtulo se expone una comparacion a nivel de recur-

sos entre LMAN, el lenguaje formal ESTEREL[MR82] y la maquina virtual estandar

LEGO.

6.1. Ejemplos

A continuacion se expondran los ejemplos que fueron compilados usando el compilador

NTCC-LMAN y ejecutados en LMAN.

6.1.1. Programa Zig-Zag

El ejemplo de zig-zag fue expuesto anteriormente en el capıtulo del calculo NTCC (ver

seccion 2.6.1), ahora se muestra su implementacion de acuerdo a la sintaxis valida en

LMAN :

Programa ZIG ZAG

--Definicion de constantes para el programa

const VEL = 50

const FWD = 1

94

Page 118: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

const BACK = 2

const RGHT = 5

const LFT = 7

!(

-- Procesos 1 y 2:Asignacion de velocidades

(tell (ospmot1=VEL))

||

(tell (ospmot3=VEL))

||

--Proceso 3: ZIG ZAG

(

(when (a!=FWD) do

(tell (gf=1))

)

+

(when (b!=RGHT) do

(tell (gr=1))

)

+

(when (b!=LFT) do

(tell (gl=1))

)

)

||

--CELDAS

--Proceso 4: Implementacion de la primera celda (ca)

(when (ca=1) do

(

(next tell (ca=1))

||

(unless (changea=1) next

(

(when (a=0) do (next tell (a=0)))

+

95

Page 119: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

(when (a=FWD) do (next tell (a=FWD)))

+

(when (a=RGHT) do (next (tell (a=RGHT))))

+

(when (a=LFT) do (next ( tell (a=LFT))))

)

)

)

)

||

--Proceso 5: Implementacion de la segunda celda (cb)

(when (cb=1) do

(

(next tell (cb=1))

||

(unless (changeb=1) next

(

(when (b=0) do (next tell (b=0)))

+

(when (b=FWD) do (next tell (b=FWD)))

+

(when (b=RGHT) do (next tell (b=RGHT)))

+

(when (b=LFT) do (next tell (b=LFT)))

)

)

)

)

||

--Proceso6: exchf, exchange forward.

(when (exchf=1) do

(

(tell (changea=1))

||

(tell (changeb=1))

96

Page 120: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

||

(next (tell (a=FWD)))

||

(

(when (a=0) do (next tell (b=0)))

+

(when (a=FWD) do (next tell (b=FWD)))

+

(when (a=RGHT) do (next tell (b=RGHT)))

+

(when (a=LFT) do (next tell (b=LFT)))

)

)

)

||

--Proceso7: exchr, exchange right.

(when (exchr=1) do

(

(tell (changea=1))

||

(tell (changeb=1))

||

(next (tell (a=RGHT)))

||

(

(when (a=0) do (next tell (b=0)))

+

(when (a=FWD) do (next tell (b=FWD)))

+

(when (a=RGHT) do (next tell (b=RGHT)))

+

(when (a=LFT) do (next tell (b=LFT)))

)

)

)

97

Page 121: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

||

--Proceso 8: exchl, exchange left.

(when (exchl=1) do

(

(tell (changea=1))

||

(next (tell (a=LFT)))

||

(tell (changeb=1))

||

(

(when (a=0) do (next tell (b=0)))

+

(when (a=FWD) do (next tell (b=FWD)))

+

(when (a=RGHT) do (next tell (b=RGHT)))

+

(when (a=LFT) do (next tell (b=LFT)))

)

)

)

||

--Procesos que determinan el movimiento y el exchange a ejecutar

--Proceso 9: gf, goforward

( when (gf=1) do

(

(tell (exchf=1))

||

(next (tell (omot1=FWD)))

||

(next (tell (omot3=FWD)))

)

)

||

--Proceso 10: gr, goright

98

Page 122: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

( when (gr=1) do

(

(tell (exchr=1))

||

(next (tell (omot1=FWD)))

||

(next (tell (omot3=BACK)))

)

)

||

--Proceso 11: gl, goleft

( when (gl=1) do

(

(tell (exchl=1))

||

(next (tell (omot1=BACK)))

||

(next (tell (omot3=FWD)))

)

)

)

||

--Inicializacion de celdas

--Proceso 12 y 13

(tell (a=0))

||

(tell (b=0))

Descripcion del programa:

En la primera parte, los primeros dos procesos comentan restricciones sobre las veloci-

dades en los motores uno y tres, utilizando para ello las variables de salida del ambiente

de LMAN (ospmot1 = V EL, ospmot3 = V EL).

99

Page 123: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

La segunda parte define el proceso encargado de escoger el siguiente movimiento del ro-

bot (tarea Zig-Zag) activando un proceso, esta decision se representa con una sumatoria

no-deterministica similar al ejemplo original de NTCC.

Los siguientes cinco procesos modelan las celdas (a y b) y el proceso exchage con

sus variantes; estas definiciones son similares a las que presenta el ejemplo dado en

[Val03] para el calculo NTCC ; sin embargo, el programa contiene algunas modificaciones

aplicadas, como lo son la generacion de guardas solo con los valores 0, FWD, RIGHT

y LEFT.

La cuarta parte, procesos nueve, diez y once, modela la ejecucion de los movimien-

tos del robot; estos procesos son los encargados de asignar la direccion a las varia-

bles de ambiente de LMAN, que controlan la direccion de los motores y su estado

actual(omot1, omot3).

Finalmente, la ultima parte es la encargada de dar valores iniciales a las celdas (a y b),

en la primera unidad de tiempo para ejecutar el programa.

Es importante mencionar que las guardas ejercen control sobre la ejecucion del bloque

de procesos al cual se antepone. Con esto se modela procedimientos y la llamada de un

proceso por otro; de lo contrario, todos los procesos se ejecutarıan concurrentemente

sin control, generando un comportamiento no esperado, fallas y bloqueos en el Store.

6.1.2. Programa de Evasion de Obstaculos

El siguiente programa es la tarea de evasion de obstaculos, que consiste ”en que el robot

se mueva hacia adelante y cuando encuentre un obstaculo, gire en alguna direccion,

en este caso hacia la izquierda, y posteriormente continue avanzando hacia adelan-

te”[Val00], el objetivo de esta tarea es como su nombre lo explica, el movimiento del

robot superando los obstaculos que encuentre.

PROGRAMA DE EVASION DE OBSTACULOS

(

--Proceso 1: Run Evasion

!( when (re=1) do

100

Page 124: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

( when (ivalsen1=1) do next tell (gb=1)

||

when (ivalsen3=1) do next tell (gb=1)

||

when (ivalsen1=0) do ( unless (ivalsen3=1) next tell (gf=1))

)

||

--Procesos que determinan el movimiento a ejecutar

--Proceso 2: goForward

when (gf=1) do

( tell (omot1=1)

||

tell (omot3=1)

||

next tell (re=1)

)

||

--Proceso 3: goBack

when (gb=1) do

( tell (omot1=2)

||

tell (omot3=2)

||

next tell (tl=1)

)

||

--Proceso 4: turnLeft

when (tl=1) do

( tell (omot1=1)

||

tell (omot3=0)

||

next tell (re=1)

)

||

101

Page 125: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

--Proceso 5 y 6: Asignacion de velocidades

tell (ospmot1>80)

||

tell (ospmot3>80)

||

--Proceso 7: Activacion del Sensor 1

tell (osen1=1)

)

||

--Activacion del proceso Run Evasion

tell (re=1)

)

Descripcion del programa:

El primer proceso re es el encargado de decidir cual es el siguiente movimiento que

ejecutara el robot LEGO. Si alguna de las variables de ambiente de entrada que contiene

LMAN para indicar los estados de los sensores 1 y 3 tiene el valor de oprimido(1);

entonces el robot LEGO a detectado un obstaculo, por lo cual retrocedera (gb) y girara a

la izquierda(tl), de lo contrario continuara su trayectoria(gf).

Los siguientes tres procesos se encargan de ejecutar los movimientos que debera hacer

el robot LEGO, asignando el valor a las variables de ambiente de LMAN que controlan

la direccion de los motores y su estado actual(omot1, omot3).

Los procesos cuatro y cinco son los encargados de comentar las restricciones sobre las

velocidades de los motores uno y tres, utilizando para ello las variables de salida del

ambiente de LMAN (ospmot1 = V EL, ospmot3 = V EL).

El proceso seis, se encarga de encender el sensor uno, por medio de la variable de salida

del ambiente de LMAN (ospmot1 = V EL, ospmot3 = V EL).

Finalmente, el ultimo proceso se encarga de iniciar la tarea de evasion de obstaculos

(re), en el primer instante.

102

Page 126: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

6.1.3. Aplicaciones Musicales

Para mostrar los diversos ambientes de aplicacion del calculo NTCC, se incluye este

ejemplo que consiste en interpretar una melodıa en el robot LEGO. Las notas se modelan

teniendo en cuenta que cada unidad de tiempo vale por una corchea, por ejemplo; para

que una nota suene como negra,se debe tocar como corchea en dos unidades de tiempo

consecutivas. Su implementacion es la siguiente:

PROGRAMA CANON EN DO MAYOR

--Constantes para el programa

const ON = 1

const CORCHEA = 4

const BT = 38

const CC = 39

const CMC = 40

const DC = 41

const DMC = 42

const EC = 43

const FC = 44

const FMC = 45

const GC = 46

const GMC = 47

const AC = 48

const AMC = 49

const BC = 50

const CQ = 51

const CMQ = 52

const DQ = 53

const DMQ = 54

const EQ = 55

const FQ = 56

const FMQ = 57

const GQ = 58

const GMQ = 59

103

Page 127: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

const AQ = 60

const AMQ = 61

const BQ = 62

(

--Proceso 1: Activacion del sonido

(! tell (osnd1=ON))

||

--Proceso 2: Duracion de la nota

(! tell(osnddur=CORCHEA))

||

--Proceso 3: Interpretacion de notas

(next 1 tell (ovalsnd1=GC))

||

(next 2 tell (ovalsnd1=GC))

||

(next 3 tell (ovalsnd1=CC))

||

(next 4 tell (ovalsnd1=DC))

||

(next 5 tell (ovalsnd1=EC))

||

(next 6 tell (ovalsnd1=FC))

||

(next 7 tell (ovalsnd1=GC))

||

(next 8 tell (ovalsnd1=GC))

||

(next 9 tell (ovalsnd1=CC))

||

(next 10 tell (ovalsnd1=CC))

||

(next 11 tell (ovalsnd1=CC))

||

(next 12 tell (ovalsnd1=CC))

104

Page 128: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

||

(next 13 tell (ovalsnd1=AC))

||

(next 14 tell (ovalsnd1=AC))

||

(next 15 tell (ovalsnd1=FC))

||

(next 16 tell (ovalsnd1=GC))

||

(next 17 tell (ovalsnd1=AC))

||

(next 18 tell (ovalsnd1=BC))

||

(next 19 tell (ovalsnd1=CQ))

||

(next 20 tell (ovalsnd1=CQ))

||

(next 21 tell (ovalsnd1=CC))

||

(next 22 tell (ovalsnd1=CC))

||

(next 23 tell (ovalsnd1=CC))

||

(next 24 tell (ovalsnd1=CC))

||

(next 25 tell (ovalsnd1=FC))

||

(next 26 tell (ovalsnd1=FC))

||

(next 27 tell (ovalsnd1=GC))

||

(next 28 tell (ovalsnd1=FC))

||

(next 29 tell (ovalsnd1=EC))

||

105

Page 129: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

(next 30 tell (ovalsnd1=DC))

||

(next 31 tell (ovalsnd1=EC))

||

(next 32 tell (ovalsnd1=EC))

||

(next 33 tell (ovalsnd1=FC))

||

(next 34 tell (ovalsnd1=EC))

||

(next 35 tell (ovalsnd1=DC))

||

(next 36 tell (ovalsnd1=CC))

||

(next 37 tell (ovalsnd1=DC))

||

(next 38 tell (ovalsnd1=DC))

||

(next 39 tell (ovalsnd1=EC))

||

(next 40 tell (ovalsnd1=DC))

||

(next 41 tell (ovalsnd1=CC))

||

(next 42 tell (ovalsnd1=BT))

||

(next 43 tell (ovalsnd1=CC))

||

(next 44 tell (ovalsnd1=CC))

||

(next 45 tell (ovalsnd1=CC))

||

(next 46 tell (ovalsnd1=CC))

)

106

Page 130: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Descripcion del programa:

El primer proceso activa en todas las unidades de tiempo el soporte de sonido en robot

LEGO; mediante las variables(osnd1) de salida del ambiente de LMAN.

El segundo proceso se encarga de dar la duracion de cada nota (en este caso una corchea)

para todos los instantes; esto se hace mediante las variables globales de LMAN (osnddur1).

Los siguientes procesos interpretan una nota de la melodıa en cada unidad de tiempo.

6.2. Pruebas

En esta seccion se comentan los resultados de la ejecucion de pruebas de los ejem-

plos anteriores, y se muestran los resultados de pruebas en otras caracterısticas de la

maquina virtual como tolerancia a fallos y depuracion de errores. Finalmente, se hacen

comparaciones con las maquina virtual estandar de LEGO[Leg00] y el compilador de

ESTEREL.

6.2.1. Etapa de pruebas de LMAN

Esta etapa, fue realizada probando cada uno de los modulos de la maquina por separado

y una vez superada la prueba individual de cada uno, se procedio a probar la maquina

en su totalidad. En cada modulo de LMAN se puede encontrar un makefile que genera

un ejecutable que corresponde a la prueba individual del respectivo modulo.

Luego de integrar cada uno de los modulos, se probo la maquina por completo ejecu-

tando los ejemplos anteriormente expuestos en una estacion de trabajo con procesador

pentium III a 930 Mhz, 256 Kb de memoria RAM y sistema operativo Linux Debian

Woddy 3.0. Cada uno de estos ejemplos utiliza propiedades particulares del calculo y

de la maquina, a continuacion se resaltan los detalles de la ejecucion de cada uno:

107

Page 131: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

6.2.1.1. Programa Zig-Zag

Entre las propiedades del calculo que utiliza el programa Zig-Zag se encuentran el no–

determinismo, mediante el proceso de sumatoria∑

when cdoP , la replicacion infinita

de procesos (!) y la comunicacion con el Store a traves del proceso tell c

El programa Zig-Zag se ejecuto en una superficie homogenea de 80 cm, con una torre

de comunicacion serial ubicada a 80 cm de altura y un robot LEGO modelo roverbot.

La ejecucion del programa fue satisfactoria, con un tiempo de ejecucion promedio por

instante de 302.5 milisegundos (ver cuadro 6.1). Durante las pruebas, no presento pro-

blemas de comunicacion con la torre serial, debido a que se encontraba en un ambiente

libre de obstaculos.

Programa Tiempo de Unidad(milisegundos)

ZigZag 305ZigZag 305ZigZag 300ZigZag 300

Promedio 302.5

Cuadro 6.1: Desempeno del programa Zig-Zag

6.2.1.2. Programa de Evasion de Obstaculos

Entre las propiedades del calculo que se prueban en el programa de Evasion de Obstacu-

los, se encuentran la informacion negativa con el unless c next P , la sincronizacion de

procesos a traves del Store when c do P y la percepcion del entorno por medio de las

variables de entrada y salida del ambiente de LMAN que denotan el estado de los

perifericos del robot LEGO (sensores).

El programa de evasion de obstaculos se ejecuto en un laberinto de superficie de icopor

de 60 x 30 cm , con una torre de comunicacion serial ubicada a 80 cm de altura y un

robot LEGO modelo roverbot (Ver figura 6.1). El desempeno del programa resulto sa-

tisfactorio, con un tiempo de ejecucion promedio por una unidad de NTCC de 287.5

milisegundos (ver cuadro 6.2), y tiempo de ejecucion promedio de 2893 milisegundos

cuando se presentaron inconvenientes de comunicacion con la torre Serial. El tiempo

108

Page 132: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

promedio de solucion del laberinto fue 1 minuto con 11 segundos, al evaluar este tiempo

se debe tener en cuenta el retardo que ocasionado por los inconvenientes de transmision.

Figura 6.1: Ejecucion del programa Evasion de obstaculos

Programa Tiempo de Unidad Tiempo de Tiempo de Solucion(milisegundos) Unidad con Retardo (minutos)

(milisegundos)

Evasion de obstaculos 290 2893 1.18Evasion de obstaculos 280 2666 1.05Evasion de obstaculos 290 2690 1.07Evasion de obstaculos 290 2825 1.17

Promedio 287.5 2768.5 1.11

Cuadro 6.2: Desempeno del programa Evasion de Obstaculos

6.2.1.3. Aplicaciones Musicales

El programa de la interpretacion de un fragmento de Canon en Do mayor permite

probar propiedades de NTCC como la nocion de tiempo multiforme, el modelamiento

en que cada unidad se considera una corchea, el retardo en la ejecucion de procesos,

entre otros. Los procesos next i (P ), posponen la ejecucion de P , i unidades de tiempo.

Con este programa, tambien se prueba el manejo del modulo de sonido del robot LEGO,

usando las variables de ambiente de LMAN.

109

Page 133: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

El programa Canon sobre el robot se ejecuto en una superficie homogenea de 80 cm, con

una torre de comunicacion serial ubicada a 80 cm de altura y un robot LEGO modelo

roverbot. El desempeno del programa resulto aceptable con un tiempo de ejecucion

promedio por instante de 281.25 milisegundos (ver cuadro 6.3). Durante la ejecucion

no se presentaron problemas de comunicacion con la torre serial, debido a que no hubo

movimiento del robot LEGO, ni obstaculos en la comunicacion.

Programa Tiempo de Unidad

Canon 280Canon 285Canon 280Canon 280

Promedio 281.25

Cuadro 6.3: Desempeno del programa Canon en Do mayor

6.2.1.4. Recuperacion de Errores

LMAN permite recuperacion de errores en la transmision y admite depuracion de erro-

res en la ejecucion por medio de mensajes de error.

Debido a que el protocolo de transmision LNP es tipo UDP no tiene verificacion en

la recepcion; razon por la cual se hace necesario anadir un protocolo de control y

recuperacion de errores que sea capaz de identificar si hay comunicacion con el RCX, y

de lo contrario permita reintentar para establecer comunicacion. El funcionamiento del

protocolo se trata en la seccion 4.1.3.3 del capıtulo 4.

La depuracion de errores en LMAN, informa al usuario el tipo y descripcion del error

que se presento al ejecutar un programa. Los errores mas comunes suceden por incon-

sistencias en el Store, estado que genera un bloqueo en la maquina. Esta caracterıstica

de LMAN es de gran ayuda para diagnosticar errores en el codigo o funcionamiento de

un programa.

110

Page 134: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

6.2.2. Comparacion entre LMAN , ESTEREL y La Maquinaestandar de LEGO

Se hara una comparacion de manejo de los recursos con la maquina estandar de LEGO[Leg00]

y el lenguaje formal de programacion deterministica ESTEREL[MR82]. Antes de iniciar

la comparacion se dara una breve descripcion de cada uno de los items a tratar:

Maquina Estandar de LEGO: Como ya se ha mencionado en capıtulos anteriores,

es el firmware original del robot LEGO. Tiene capacidad de almacenar 5 progra-

mas y realizar 10 tareas y 18 subrutinas por cada uno de ellos; maneja 32 variables

globales para todas las tareas y 16 locales por cada una de las tareas, permite

controlar todos los perifericos del robot LEGO: sensores, motores, timers, LCD.

ESTEREL: ESTEREL como herramienta de programacion, es un compilador que

realiza la transformacion del lenguaje sıncrono deterministico ESTEREL[MR82]

a codigo C del sistema operativo BrickOS(LegOS). Este compilador permite ma-

nejar una cantidad mayor de 10 tareas en paralelo y controla todos los perifericos

del robot LEGO. El numero de variables esta limitado por la cantidad disponible

de memoria que tenga el robot LEGO.

A continuacion se realiza la comparacion entre LMAN, ESTEREL y la Maquina Estandar

de LEGO, los criterios que se compararan son; expresividad, manejo de memoria de pro-

grama y manejo de tareas concurrentes.

Expresividad: LMAN maneja programacion formal temporal, concurrente por

restricciones y es no-deterministica, propiedades que le confieren un nivel mas alto

en expresividad del que maneja ESTEREL y la Maquina estandar de LEGO.

Capacidad de Memoria: Debido a que el nucleo principal de LMAN se ejecuta

en una estacion de trabajo, la capacidad de memoria que maneja es superior a la

de ESTEREL y a la maquina estandar de LEGO que se ejecutan internamente

desde el RCX. Esto permite ejecutar problemas complejos, que demanden nivel

de procesamiento y memoria que talvez desde el LEGO no sea posible ejecutar.

Si se observa de la manera anterior, la ejecucion del nucleo de la maquina desde

una estacion de trabajo, y el componente de transmision adicionado en LMAN

no resultaron realmente en desventaja frente a otras herramientas.

111

Page 135: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Manejo de tareas concurrentes: Ya que LMAN utiliza como plataforma de

desarrollo y ejecucion el sistema operativo BrickOS(LegOS)[MLNP00] y gracias

a la propiedad del calculo de modelar tareas concurrentes, el numero de tareas

concurrentes admitidas por LMAN es n. Lo cual es superior en funcionamiento

a la maquina estandar de LEGO. ESTEREL admite el modelamiento de tareas

concurrentes.

A continuacion se presenta un cuadro que resume las caracterısticas de cada uno de los

item comparados.

Criterios LMAN ESTEREL MaquinaEstandar de LEGO

Expresividad No-determninismo Determinismo Determinismo(formal) (formal)

Capacidad Limitada por Limitada por Muy limitadade hardware de hardware del

Memoria la estacion robot LEGOManejo Superior Superior Basico

de (10 o mas procesos) 10 o mas procesos) (10 procesos)tareas concurrentes

Cuadro 6.4: comparacion de LMAN, ESTEREL y Maquina estandar de LEGOS

Por las pruebas y los datos registrados en este capıtulo, es posible concluir que la

implementacion de LMAN que se reporta, resulta ser eficiente, robusta, tolerante a

fallos y de funcionamiento en tiempo real, a pesar que los programas realizados en

ella conllevan la resolucion de restricciones aritmeticas y el modulo de transmision de

instrucciones por torre serial/USB al robot LEGO.

112

Page 136: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

7 CONCLUSIONES Y TRABAJOFUTURO

El objetivo propuesto para el presente trabajo de tesis, involucra el diseno e implementa-

cion de una maquina abstracta para el calculo NTCC, de modo que sea posible ejecutar

construcciones NTCC sobre robots LEGO. No obstante, para proveer una funcionali-

dad completa, se hizo fundamental involucrar en los objetivos del proyecto, acoplar un

sistema de restricciones para implementar el componente CC del calculo subyacente,

junto con un compilador para proveer una interfaz en alto nivel de programacion para

la maquina.

La maquina LMAN resulta una implementacion completa y eficiente del calculo NTCC,

que permite controlar y ejecutar en tiempo real programas escritos en NTCC sobre

Robots LEGO MindStorm. Su base formal en este calculo le confiere la expresividad

suficiente para modelar problemas complejos del mundo del robot, de una manera mas

natural y sin caer en detalles especıficos en la implementacion. Por ejemplo, no se

necesita especificar una velocidad fija para el robot, simplemente se da un rango (velo-

cidad > 80); tampoco es necesario especificar al robot una vıa de accion determinada

(cuando encuentre un obstaculo, gire hacia la izquierda), se le deja una escogencia

no–determinıstica de la accion; permite modelar problemas de la realidad como la in-

terpretacion de melodıas, en donde se define una unidad de tiempo como un nota (un

instante equivale a una corchea) y finalmente permite dar solucion a problemas que usan

la asincronıa para asegurar que el robot realiza una accion (chequear la temperatura),

en un instante de tiempo no determinado.

El modelo formal presentando en forma de maquina abstracta, provee la especifica-

cion de la maquina virtual para LMAN. Esta formalidad aseguro en LMAN un diseno

completo y consistente, de modo que, la implementacion fue transparente, fluida y el

113

Page 137: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

comportamiento de la maquina siempre fue el esperado. Una vez finalizo la etapa de

implementacion con base en el diseno formal realizado, no fue necesario realizar modi-

ficaciones de fondo al codigo fuente.

El diseno modular de LMAN actua como un componente integrador. Ademas de que

combina los paradigmas de programacion reactiva, temporal, concurrente y por res-

tricciones en un entorno eficiente de programacion para dispositivos roboticos LEGO,

LMAN integra otros proyectos. De esta manera, se ha logrado acoplar a LMAN el tra-

bajo de grado que implementa el sistema de restricciones [CG01] para el calculo PiCO,

la gramatica que describe formulas de primer orden descrita en el trabajo de grado de

la maquina abstracta MAPiCO[AB98], el compilador NTCC-LMAN desarrollado como

proyecto de semestre en el curso de Compiladores (PUJ) [RCP03], el trabajo de grado

que implementa el lenguaje visual VIN, y por supuesto el calculo subyacente NTCC

[Val03].

El desarrollo de LMAN alrededor de una comunidad de codigo abierto y de un alto

nivel investigativo, agilizo el aprendizaje, la consecucion de soluciones y el desarrollo

colaborativo. El contacto continuo con otros grupos de investigacion y comunidades

de desarrollo sobre Internet, fue determinante para hallar solucion a los problemas en

implementacion de LMAN, principalmente en lo relacionado con el manejo de los dispo-

sitivos roboticos LEGO. Gracias a esta colaboracion fue posible disenar e implementar

un ambiente de ejecucion eficiente para LMAN, utilizando un protocolo de comunica-

ciones, por medio del cual la maquina virtual se ejecuta en una estacion de trabajo y

se comunica via infrarrojo con el dispositivo robotico para ejecucion.

Como trabajo futuro, se han considerado varias actividades y recomendaciones que

permitiran afinar la implementacion actual. Estas pueden clasificarse en dos grupos,

los cuatro primeros puntos tratan actividades y recomendaciones relacionadas con el

componente formal de LMAN y las siguientes estan relacionadas con el componente

funcional.

La maquina abstracta de LMAN modela de manera cercana el calculo NTCC. No

obstante, para probar su correctitud es importante realizar la prueba formal de

bisimilitud, desde el calculo hacia la maquina y desde la maquina hacia el calculo

NTCC.

Se recomienda implementar la definicion de celdas para NTCC dada en [Val03] a

114

Page 138: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

nivel de la maquina virtual. Esto reducirıa el codigo de programa necesario para

modelar celdas en el calculo, ademas de que actuarıa como una plantilla generica

que es posible usar en cualquier problema computacional que implique el uso de

celdas.

Para lograr aun mas eficiencia y proveer mayor expresividad en las construccio-

nes NTCC ejecutadas sobre la maquina, es importante desarrollar un sistema de

restricciones propio para NTCC, tal como se describe en [Val03]. Gracias a la

propiedad de LMAN de definir restricciones como formulas de primer orden, su

acople serıa casi transparente siempre y cuando el nuevo sistema de restricciones

tambien exprese las restricciones de esta manera.

La sintaxis de la maquina abstracta y consecuentemente las instrucciones de la

maquina virtual, puede ser extendidas para modelar los procesos derivados del

calculo NTCC. La maquina virtual permite definir hasta 64 instrucciones.

Para futuras versiones de RCX que admitan mayores recursos de Hardware y gra-

cias a la modularidad del diseno de LMAN, se puede lograr optimizar la maquina

de tal modo que pueda ejecutarse desde el RCX, omitiendo ası el modulo que rea-

liza la transmision. Esta optimizacion debe partir de un sistema de restricciones

propio para aplicaciones NTCC, tal como se ha mencionado anteriormente.

Con la actual implementacion de LMAN que permite el control del doble de

dispositivos de los RCX convencionales, es posible disenar ambientes colaborativos

logrando crear programas que involucren la interaccion de dos o mas RCX.

La modularizacion de LMAN posibilita el acople de herramientas de simulacion.

La interfaz LEGO actuarıa como el componente integrador entre el simulador y

la maquina virtual.

LMAN actualmente ha sido probada ejecutandose sobre LINUX; es posible hacerla

portable a Windows y MacOS. Adicionalmente, es importante que exista el uso

del driver USB para la transmision via LNP, esto mejorarıa el desempeno de la

transmision. . En la actualidad LNP admite solamente torre serial.

Finalmente con todo el paquete afinado es importante generar una herramienta

de instalacion, que disminuya todas las tareas alrededor de la configuracion de

LMAN para su funcionamiento.

115

Page 139: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Anexo A. Traduccion de procesos NTCC a codigo de bytes de LMAN

Page 140: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Anexo A. Traduccion de procesos NTCC a codigo de bytes deLMAN

Las siguientes tablas describen la construccion de los procesos de LMAN en el codigo de

bytes entrada de la Maquina Virtual. Las instrucciones que se utilizan en este apendice,

se definen en el archivo opcodes.h como constantes para un mejor entendimiento. Las

construcciones descritas a continuacion fueron usadas para la generacion de codigo desde

el compilador.

A.1 Tell

La instruccion tell < constraint > se traduce a LMAN escribiendo las instrucciones

que corresponden a la restriccion, seguidas de las instrucciones lTELL y SKIP.

Ejemplo: para tell ( x > 5), se genera el codigo:

Lınea Opcode Src1 Src2

1 ATOM MAY 2

2 TERMV 74

3 TERMC 5

4 lTELL

5 SKIP

A.2 When

La instruccion when < constraint > do < P >, se traduce escribiendo las instruccio-

nes que corresponden a la restriccion, seguidas de la instruccion ASK que lleva como

parametro la direccion de la ultima instruccion del proceso hijo (P), finalizando con las

instrucciones correspondientes al proceso P.

Ejemplo: para when (x = 1) do tell (y = 0), se genera el codigo:

Lınea Opcode Src1 Src2

1 ATOM IGUAL 2

2 TERMV 74

3 TERMC 1

Page 141: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

4 lASK 9

5 ATOM IGUAL 2

6 TERMV 75

7 TERMC 0

8 lTELL

9 SKIP

A.3 Composicion Paralela

La instruccion < P > || < P >, se traduce escribiendo la instruccion PAR que lleva

como parametro la direccion de la primera instruccion del segundo proceso, seguida de

las instrucciones que corresponden al primer proceso, y por ultimo las instrucciones del

segundo proceso.

Ejemplo: para tell (x > 5) || tell (y > 1), se genera el codigo:

Lınea Opcode Src1 Src2

1 PAR 7

2 ATOM MAY 2

3 TERMV 74

4 TERMC 5

5 lTELL

6 SKIP

7 ATOM MAY 2

8 TERMV 75

9 TERMC 1

10 lTELL

11 SKIP

A.4 Unless

La instruccion unless < constraint > next < P >, se traduce escribiendo las instruc-

ciones que corresponden a la restriccion, seguidas de la instruccion UASK que tiene

como parametro la direccion de la ultima instruccion del proceso hijo (P), finalmente

las instrucciones del proceso P.

118

Page 142: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Ejemplo: para unless (x > 5) next tell (y < 80), se genera el codigo:

Lınea Opcode Src1 Src2

1 ATOM MAY 2

2 TERMV 74

3 TERMC 5

4 UASK 9

5 ATOM MEN 2

6 TERMV 75

7 TERMC 80

8 TELL

9 SKIP

A.5 Next

La traduccion de la instruccion next < Const op > < P >, depende de la existencia o

no de la constante opcional.

Cuando la constante es vacıa, se traduce escribiendo la instruccion NEXT que lleva

como parametro la direccion la ultima instruccion del proceso hijo (P), seguida de las

instrucciones que corresponden al proceso P.

Cuando la constante no es vacıa, se traduce escribiendo la instruccion NEXTN que

lleva como parametro el numero de instantes que deben transcurrir antes de realizar

el proceso, seguida de la instruccion JMP que tiene como parametro la direccion de la

ultima instruccion del proceso hijo (P), y finaliza con las instrucciones que corresponden

al proceso.

Ejemplos: Para next ( tell (x = 1)), se genera el codigo:

Lınea Opcode Src1 Src2

1 NEXT 6

2 ATOM IGUAL 2

3 TERMV 74

4 TERMC 1

5 TELL

6 SKIP

119

Page 143: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Para next 2 ( tell ( x =1)), se genera el codigo:

Lınea Opcode Src1 Src2

1 NEXTN 2

2 JMP 7

3 ATOM IGUAL 2

4 TERMV 74

5 TERMC 1

6 TELL

7 SKIP

A.6 Replicacion

La instruccion ! < P >, se traduce escribiendo la instruccion REP sin parametros,

seguida de las instrucciones que corresponden al proceso.

Ejemplo: para !tell (x > 80), se genera el codigo:

Lınea Opcode Src1 Src2

1 REP

2 ATOM MAY 2

3 TERMV 74

4 TERMC 80

5 LTELL

6 SKIP

A.7 Asincronıa

Para traducir la instruccion *[< constante >,< constante >] < P >, el compilador

debe generar un valor aleatorio (random) en el rango comprendido entre los valores de

las dos constantes. Luego, se traduce escribiendo la instruccion STAR, cuyo parametro

es el numero aleatorio generado, seguida de la instruccion JMP que lleva la direccion

de la ultima instruccion del proceso hijo (P), finalizando con las instrucciones que

corresponden a P.

120

Page 144: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Ejemplo: para * [1,7] tell (x=1), se genera el siguiente codigo.Se asume que el random

genera el 4 (Src1 de la primera lınea).

Lınea Opcode Src1 Src2

1 STAR 4

2 JMP 7

3 ATOM IGUAL 2

4 TERMV 74

5 TERMC 1

6 TELL

7 SKIP

A.8 No determinismo

Los procesos de la instruccion < P > + < P > + < P > . . . , tienen dos interpretaciones

posibles:

Si el proceso NO es un when < constraint > do < P > (es cualquiera de los

otros procesos posibles), este se debe interpretar como when true do P, dado

que en NTCC no existen las constantes true o false, se crea una restriccion que

siempre sea verdadera: when (0=1) do P, donde 0 es una etiqueta que siempre

se comenta al Store con valor 1. Por ejemplo, si se tiene tell (a+b>5) + next

tell(a=10), esto se interpretarıa como la instruccion

when (1=1) do tell (a+b>5) + when (1=1) do next tell (a=10).

Si el proceso es un when < constraint > do < P > se ejecuta nomalmente

(evaluando la restriccion para decidir si P se ejecuta o no).

Finalmente, cada instruccion < P > + < P > + < P > representa una instruccion

de la forma when < constraint > do < P > + when < constraint > do < P > +

when < constraint > do < P >. La traduccion de esta instruccion es ası:

Cada instruccion when < constraint > do < P > se traduce escribiendo las

instrucciones que corresponden a la restriccion, seguidas de la instruccion GASK

que lleva como primer parametro la lınea donde se inicia el siguiente proceso, y

como segundo parametro 1 o 0 (1 para el primer when de la sumatoria, y 0 para

121

Page 145: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

los when restantes), seguidos por las instrucciones del proceso hijo (P), y una

instruccion JMP que lleva como parametro la direccion de la ultima instruccion

de todo el conjunto de procesos (en el caso del ejemplo el skip de la direccion 32)

. Los codigos de los procesos se concatenan, y al final se agregan las instrucciones

NDET y SKIP.

Se debe tener en cuenta que para el GASK del ultimo proceso, el proceso siguiente

es el NDET (en el ejemplo el GASK de la lınea 24, tiene como parametro 31, lınea

del NDET).

Ejemplo: para when (x > 40) do tell(y = 1) + tell(y = 1) + when (x =1) do tell(y

= 0), se genera el codigo:

Lınea Opcode Src1 Src2

1 ATOM MAY 2

2 TERMV 74

3 TERMC 40

4 GASK 11 1

5 ATOM IGUAL 2

6 TERMV 75

7 TERMC 1

8 lTELL

9 SKIP

10 JMP 32

11 ATOM IGUAL 2

12 TERMV 0

13 TERMC 1

14 GASK 21 0

15 ATOM IGUAL 2

16 TERMV 75

17 TERMC 1

18 lTELL

19 SKIP

20 JMP 32

21 ATOM IGUAL 2

122

Page 146: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

22 TERMV 74

23 TERMC 1

24 GASK 31 0

25 ATOM IGUAL 2

26 TERMV 75

27 TERMC 0

28 lTELL

29 SKIP

30 JMP 32

31 NDET

32 SKIP

A.9 Skip

El proceso skip se usa para sincronizar en LMAN. De esta manera la mayorıa de

procesos a excepcion de algunos como replicacion (!) y paralelo (||) deben incluir como

parametro un llamado al skip mas cercano, tal como se ha apreciado en lo ejemplos

anteriores.

A.10 Manejo de Rangos

Aunque el Sistema de Restricciones actual no implementa rangos, en LMAN se definen,

de modo que, si se adiciona un nuevo Sistema de Restricciones puedan ser utilizados en

las construcciones NTCC. Los rangos se definen de la siguiente manera:

x in 10.,20

< var reference > in < Constante > .. < Constante >

Los cuales se representan con la estructura

OPERACION

/ \

Variable RANGE

/ \

Inicio Fin

Ejemplo: Para la restriccion x in 10.,20, el arbol que expresa la restriccion se represen-

tarıa:

123

Page 147: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

IN

/ \

x RANGE

/ \

10 20

Lo anterior se traduce en codigo de bytes LMAN como sigue: (se asume que la direccion

de x es 79):

Lınea Opcode Src1 Src2

1 ATOM IN 2

2 TERMV 79

3 TERMF RANGE 2

4 TERMC 10

5 TERMC 20

124

Page 148: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Anexo B. Librerıas para la construccion de Programas en LMAN

Page 149: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Anexo B. Librerıas para la construccion de Programas en LMAN

Como resultado de la compilacion de NTCC a LMAN, se debe generar un archivo

binario, que contendra el codigo que ejecutara la maquina virtual. Para ello, se provee

un conjunto de librerıas necesarias para escribir este archivo de forma correcta, las

cuales se describen a continuacion.

Para escribir una lınea de codigo de maquina de LMAN se utiliza la funcion:

escribirLinea(OPCODE, SRC1,SRC2 ,ARCHIVO)

que se encuentra definida en el modulo cargador (cargador.h y cargador.o) con

los siguientes parametros:

• OPCODE: Es el codigo de la operacion

• SRC1: Es el primer parametro de la operacion (si no es necesario va en

cero).

• SRC2: Es el segundo parametro de la operacion (si no es necesario va en

cero).

• ARCHIVO: Es el archivo donde se va a escribir el programa. Recuerde que

la precondicion de escribirLinea es que el archivo este abierto en modo de

escritura (Ejemplo: fopen(”lman.bin”, ”w”)).

El archivo binario debe finalizar con la instruccion (0, 0, 0) lo cual indica que es

el fin del archivo.

Las librerıas relacionadas para la construccion de programas son las siguientes:

• opcodes.h: contiene la definicion de los codigos de operacion -opcodes- de

LMAN.

• ValueFrameConst.h: contiene la definicion de los valores necesarios para rea-

lizar la interaccion con el sistema de restricciones (IGUAL, DIF, MAY, ...).

• varlman.h: contiene la definicion de las variables de ambiente de LMAN tanto

las de entrada como las de salida (ISENEST1, IMOTEST6).

Page 150: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

Bibliografıa

[AB98] M. Heredia . A. Buss. MAPiCO: Maquina Abstracta para el Calculo Pico.Tesis de Pregrado, Facultad de Ingenieria, Pontificia Universidad Javeria-na. 1998.

[ADQV98] G. Alvarez, J. Diaz, L. Quesada, and F. Valencia. PiCO: A calculus ofconcurrent constraint object for musical applications. ECAI98, Workshopof Constraint and the Arts, Brighton, England. 1998.

[Bau00] D. Baum. http://www.baumfamily.org/nqc/. 2000.

[Car95] B. Carlson. Compiling and Executing Finite Domain Constraints. PhDthesis, Swedish Institute of Computer Science. 1995.

[CG01] A. Vasquez C. Garcia. Implementacion eficiente de un sistema de dominiosfinitos para el lenguaje cordial. Tesis de Pregrado, Facultad de Ingenieria,Pontificia Universidad Javeriana. 2001.

[Com00] Houghton Mifflin Company. The American Heritage r© Dictionary of theEnglish Language, Fourth Edition. Copyright c© 2000.

[FQ04] D. Fernandez and J. Quintero. VIN: Lenguaje Visual basado en el calculoNTCC. Tesis de Pregrado, Ingenierıa de Sistemas, Pontificia UniverisidadJaveriana. 2004.

[Fre99] J. Fredslund. The assumption architecture. Progress Report, Department ofComputer Science, University of Aarhus. 1999.

[Gro00] LEGO Group. Constructopedia. LEGO, MindStorms, Robotics InventionSystem. 1999/2000.

[HS96] T. Haynes and S. Sen. Evolving behavioral strtegies in predators and prey.In Proc of the IJCAI Workshop on Adaptation and Learning in Multi-AgentSystems, volume 1042 of Lecture Notes in Artificial Intelligence, pages 113-126. Springer Verlag. 1996.

127

Page 151: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

[JNO97] S. Jones, T.Nordin, and D. Oliva. C–:A portable assembly language. InImplementation of Functional Languages. 1997.

[Jon92] S. Jones. Implementing Lazy Functional Languages on Stock Hardware: theSpineless Tagless g-machine. Journal of Functional Programmingd Concu-rrency. Preentice-Hall. 1992.

[Leg00] Lego. LEGO MindStorms RCX 2.0 Firmware Command Overview,. 2000.

[Lop99] L. Lopes. On the Design and Implementation of a Virtual Machine for Pro-cess Calculi. PhD Dissertation, Department of Computer Sciences, Univer-sity of Porto. 1999.

[LP99] H. H. Lund and L. Pagliarini. Robot soccer with LEGO mindstorms. LNCS,1064:141-151. 1999.

[LY97] T. Lindholm and F. Yellin. The Java Virtual Machine Specification. 1997.

[MBD86] V. Jagannathan M. Brenda and R. Dodhiawala. On optimal cooperationof Knowledge sources - an empirial investigation. Technical REport BCS-G2010-28, Boeing Advanced Techology Center. 1986.

[McA92] D. McAllester. First order logic. 1992.

[Mil89] R. Milner. Communication and Concurrency. 1989.

[Mil99] R. Milner. Communicating and Mobile Systems: the π calculus. CambridgeUniversity Press. 1999.

[MLNP00] L. Villa M. L.Noga and P. http://brickos.sourceforge.net/. 2000.

[MR] C. Mauras and M. Richard. LUSTRE Y ESTEREL synchronous languages.http://www.emn.fr/x-info/lego/.

[MR82] J. Marmorat and J. Rigault. http://www-sop.inria.fr/esterel.org/. 1982.

[RCP03] F. Rocha, J. Chala, and M. Pabon. Compilador NTCC-LMAN. Reporte delcurso de Compiladores, Pontificia Universidad Javeriana–Cali. 2003.

[SJG94] V. Saraswat, R. Jagadeesan, and V. Gupta. Foundations of timed concurrentconstraint programming. In Proc. Of the Ninth Annual IEEE Symposium ofLogic in Computer Science. 1994.

[SR00] J. Solorzano and T. Rinkens. http://lejos.sourceforge.net/index.html. 2000.

[SRP91] V. Saraswat, M. Rinard, and P. Panangaden. The semantic foundationsof Concurrent Constraint Programming. In ACM, Preceedings of eighteenthannual ACM symposium of Principles of programming languages. 1991.

128

Page 152: LMAN: Máquina Abstracta del Cálculo NTCC para Programación ...

[SRP03] V. Saraswat, M. Rinard, and P. Panangaden. JCC: Integrating Timed De-fault Concurrent Constraint Programming into java. 2003.

[SV00] P. Stone and M. Veloso. Multiagent systems: A survey from a machinelearning perspective. Autonomoues nRobots, 8: 345-383. 2000.

[Val00] F. D. Valencia. Reactive Constraint programing. Progress Report , Depart-ment of Computer Science, University of Aarhus. 2000.

[Val03] F. D. Valencia. Temporal Concurrent Constraint Programming. PhD Dis-sertation, Department of Computer Science, University of Aarhus. 2003.

[VS91] P. Panangaden V. Saraswat, M. Rinard. The semantic foundations of con-current constraint programming. In ACM, Prceedings of eighteenth annualACM symposium of Principles of programming languages. 1991.

[VSG96] R. Jagadeesan V. Saraswat and V. Gupta. Timed Default Concurrent Cons-traint Programming. J. Symbolic Computation. 1996.

[War83] D. Warren. An Abstract Prolog Instruction Set. Technical Report 309, SRIInternational. 1983.

129