baci (ben ari compiler)
TRANSCRIPT
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.
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
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
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
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
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
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
BACI (BACI (BenBen AriAri CompilerCompiler))
SINTAXIS DE BACI
- Similar a c++
- Simplificación de algunos elementos de c++
- Se han añadido algunas restricciones
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
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)
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.
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()
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
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
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(…);}
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;
}
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.
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
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.
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.
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
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”.
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)
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)
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.