BACI (Ben Ari Compiler)

BACI (Ben Ari Compiler) Introducción - Debido al creciente énfasis del proceso distribuido y paralelo se hace necesario:

Views 131 Downloads 0 File size 211KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

BACI (Ben Ari Compiler) Introducción - Debido al creciente énfasis del proceso distribuido y paralelo se hace necesario:

- Comprender la concurrencia y la sincronización - Adquirir experiencia práctica en la escritura de programas concurrentes.

BACI (Ben Ari Compiler) Introducción -

Tres 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

BACI (Ben Ari Compiler) Sobre estas tres opciones optamos por BACI. Baci: -

Descendiente directo de la modificación de Ben-Ari al Pascal secuencial (Pascal-S). Tomó Pascal-S y añadió construcciones de programación concurrente:

-

-

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

BACI (Ben Ari Compiler) Baci: - Simula la ejecución de procesos concurrentes y soporta las siguientes técnicas de sincronización: -

Semáforos enteros Semáforos binarios Monitores

BACI (Ben Ari Compiler) bacc prog.cm Prog.cm

Prog.p

bacc

bapas

bainterp prog

Compilación con éxito Archivo objeto prog.pco Listado de compilación prog.lst Errores de compilación Editor de Textos

Entrada de teclado

bainterp

Salida Correcta

Salida incorrecta

BACI (Ben Ari Compiler) 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

BACI (Ben Ari Compiler) 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

BACI (Ben Ari Compiler) SINTAXIS DE BACI - Similar a c++ - Simplificación de algunos elementos de c++ - Se han añadido algunas restricciones

BACI (Ben Ari Compiler) • 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

BACI (Ben Ari Compiler) - 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)

BACI (Ben Ari Compiler) - 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.

BACI (Ben Ari Compiler) - 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()

BACI (Ben Ari Compiler) . 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

BACI (Ben Ari Compiler) - 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

BACI (Ben Ari Compiler) - 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(…);}

BACI (Ben Ari Compiler) 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; }

BACI (Ben Ari Compiler) 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.

BACI (Ben Ari Compiler) - 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

BACI (Ben Ari Compiler) 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.

BACI (Ben Ari Compiler) -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.

BACI (Ben Ari Compiler) -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

BACI (Ben Ari Compiler) 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”.

BACI (Ben Ari Compiler) 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)

BACI (Ben Ari Compiler) 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-12202001105107/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)

BACI (Ben Ari Compiler) 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 University Press, 1995. - Silbershatz, Abrahan and Peter B. Galvin, Operating System Concepts. Addison – Wesley Publishing Co., Fourth Edition, 1994.