Вы находитесь на странице: 1из 25

BACI (Ben Ari Compiler) Introduccin

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

- Comprender la concurrencia y la sincronizacin - Adquirir experiencia prctica en la escritura de programas concurrentes.

BACI (Ben Ari Compiler)


Introduccin
Tres opciones para adquirir esta experiencia prctica

1. Escribir programas concurrentes con un lenguaje de programacin 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 especficamente para obtener experiencia en los conceptos de concurrencia como Pascal funcionalmente concurrente o el Intrprete Concurrente de Ben-Ari(BACI). El uso de estos lenguajes ofrece varias tcnicas de sincronizacin con una sntaxis bastante familiar

BACI (Ben Ari Compiler)


Sobre estas tres opciones optamos por BACI. Baci:
Descendiente directo de la modificacin de Ben-Ari al Pascal secuencial (Pascal-S). Tom Pascal-S y aadi construcciones de programacin concurrente: cobegin coend Variables tipo semforo con operacines wait y signal

BACI (Ben Ari Compiler)


Baci: - Simula la ejecucin de procesos concurrentes y soporta las siguientes tcnicas de sincronizacin: - Semforos enteros - Semforos binarios - Monitores

BACI (Ben Ari Compiler)


bacc prog.cm
Prog.cm

bainterp prog
Entrada de teclado

bacc

Compilacin con xito Archivo objeto prog.pco Listado de compilacin prog.lst


Errores de compilacin Editor de Textos

Prog.p

bapas

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 cdigo objeto intermedio, llamado PCODE. Durante la compilacin se crean dos archivos :
-.lst -.pco

- El interprete: ejecuta el cdigo de objeto creado por el compilador: .pco

BACI (Ben Ari Compiler)


El ncleo del interprete es un planificador preferente:
- Durante la ejecucin este planificador cambia aleatoriamente los procesos en ejecucin, simulando la ejecucin en paralelo de procesos concurrente

BACI (Ben Ari Compiler)


SINTAXIS DE BACI
- Similar a c++ - Simplificacin de algunos elementos de c++ - Se han aadido algunas restricciones

BACI (Ben Ari Compiler)


Variables:
-Tipos de datos simple:
-Int : int i -Char: char var -String: string[20] cadena -Typedef tambin 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 parmetros 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 alfabticamente antes que y. - Devuelve >0 si la cadena x va alfabeticamente despus que y.

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

BACI (Ben Ari Compiler)


- Funciones:
Cada programa debe tener una funcin 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 tambin recursividad. . Los parmetros 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 inclusin de ficheros de cabecera del estndar C++, as como otros que no sean del sistema:
- #include <> - #include .

- Sentencias de ejecucin
- 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 funcin non-preemptible, es decir, cuando una funcin de este tipo comienza su ejecucin no puede ser interrumpida hasta que termina. Nombre_funcion atomic() { cdigo de la funcin; }

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 parmetro. int which_proc(void): devuelve el nmero de proceso de la tarea actual. int random(int range): devuelve un nmero 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 semforos binarios
. Soportan slo valores 0 y 1

Declaracin: . semaphore semaforo1; // semforo general . Binarysem semaforo2; // semforo binario

BACI (Ben Ari Compiler)


Inicializacin:
initialsem (nombre-semforo, expresin-entera). El valor por defecto de un semforo es 0. -Funcin wait
Puede ser llamada de dos formas: . wait(nombre_semaforo) . p(nombre_semaforo) Si el valor del semforo es mayor que 0, la funcin decrementar el valor del semforo en 1, si es 0, el proceso que la llama se quedar bloqueado.

BACI (Ben Ari Compiler)


-Funcin signal
Puede ser llamada de dos formas: . signal(nombre_semaforo) . v(nombre_semaforo) Si un proceso est bloqueado por el semforo, se despertar con la llamada a signal.

BACI (Ben Ari Compiler)


-Instalacin de Baci
Bajarse de la pgina de la asignatura, o mi pgina 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 grfico de ejecucin. - Compilador: bacc - Intrprete: bainterp - Entorno grfico: bagui

BACI (Ben Ari Compiler)


Los programas fuentes se crearn con la extensin .cm. Compilamos: bacc nprog.cm
Esta compilacin genera: . Un programa objeto en pcode nprog.pco . Un programa intermedio donde aparecen los pasos de compilacin 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 activacin para las entradas de cada proceso -x: mostrar el registro de activacin en la salida de cada proceso. -t: anuncia la terminacin de procesos -h: mostrar ayuda -p: mostrar las instrucciones PCODE, es decir como se ejecutan.

- bagui nprog.pco (Ejecutando con entorno grfico)

BACI (Ben Ari Compiler)


Webs donde obtener informacin
-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 grfico 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 Edicin). 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.

Вам также может понравиться