BACI (Ben Ari Compiler)

25
BACI ( BACI ( Ben Ben Ari Ari Compiler Compiler ) ) Introducción Introducción - - Debido al creciente énfasis del proceso Debido al creciente énfasis del proceso distribuido y paralelo se hace distribuido y paralelo se hace necesario: necesario: - Comprender la concurrencia y la sincronización - Adquirir experiencia práctica en la escritura de programas concurrentes.

Transcript of BACI (Ben Ari Compiler)

Page 1: BACI (Ben Ari Compiler)

BACI (BACI (BenBen AriAri CompilerCompiler))IntroducciónIntroducción

-- Debido al creciente énfasis del proceso Debido al creciente énfasis del proceso distribuido y paralelo se hace distribuido y paralelo se hace necesario:necesario:

- Comprender la concurrencia y la sincronización

- Adquirir experiencia práctica en la escritura de programas concurrentes.

Page 2: BACI (Ben Ari Compiler)

BACI (BACI (BenBen AriAri CompilerCompiler))IntroducciónIntroducción

-- Tres opciones para adquirir esta experiencia prácticaTres opciones para adquirir esta experiencia práctica

1. Escribir programas concurrentes con un lenguaje de programación concurrente, Modula, Ada.

2. Escribir programas concurrentes mediante llamadas al sistema operativo de un S.O. como UNIX.

3. Escribir programas concurrentes con un lenguaje desarrollado específicamente para obtener experiencia en los conceptos de concurrencia como Pascal funcionalmente concurrente o el Intérprete Concurrente de Ben-Ari(BACI). El uso de estos lenguajes ofrece varias técnicas de sincronización con una síntaxis bastante familiar

Page 3: BACI (Ben Ari Compiler)

BACI (BACI (BenBen AriAri CompilerCompiler))Sobre estas tres opciones optamos por Sobre estas tres opciones optamos por

BACI.BACI.

BaciBaci::-- Descendiente directo de la modificación de Descendiente directo de la modificación de

BenBen--AriAri al Pascal secuencial (Pascalal Pascal secuencial (Pascal--S).S).-- Tomó PascalTomó Pascal--S y añadió construcciones de S y añadió construcciones de

programación concurrente:programación concurrente:

- cobegin … coend- Variables tipo semáforo con operaciónes wait y

signal

Page 4: BACI (Ben Ari Compiler)

BACI (BACI (BenBen AriAri CompilerCompiler))BaciBaci: : -- Simula la ejecución de procesos Simula la ejecución de procesos

concurrentes y soporta las concurrentes y soporta las siguientes técnicas de siguientes técnicas de sincronización:sincronización:

-- Semáforos enterosSemáforos enteros-- Semáforos binariosSemáforos binarios-- MonitoresMonitores

Page 5: BACI (Ben Ari Compiler)

BACI (BACI (BenBen AriAri CompilerCompiler))

Compilación con éxito

Archivo objeto prog.pco

Listado de compilación prog.lst

bapas

Errores de compilación

bacc prog.cm bainterp progEntrada de tecladobacc

bainterp

Salida Correcta

Salida incorrecta

Editor de Textos

Prog.cm

Prog.p

Page 6: BACI (Ben Ari Compiler)

BACI (BACI (BenBen AriAri CompilerCompiler))El sistema baci está formado por dos subsistemas:

-El compilador: compila un programa de usuario .cm (c) o .pm (pascal) y lo deja en un código objeto intermedio, llamado PCODE. Durante la compilación se crean dos archivos :

-.lst

-.pco

- El interprete: ejecuta el código de objeto creado por el compilador: .pco

Page 7: BACI (Ben Ari Compiler)

BACI (BACI (BenBen AriAri CompilerCompiler))

El núcleo del interprete es un planificador preferente:

- Durante la ejecución este planificador cambia aleatoriamente los procesos en ejecución, simulando la ejecución en paralelo de procesos concurrente

Page 8: BACI (Ben Ari Compiler)

BACI (BACI (BenBen AriAri CompilerCompiler))

SINTAXIS DE BACI

- Similar a c++

- Simplificación de algunos elementos de c++

- Se han añadido algunas restricciones

Page 9: BACI (Ben Ari Compiler)

BACI (BACI (BenBen AriAri CompilerCompiler))

• Variables:

-Tipos de datos simple:-Int : int i

-Char: char var

-String: string[20] cadena

-Typedef también es soportado:

Tipedef int length

-Constantes : “const” de tipo simples

Page 10: BACI (Ben Ari Compiler)

BACI (BACI (BenBen AriAri CompilerCompiler))- CADENAS(strings)

• Al declarar una variable cadena, especificar su longitud

• Como un literal constante

• Como una constante de programa

String [20] cadena

• Los parámetros de tipo cadena son pasados por referencia

void nom_funcion(string paramatro1)

Page 11: BACI (Ben Ari Compiler)

BACI (BACI (BenBen AriAri CompilerCompiler))- Funciones de manejo de cadenas de caracteres son:

- void stringcopy(string destino, string fuente): copia una cadena origen en otra cadena destino.

- void stringconcat(string destino,string fuente):concatena la cadena al final de la cadena destino.

- int stringcompare(string x, string y): compara dos cadenas :

- Devuelve 0 si son iguales

- Devuelve < 0 si la cadena x va alfabéticamente antes que y.

- Devuelve >0 si la cadena x va alfabeticamente después que y.

- int stringlength(string x): devuelve la longitud de la cadena x.

Page 12: BACI (Ben Ari Compiler)

BACI (BACI (BenBen AriAri CompilerCompiler))

- Funciones:

Cada programa debe tener una función main() debiendo estar la última en el programa fuente.

Su sintaxis puede ser:

. int main()

. void main()

. Main()

Page 13: BACI (Ben Ari Compiler)

BACI (BACI (BenBen AriAri CompilerCompiler)). Procedimientos y funciones tienen la misma estructura y sintaxis que en C++ standard, soportando también recursividad.

. Los parámetros de las funciones pueden ser pasados por valor o por referencia:

int nom_funcion (int a, int &b)

int a -> paso por valor

int &b -> paso por referencia

Page 14: BACI (Ben Ari Compiler)

BACI (BACI (BenBen AriAri CompilerCompiler))- Soporta inclusión de ficheros de cabecera del estándar C++, así como otros que no sean del sistema:

- #include <……>

- #include “…….”

- Sentencias de ejecución- if – else

- Switch – case

- for

- while

- do-while

- break

-continue

Page 15: BACI (Ben Ari Compiler)

BACI (BACI (BenBen AriAri CompilerCompiler))

- Concurrencia

Cobegin:

Una lista de procesos para ser ejecutados concurrentemente deben estar en un bloque cobegin. Tales bloques no se pueden jerarquizar y deben aparecer en el programa principal.

Cobegin { proc1(….); proc2(….);…… proc3(…);}

Page 16: BACI (Ben Ari Compiler)

BACI (BACI (BenBen AriAri CompilerCompiler))atomic:

La palabra clave atomic se usa para definir una función non-preemptible, es decir, cuando una función de este tipo comienza su ejecución no puede ser interrumpida hasta que termina.

Nombre_funcion atomic()

{

código de la función;

}

Page 17: BACI (Ben Ari Compiler)

BACI (BACI (BenBen AriAri CompilerCompiler))Otras funciones:

• void suspend(void): pone a dormir a la tarea llamada.

• void revive(int id_proceso): despierta al proceso con el identificador pasado como parámetro.

• int which_proc(void): devuelve el número de proceso de la tarea actual.

• int random(int range): devuelve un número entero “aleatoriamente elegido” entre 0 y la gama -1.

Page 18: BACI (Ben Ari Compiler)

BACI (BACI (BenBen AriAri CompilerCompiler))- SEMAFOROS:

Es un tipo predefinido en BACI, es una variable entera :

. No puede ser negativa

. Accesible por funciones predefinidas

. Se pueden definir semáforos binarios

. Soportan sólo valores 0 y 1

Declaración:

. semaphore semaforo1; // semáforo general

. Binarysem semaforo2; // semáforo binario

Page 19: BACI (Ben Ari Compiler)

BACI (BACI (BenBen AriAri CompilerCompiler))Inicialización:Inicialización:

initialsem (nombre-semáforo, expresión-entera).

El valor por defecto de un semáforo es 0.

-Función wait

Puede ser llamada de dos formas:

. wait(nombre_semaforo)

. p(nombre_semaforo)

Si el valor del semáforo es mayor que 0, la función decrementará el valor del semáforo en 1, si es 0, el proceso que la llama se quedará bloqueado.

Page 20: BACI (Ben Ari Compiler)

BACI (BACI (BenBen AriAri CompilerCompiler))-Función signal

Puede ser llamada de dos formas:

. signal(nombre_semaforo)

. v(nombre_semaforo)

Si un proceso está bloqueado por el semáforo, se despertará con la llamada a signal.

Page 21: BACI (Ben Ari Compiler)

BACI (BACI (BenBen AriAri CompilerCompiler))-Instalación de Baci

Bajarse de la página de la asignatura, o mi página personal: “balnxxe.tar.gz”.

Pasos:

. Descomprimir fichero con gunzip balnxxe.tar.gz quedando el balnxxe.tar

. tar –xvf balnxxe.tar : crea un subdirectorio llamado balnxxe, dentro de este subdirectorio se encuentra el compilador y el interprete que vamos a utilizar, así como un entorno gráfico de ejecución.

- Compilador: bacc

- Intérprete: bainterp

- Entorno gráfico: bagui

Page 22: BACI (Ben Ari Compiler)

BACI (BACI (BenBen AriAri CompilerCompiler))

Los programas fuentes se crearán con la extensión .cm.

Compilamos: bacc nprog.cm

Esta compilación genera:

. Un programa objeto en pcode nprog.pco

. Un programa intermedio donde aparecen los pasos de compilación y errores “nprog.lst”.

Page 23: BACI (Ben Ari Compiler)

BACI (BACI (BenBen AriAri CompilerCompiler))

Para ejecutar el programa dos opciones:

- bainterp nprog.pco

• -d: entrar en modo paso a paso activando breakpoints

• -e: mostrar el registro de activación para las entradas de cada proceso

• -x: mostrar el registro de activación en la salida de cada proceso.

• -t: anuncia la terminación de procesos

• -h: mostrar ayuda

• -p: mostrar las instrucciones PCODE, es decir como se ejecutan.

- bagui nprog.pco (Ejecutando con entorno gráfico)

Page 24: BACI (Ben Ari Compiler)

BACI (BACI (BenBen AriAri CompilerCompiler))Webs donde obtener información

-http://www.infocom.cqu.edu.au/courses/aut2001/85348/Resources/baci

- http://www.mines.edu/fs_home/tcamp/baci

- http://www.mines.edu/fs_home/tcamp/baci/cmimi.pdf

- http://emp3.hbg.psu.edu/theses/available/etc-12202001-105107/unrestricted/dstrite-ms.pdf

- http://cs.hbg.psu.edu/^null/baci/baci-paper.pdf (guia sobre entorno gráfico “bagui”)

- http://cs.hbg.psu.edu/^null/baci/baci-user-guide.pdf (guia de usuario para dos)

Page 25: BACI (Ben Ari Compiler)

BACI (BACI (BenBen AriAri CompilerCompiler))Otras Referencias

- Willian Stalling, Sistemas Operativos (4ª Edición). Prentice Hall

- Ben-Ari, M., Principles of Concurrent Programming. Prentice Hall, Inc., 1982

- Hartley, S., Operating Systems Programming. Oxford UniversityPress, 1995.

- Silbershatz, Abrahan and Peter B. Galvin, Operating SystemConcepts. Addison – Wesley Publishing Co., Fourth Edition, 1994.