mexico, df diciembre de 1991 j

Anuncio
-
MEXICO, D.F. DICIEMBRE DE 1991 J
CONTENIDO
\
I
INTRODUCCION
l.
PROCESOS Y SU
CONVIVENCIA
1.1
Exclusidn
Mutua
1.1.1
1.2
Secciones
Criticas
7
1.3
SleepWakeup
(BloqueoDespertar)
8
1.4
Abrazo
Mortal
9
1.4.1
2.
2.2
1
\
c
3.
característicasdelabrazomortal
9
COMUNICACION Y SINCRONIZACION
ENTRE PROCESOS
2.1
3
exclusidnmutuaconespera
activa
12
Memoria
Compartida
13
2.1.1
semaforos
13
2.1.2
monifmes
16
Envíoy-pcidndeMensajes
19
2.2.1
implementacidn
del
mensaje
20
2.2.2
modelos
25
CONCLUSIONES
27
NOTAS
28
BIBLIOGRAFIA
29
..,..-.
~
",
."
.
,
INTRODUCCION
La programación concurrente desempeña hoy en díaun papel muy importante. Aunque
no siempre nos damoscuenta, la aprovechamos, por ejemplo, cuando retiramos dinero-mediante
un cajero automático.
AI inicio, las computadoras eran secuenciales, es decir, el procesador central ejecutaba
un
programa suspendiendo ocasionalmente sus acciones cuando necesitaba transportar los datos
por medio de los dispositivos de entraddsalida.
El desarrollotecnológicode hardware provocó un cambioenlaorganizacióndelas
computadoras, de manera que el procesador central ahora podía trabajar simultáneamente con
sus periféricos. Esto implica también, que más deun programa se podíaejecutar "casi" al mismo
un programa espera para el cumplimiento de la lecturalos
dedatos,
tiempo, pues, mientras que
el procesador puede ejecutar otro programa. A este tipo de servicio se le llamó multiprogramación, es decir,cuando una computadora divide sus recursos tales como: tiempo de procesador,
memoria y periféricos, entrevarios programas.
Más tarde, surge un nuevo concepto (debido a la baja en el costo y tamaño de los procesadora), se trataba de tener másde un programa (o más de una parte del mismo programa)
cjccutlndose verdaderamente en paralelo, compartiendo la memoria
comcepto se llamó multiprocesamiento.
y los periféricos; dicho
La ocurrencia paralelade varios eventos dentro deun sistema de cómputo tiene consigo
un buen
numerosos problemas: hay que coordinar la cooperación de varias unidades, asegurar
uso de la memoria compartida, distribuir el tiempo de
los procesadores y periféricos, evitar
bloqueo mutuo, etc.
En la actualidad, a medida que disminuye tanto el tamaiio comoprecio
el del hardware de
lascomputadoras, se irá produciendo una tendencia haciael
multiprocesamientoylamasificación
delparalelismo. Si ciertasoperacionespuedenserejecutadasenparalelodeformalógica,
entonces las computadoras del futuro las ejecutarán físicamente en paralelo.
J
PBg 1
El procesamiento en paralelo es interesante por varias razones.La gente parece más capaz de
centrar su atención en una sóla actividad a la vez, que de pensar en paralelo; por ejemplo,un
lector puede intentar leer dos libros al mismo tiempo, leyendo una línea de cada libro
alternativamente, esto indudablemente le hará notarlo dificil que es coordinar el entendimiento.
Phg 2
1. PROCESOS Y SU CONVIVENCIA
El concepto de proceso está implícita o explícitamente presente en todos los sistemas
operativosmultiprogramados.Es decir, sistemasoperativosqueproporcionangestiónde
archivos, y gestión de memoria, además de soportar la ejecución concurrente de programas.
Asimismo, su importancia ha sido reconocida por los diseiiadores de algunos lenguajes de alto
nivel, como Ada y Modula; que proporcionan mecanismos de manera específica para la gestión
de procesos simultáneos o concurrentes,E n esencia un PROCESO o TAREA es un caso de
programa en ejecución.
Es el trabajomínimo que es suceptible ser
deplanificado individualmente
por un sistema operativo.
1.1 E x c l u s i h Mutua
En programaciónsecuencial,lacooperación
entre variosmódulosdelprogramaestá
En el caso de la programación concurrente
generalmente basada en el uso de variables globales.
donde varios procesos se ejecutan a la vez, el uso no controlado de variables globales podría llevar
a resultados inesperados para los usuarios. Para evitar está ambigüedad en los resultados, hay
que asegurar que elacceso a una variable compartida(u otro recurso) sea adquirido de manera
exclusiva por cada proceso.
Este mecanismo de programación se llama
EXCLUSION MUTUA.
Cuando varios procesos tienen variables compartidas, suele darse
caso,el
en que doso más
procesos desean modificar
cierta variable compartida,lo cual no pueden hacerlo al mismo tiempo,
este problema puede solucionarse dándole a cada proceso acceso exclusivo a la variable compartida. Mientras un proceso accede a la variable compartida, los demás procesos que deseen
hacer lo mismo al mismo tiempo deben permanecer a espera;
la
cuando ese proceso termine de
acceder ala variable deseada, le será permitido proceder a uno los
de procesos en espera.
En otras palabras, enla exclusión mutua un proceso evita temporalmente alos otros usar
un recurso compartido durante las operaciones críticas que puede
afectar adversamente a la
integridad dcl sistcma, es dccir, s61o se pcrmitiri cl acceso al rccurso compartido mcncionadoal
proceso que ejecuta la sección crítica, y al resto de los procesos se les impedirá hacerlo'hastala
finalización apropiada de la sección crítica.
Pág
3
Por el momento, considérese que la sección crítica es la parte del programa donde se
M& adelante
manipula de alguna forma
a las variables compartidas por los distintos programas.
se da una definición más formal de este concepto.
1.1.1 exclusiiin mutua con espera activa
La solución más simple consiste en hacer que cada proceso desactive todas las interrupciones justo después de entraren su sección critica y l a s vuelve a activar antes de salir de ella.
Este método es poco atractivo por que es imprudente dar a los procesos del usuario el poder de
desactivar interrupciones.
Considérese que se tieneuna sola variable (decierre) compartida que inicialemente vale
O. Cuando un proceso desea entrarsuaregión crítica, este primero prueba
cerrojo.
el Si elcerrojo
es O, el proceso lo haceigual a 1, y entra en su sección critica. Si elcerrojo ya vale 1, el proceso
simplemente espera a que se vuelva
O. Por lo tanto, O significa que no hay ningún proceso en su
sección crítica, y 1 quiere decir que hay algún proceso en su sección crítica.
El algoritmo seria el siguiente:
Cerrojo (purtu);
ejecuta-sección-critica;
Quita-Cerrojo (pucrtu);
donde la variable compartida sería:
puerta.
Considérese la siguiente situación: existen dos procesos que comparten la variable
puerta,
el proceso 1 prueba el cerrojo y advierte que es O, en ese momento el proceso 1 entra a ser
planificado (va a la cola de procesos en espera) por causa de la terminación del tiempo del
procesador que le corresponde.
Ahora el proceso 2 es el proceso activo;y también prueba elcerrojo, luego lo coloca en1
y entra en su sección critica.
Cuando vuelve elproceso 1 a estar activo, continúa con
su tarea, y ahora coloca el cerrojo
en 1 y también entra en su sección crítica. Nótese que ahoraambos procesos están ejecutando
sus secciones críticasal mismo tiempo, lo cual eslo que se desea evitar.
PBg 4
Una solución alternativaes considerar "turnos"para entrar a la sección crítica:
En esta solución, la variableentera TURNO que inicialmente vale O, lleva el control de
los turnos de entrada en la seccidn críticay examina o actualiza la memoria compartida.
El algoritmosería el siguiente:
PROCESO-1;
WHILE ( TRUE )
{
WHILE ( TURNO < > O );
sección crítica;
TURNO = 1;
otras cosas;
I* espera *I
1;
PROCESO 2;
WHILE (TRUE )
{
WHILE ( TURNO e > 1 );
sección crílica;
TURNO = O;
otras cosas;
I* espera *I
1;
Tomar turnos no es adecuado cuando uno
de los procesoses mucho más lento que el otro.
Esta solución requiere que dos procesos alternen
se
estrictamente cuando entren ensus secciones
críticas.
U n algoritmo eficiente para asegurarla EXCLUSION MUTUAentre dos procesos,es el
propuesto por DEKKER, donde utiliza variablespara veriricar qué proceso requiere entrar a su
sección crítica y si en realidad le tocasu ''turno'' para entrar (en este caso se refiere a la variable
preferencia).
PROCESO-1;
{
while ( true ) {
proceso-1 = true;
while ( proceso-2 ) {
if ( preferencia = = 2 ) {
proceso-1 = false;
while ( p r e f r e m i u = = 2 );
proceso-1 = true;
};
sección-críticagroceso-1;
proceso-1 = false;
prefcreeniu = 2;
otros;
1:
I;
1;
PROCESO-2:
{
while ( true ) {
proceso-2 = true;
while ( proceso-1 ) {
if ( preferencia = = 1 ) {
proceso-2 = false;
while ( preferencia = = 1 );
proceso-2 = true;
1;
sección~críticagroceso~2;
proceso-2 = false;
preferencia = 1 ;
otros;
1;
1;
1;
PROCEDIMIENTO D E K U R :
{
proceso-2 = false:
proccso-1 = I'alsc:
parbegin
PROCESO-1;
PROCESO-2;
parend;
1;
PBg 6
.
-4-
"
*
W
I
.
-
." . ..
"
"
"
..
1.2 Secciones Criticas
La exclusión mutua necesita ser aplicada sólo cuando un proceso acceda a datos compartidos: cuando los procesos ejecutan operaciones que no estén en conflicto
entre sí, debe
permitirseles proceder de forma concurrente.
"Cuando un proceso está accediendoadatoscompartidossedicequeelprocesose
encuentra en su seccwn cririca"(1).Mientras un proceso se encuentra en su sección crítica, los
demás procesos pueden continuar con
su ejecución fuera desus secciones críticas.
Cuando un proceso abandona su sección crítica, entonces debe permitírsele proceder a
otro proceso que espera entraren su propia sccción crítica (si hubieraun proceso cn espera).
Estar dentro de una sección crítica es un estado muy especial asignado a un proceso. El
proceso tiene acceso exclusivo a los datos (o recursos) compartido y todos los demás proceso
que necesitan acceder a esos datoso permanecen en espera. Por lo tanto las secciones críticas
un progranla no debe bloquearse dentro de su sección
deben ser ejecutadas más
lo rápido posible,
crítica, y las secciones críticas deben ser codificadas con todo cuidado,para evitar, por ejemplo,
la posibilidad de incurrir en un ciclo infinito.
Se necesita quc se cumplan 4 condiciones paratener una solución adecuada:
1. Nuncadosprocesospuedenencontrarsesimultáneamentedentrode
sus secciones
críticas.
2.
No se hacen suposiciones acerca de l a s velocidadesrelativasde los procesos o del
número de CPU.
3.
Ningún proceso suspendido fuera de la sección crítica debe bloquearotros
a procesos.
4.
Nunca un proceso debe querer entrar en forma arbitraria ensu sección crítica.
P6g 7
1.3 Sleeywukeup (Bloqueo/Despertur)
Ahora almacenaremos algunas primitivas de comunicación
entre procesos que se bloquean
en vez de gastar el tiempo de
CPU
la cuandono tienen permiso de entrar sus
ensecciones críticas.
SLEEP es una llamada al sistema que hace que se desbloquee el
solicitante, es decir, que se
suspenda hasta que otro proceso lo desbloquee. La llamada WAKEUP tiene un parámetro, el
proceso que se desbloqueará.
'
Para poner un ejemplo de la forma en que se utilizan estas primitivas, consideremos el
problema del PRODUCTOR-CONSUMIDOR: Dos procesos compartenun buffer común de
tamaño fijo. Uno de ellos es el productor, coloca información
en el b u k r y el otro, el consumidor
la extrae. El problema se presenta cuando el productor quiere colocar
un nuevo elemento en el
y luego se desbloquee
buffer, pero éste ya está lleno.La solución es que el productor se bloquee
cuando el consumidor haya retirado uno o miis elementos. En forma análoga, si el consumidor
desea retirar un elemento del buffer y advierte que éste está vacío, se bloquea hasta que el
productor coloque algoen el buffer y lo desbloquee.
PRODUCTOR ( )
{
while (true)
{
produce-elementos ( );
I f cont==N)
S EEP ( );
coloca-elementos ( );
cont = cont + 1
if (cont = = 1)
WAKEUP (consumidor):
I
}:
};
CONSUMIDOR ( );
{
while (true)
{
if (cont == O )
SLEEP ( ):
147687
saca-elementos ( );
cont = cont - 1;
if(cont == N - 1 )
WAKEUP ( productor);
PBg 8
1.4 Abrazo Mortal
"Se dice que un proceso dentro de un sistema de multiprogramación está en ABRAZO
MORTAL (o estado de interbloqueo)si está esperando porun evento determinado queno va
a ocurrir" (2).
En el interbloqueo de un sistema están en situación hermética uno
o más procesos.
En sistemas computacionales multiprogramados, compartir los recursos es
l a s una
metasde
principales del sistema operativo. Cuando los recursos son compartidos entre una población de
usuarios, donde cada uno mantieneun control exclusivo sobre recursos determinados asignados
a este usuario, pueden producirse abrazos mortales en los
cuales de algunos usuarios
los procesos
nunca podrán llegara su término.
Un ejemplo es el siguiente:
Dos procesos P1 y P2 comparten los recursosR1 y R2 y que en un momento determinado,
el recursoR1 ha sido asignado al proceso P1 y que R2 ha sido asignado alproceso P2. Ahora el
proceso P1 solicita ademáa el recurso R2 para progresar sus acciones pero, como R2 ya esta
R1, ambos procesos quedan bloqueados
asignado al proceso P2 solicita el acceso al recurso
mutuamente. Cuando esto sucede, ninguno de los dos puede liberar el recurso que tiene asignado,
así que los dos quedan enun ABRAZO MORTALpara siempre.
1.4.1 características del abrazo mortal
Existen varios criterios que caracterizan aun ABRAZO MORTAL, uno de ellos es una
situaci6n ESTATICA.
En este criterio se estableceque un ABRAZO MORTALpuedesurgir siy sólo si ocurren
simultáneamente:
-
Los recursos se manejan en exclusión mutua.
Pág 9
-
Se genera una cadena circular de procesos, donde cada uno de ellos tienen asignados
uno o más recursos requeridos porlos otros procesos.
AI darsc las cuatro condicioncs se pucdc dar un ABRAZO MORTAL. Sc han diseñado
políticas para resolver el problema, éstas son las siguientes:
PREVENCION
El interés se centra en condicionar un sistema para que elimine toda posibilidad de que
abrazos mortales se produzcan.
La prevención es unasolución limpia lo
enque respecta al abrazo
mortal propiamente dicho, pero los métodos de prevención pueden.dar como resultado una
pobre utilizaci6n de los recursos. Sin embargo, los métodos de prevención del interbloqueo se
utilizan con gran frecuencia.
El método consiste en negaruna o más de las condiciones necesarias para que ocurra un
abrazo mortal, de esta manera cualquier posibilidad
de que ocurraun abrazo mortales eliminada
del sistema.
EVITACION
La meta es imponer condiciones menos estrictas que en la prevención, para intentar lograr
una mejor utilización de los recursos. La evitación no precondiciona al sistema para que evite
un abrazo mortal.En su lugar, los métodos de evitación
todas las posibilidades de que se produzca
permiten la aparición del abrazo mortal, pero siempre que se produce una posibilidad de abrazo
mortal, este se esquiva.
Si las condiciones necesarias para que tenga lugar
un abrazo mortal están ensu lugar, aún
los recursos. Talvez el algoritmo de evitación de
es posible evitarlo, teniendo cuidado al asignar
interbloqueo más famoso es eldef
bumper-ode Dijkstra, denominado coneste interesante nombre
y recibe pagos de unafuente dada de
debido a que introduce un
a banquero que hace préstamos
capital.
P4g 10
DETECClON
Estos métodos. se utilizan en sistemas que permiten que éstos ocurran, ya sea de forma
voluntaria o involuntaria. La meta de la detección
del abrazo mortal es determinar
si ha ocurrido
un abrazo y detectar precisamente aquellos procesosy recursos implicados enél. Una vez determinado, éste puede ser eliminado del sistema.
RECUPERACION
Estos métodos se utilizan para despejar abrazos mortales de un sistema, de manera que
y losproccsos estancadosllcgucn a su tcrminaci6n, liberando
pucdaseguir operando libre de ellos,
así sus recursos. En el mejor de los casos, la recuperación esun problema sucioy la mayoría de
los sistemas se liberan del abrazo mortal extrayendo
su en
totalidad a uno o varios delos procesos
con
bloqueados. Entonceslos procesos extraidos se reinician de forma normal desde el principio,
la pérdida de la mayor parte(si no de la totalidad) del trabajo previamente realizado por éstos.
147687
PBg 11
2. COMUNICACION Y SINCRONIZACION ENTREPROCESOS
Losprocesoscon frecuencia necesitan comunicarse otros
con procesos. Cuandoun proceso
del usuario desealeer el contenido de
un archivo, este debe señalaral proceso del archivolo que
desea. Después el proceso' del archivotiene que indicar'al proceso del disco que lea el bloque
que se pide. En resumen, se necesita establecer comunicación entre los procesos, preferentemente en forma bien estructurada.
Sin embargo, para que funcione apropiadamente un grupo de procesos, se deben sincronizar sus actividades de forma que se asegure la integridad de las relaciones de precedencia
".
dictadas por el problema que se está resolviendo.
La sincronización entre procesos es necesaria para preservar la integridad del sistemay
prevenir problemas de tiempo producidos por el acceso concurrente a recursos compartidos por
múltiples procesos.
"Llamaremosproccsosccuettcial a alguna ocurrencia de instrucciones queejecuta
se
en una
los llamaremos
computadora. Cuando 'tenemos varios procesos ejecutandose al mismo tiempo,
proccsos concurrc~css"(3).
Los procesosconcurrentespuedencomunicarsepormediodela
memoria compartida (variables globales),o enviando mensajes por medio de canales.
Si los procesos concurrentes accesan.de manera segura a las variables compartidas, sin
afectar a sus cooperadores (los otros procesos), los llamaremos "procesos concurrentes ajenos",
pero si existe alguna afección (i.e. afecta el uso de las variables compartidas), los llamaremos
''procesos concurrentes cooperantes".'
Que P1, P2, ..., Pn (Pi = Proceso i) sean ajenos quiere decir que cuando la variable com. partida es cambiada por el proceso Pi, la misma variable no puede aparecer en l a s intrucciones
del proceso Pj (para cada i < > j). Esto significa 'que los procesos concurrentes ajeno pueden
compartir variables globlales sin restricciones solamente cuando las usan para lecturas. Pero una
vez que uno de ellos cambia el valor de la variable global, queda prohibido el acceso a ésta por
los demás.
PBg 12
2.1 Memoria Compartida
Los procesos definidos por el sistema son creados comúnmentelos
ensistemas operativos
deprop6sitogeneralparasacarpartidode la posible concurrencia entre losdil'erentes programas
o aplicaciones. Cuando es crítico el rendimiento, se pucdc dividir el trabajo en varios procesos
un programa
cooperantes definidos por el programador para explotar la posible concurrencia
en
o aplicación dada.
Los procesos cooperantes típicamente comparten recursos que atañen al grupo entero
(familia), Los recursos compartidos pueden ser los datos globales que abarca la familia o los
dispositivos físicos que están permanente
o temporalmente asignadosa la aplicación en cuestión.
y sincronizar alos procesos que tienen memoria
Analizaremos dos métodos para comunicar
compartida:
2.1.1 semáforos
Unade las soluciones mis fanosas y significanlesdelproblemadecooperación
entre
procesos paralelosfue la propuesta por Dijkstra, quien extractó las nociones clave de la exclusión
mutua en suconcepto de semáforo. Un semáforo es una variable protegida cuyo valor puede ser
(que
P Y V como se verá
más adelante).
accedidoy alterado solamente por ciertas operaciones son
Su solución introdujo un nuevo tipo de variables:
- Un contador,
- Una cola de procesos en espera (dormido)y
- Dos funciones primitivas llamadasP y V.
La operación P en el semáforo S, opera de la siguiente manera:
P(S);
{
if ( D O )
S
= S-1;
else
espcra en S:
}:
Pág 13
La operación V en el semáforo S, opera de la siguiente manera:
V(S);
{
if (uno o más procesos están en espera en S )
deja proseguir a uno de estos procesos
else
S = s+l;
}:
Los semáforos y
l a s operaciones de semáforos pueden implementarse en software o
hardware, En general, se implementan en el núcleo del
S.O., donde se controlan los cambios de
estado de un proceso.
La idea básica de la solución de Dijkstra esla suspensión de los procesos que no pueden
entrar y su reactivación cuando algún proceso sale de la sección (5).
Semiforos Binarios. Só10 pueden tomar dos valores,O y 1.Son manejadospor el proceso
asociado a la siluaci6n crítica (llamados también "privados").
Semiforos Continuos. Pueden tomar valoresenteros no negativos. El entero asociado al
semáforo representa el número de recursos disponibleso de procesos en la cola
de espera.
EXCLUSION MUTUA CON SEMAFOROS
El problema de la exclusión mutua se
puede resolver correctamente usando los semáforos
y las operaciones P y V, pero el usuario tiene que cumplir las siguientes condiciones:
1. El valor inicial del semáforo es igual a 1
2. Entrar a la sección críticaejecutando P(S)
3. Salir de la sección critica ejecutando V(S)
147687
4. No usar operaciones P(S) y V(S) para otros propósilos
El algoritmo sería el siguiente:
Pág 14
SEMAFOROS (); /* El semiforo S es binario */
{
S = 1;
/* libre */
cobegin
PROCESO-1;
PROCESO-2;
coend;
1;
PROCESO-l();
{
while (true)
{
P(S);
sección-crítica:
V(W;
otras-cosas-Proceso-1 :
}:
}:
PROCESO-20;
{
while (true)
{
P(S);
sección-crítica;
V(S):
otras_cosas-Proceso-2;
1;
1;
PROBLEMA DEL PRODUCTOR-CONSUMIDOK UTILIZAN110 SEMAFOKOS
Definiciones:
N es el número de runuras en el buffer
S es el semábro para entrar a la sección-crítica. Se inicializa con 1.
Vacío es el semáforo quecuenta las ranuras vacías del buffer.Se inicializa conN.
Lleno es el semáforo quecuenta las ranuras completas del buffer. Se incializa con
O.
PBg 15
PRODUCTOR ();
{
while (true)
{
produce-elemento (&elem);
P(Vaci0);
P(S);
coloca-elemento (elem);
/* genera algo paracolocarlo en el buffer *I
/* disminuir cl contco vacío */
/* meter la regióncrítica */
/* coloca el nvo. elemento en el buffer *I
/* salir de la región critica */
/* incrementar el conteo deranuras repletas *I
CONSUMIDOR ();
{
while (true)
{
1;
P (lleno);
P(S);
saca-elemento (&elem):
V(S):
V(Vacío);
Consume-elem (elem):
Consume-elem (elem);
1;
/* disminuir el conteo repleto */
/* meter la región crítica */
/* tomar un elemento del buffer */
/* salir de la región crítica */
/* incrementar el conteo de ranuras vacías
*/
/* hacer algo con el elemento */
2.1.2 monitores
Otra solución no menos importante que la
anterior (semáforos) para resolver el problema
de la cooperaciónentre procesos paralelos esla que a continuación se presenta:
MONITORES.
"Un monitor es un conjunto dc procedimientos, variables y cstructuras de datos que se
agrupan en un tipo especial de módulo o paquete"(6). También se considera como una con. strucción de concurrencia que contiene los datos y procedimientos necesarios para realizar la
asignación de un determinado recurso compartidoo de un grupo de recursos compartidos.
PBg 16
L o s procesos pueden llamar a procedimientos en
un monitor siempre quelo deseen, pero
no puedenaccesardirectamente l a s estructurasdedatosinternasdelmonitorapartirde
procedimientos declarados fuera del monitor
Los monitorcs ticnenun propiedad importante quelos hace útiles para lograr la exclusión
mútua: sólo un proceso puede estar activo enun monitor en cualquier instante."Los monitores
son una construcción de un lenguaje de programación, de manera que el compilador sabe que
son especiales y puede manejar llamadas a procedimientos monitores en forma distinta a otras
llamadas a procedimientos"(7). Comúnmente, cuando un proceso llama a un procedimiento
si hay algúnotro procedimiento
monitor, las primeras instrucciones del procedimientoverificarán
otro proceso está utilizando el monitor, el proceso solicitante
activo dentro del monitor.ningún
Si
puede entrar.
Es tarea del compilador implementar la exclusión mutua en las captaciones del monitor,
la persona que escribe el monitorno tiene que estar enterada de la forma en que el compilador
se las arregla para lograr la exclusión mutua. Basta saber que al convertir todas l a s secciones
críticas en procedimientos monitores, nunca dos procesos ejecutarán sus secciones críticas al
mismo tiempo.
MONITOR Ejemplo
{
i entero:
c condicibn:
procedimicnto PRODUCTOR (X):
procedimiento CONSUMIDOR (X);
Aunque los monitores ofrecen una manera sencilla de lograr la exclusión mutua, eso no
los procesossebloqueencuandonopuedan
basta,tambiénsenecesitaunamaneradeque
l a s pruebas
continuar. En el problema del productory consumidor, es bastante fiicil colocar todas
-de buffer lleno y buffer vacío en procedimientos monitores, pero ¿Cómo se debe bloquear el
productor cuando encuentre lleno el buffer?
Pág
17
La solución yace en la introducción dc "variables
dc condición", junto con
dos operaciones
que se realizan con ellas, WAIT y SIGNAL. Cuando un procedimiento monitor descubre que
no puede proseguir (porejemplo, el productor encuentra lleno
el buffer), realizauna operación
WAITcon algunavariable de condición,por ejemplo,"lleno".
Esta acci6n ocasionaque se bloquee
el proceso solicitante. También permite que entre ahora
al monitorotro proceso al que ya antes
se le había negado la entrada.
Este otro proceso, por ejemploel consumidor, puede desbloquear a su socio bloqueado
realizando una operaciónSIGNAL con la variable de condición en la que esperasu socio. Para
evitar que haya dos procesos activos en el monitor al mismo tiempo, se necesita una regla que
señale lo que sucede después de una operaciónSIGNAL. Esta regla indica queun proceso que
realiza una operación SIGNAL debe salir del monitor de inmediato. En otras palabras, una
proposición SIGNAL sólo puede aparecer como proposición final un
enprocedimiento monitor.
PROBLEMA DELPRODUCTOR-CONSUM IDOR CON MONITORES
MONITOR Productor-Consumidor ();
{
lleno, vacio condicion;
cont entero;
procedimien to Coloca;
{
if cont = = N)
SJAIT (lleno);
produce-elemento;
cont = cont+l;
il(cont = 1)
SIGNAL (vacio);
};
procedimiento Remueve;
if (cont = = O)
WAIT (vacio);
saca-elemento:
cont = cont - 1:
if (cont == N-1)
SIGNAL (lleno);
1;
cont = O;
1 MONITOR;
PBg 18
PRODUCTOR ();
{
while (true)
{
1;
roduce-elemento;
Froductor-ConsumidorColoca;
};
CONSUMIDOR ();
while (true)
{
1;
Productor-Consumidor.Remueve;
consume-elemento;
};
2.2 Envio y Recepcih de Mensajes
Desde que la sincronización y comunicación entre procesos es necesaria para soportar la
ejecución de procesos concurrentes, es deseable integrar las dos funciones en un mecanismo
ímico.
Los mensajes son un mecanismo relativamente sencillo que encaja en la sincronización y
comunicación entre procesos en entornos centralizados, así como distribuidos. El envío y la
recepcióndemensajeses
unaformaestándardecomunicación
entre puestosenredesde
computadoras, haciéndolomuy atractivo para argumentar esta facilidad, así como proporcionar
las funciones de comunicaciónentre procesos.
En escencia,"un mensaje esuna colección de información que se puede intercambiar
entre
un proceso emisory uno receptor"(6). Un mensaje puedecontener datosy órdenes de ejecución
o incluso algún código transmitido entre dos o más procesos. Por ejemplo los mensajes se usan
I'rccucntcmcntc cnsistcnlasdistribuidosparatransferirgrandcsproporcioncs
de sistcma
operativo ylo programas de aplicación para modos remotos.
Phg 19
En general, el formato de mensaje es flexible y negociable para cada par específico de
emisor-receptor. Se puede pensar en un mensaje como caracterizado por su tipo, longitud ID
del transmisor y receptor, y un campo de datos:
ID del transmisor
cabecera del mensaje
Cuerpo del mensaje (opcional)
Divide el contenido del mensaje en dos campos separados: cabecera del mensaje
y cuerpo
del mismo. El cuerpo opcional del mensaje, cuando está, típicamenta contiene el mensaje real,
y su longitud puede variar de mensaje a mensaje.
2.2.1 implementaciiin del mensaje
Las operaciones típicasde mensajes que el sistema operativo puede daro predeclarar en
un lenguaje de implementación de sistema son "transmitir"
un mensaje y "recibir" un mensaje.
La implementación de mensajes puede diferir en una serie de detalles que, entre otras
cosas, afectanal funcionamiento y parámetros de l a s operaciones transmite y recibe. Varios de
los problemas importantes en la implementación de mensajes son:
l.
Designación
2.
Copia
3.
Almacenamiento
Intermedio
4.
Longitud
PBg 20
DESIGNACION
Una del a s decisiones más importantes cuando se disefia una facilidad de mensajes
es si la
designación seria directa o indirecta. Por "dcsignación directa", entcndercmos que siempre que
se llame a una operación de mensaje, cada transmisor debe designar el recipiente específicoy,
recíprocamente, cadareceptor debe nombrar la fuentedc la que desea recibirun mensaje. Por
ejemplo:
proceso-A;
...
transmite (B, mensaje);
e..
proceso-B:
...
recibe (A, mensaje);
La asignación unoa uno producida proporciona una comunicación segura de mensajes
lejos
de confundir identidades,pero puede serun incoveniente parala implementación de rutinas de
servicio. Por ejemplo, un controlador de impresora4rviendo al sistema completo es de poco uso
si debe saber los nombres de todos sus clientes y especificar siempre el particular desde donde
viene la próxima orden de trabajo.
los
Unmétodoalternativoeslacomunicacióndemensajesllamada"indirecta"donde
mensajes se envían y reciben desde depósitos especializados dedicados a ese propósito.Estos
recipientes se llamannormalmenteBuzones,debidoa
su formadefuncionamiento(9). Por
ejemplo, si el proceso A deseaenviar un mensaje al proceso B a través de Buzon-1, pueden ser
necesarias las siguientes sentencias:
proceso A:
...
transmite (Buzon-1, mensaje);
...
proceso B;
...
recibe (Buzon-1, mensaje);
147681
PBg 21
COPlA
Por definición, "el intercambio de mensajes
ente dos procesos, transfiere el contenido del
tnensaje desde el espacio de direcciones del transmisor al receptor"(
10). Esto se puede conseguir
copiando el mensaje completo en el espacio de direcciones receptor
dcl
o simplemente pasando
un puntero al mensaje entre los dos procesos, en otras palabras, el paso del mensaje puede ser
por valoro por referencia.
Los mensajes copiados consumen memoria
y ciclos de CPU.La comunicación asincrónica
de mensajes ylo los esquemas de protección de memoria pueden necesitar que cada mensaje
primero se copie desde el espacio del transmisor laa memoria intermediadcl sistema operativo
y desde allí posteriormente se copia al espacio del proceso
receptor: doble copia para enviarun
solo mensaje.
Una consecuencia de
tener una copia única del mensaje
es que mientras el proceso
receptor
está usando el mensaje, el transmisor no puede modificar ninguna parte de
él.
ALMACENAMlENTO INTERMEDIO
La pregunta es si los mensajes enviados pero no recibidos todavía deberían ser almacenados
o no. Es decir, si el sistema no almacena temporalmente los mensajes emitidos, el transmisor y
el receptor deben estar activos y buscando intercambiar un mensaje para que tenga lugar una
transferencia.
La comunicación transmisor-receptor, cuandono se almacenan los mensajes, es síncrona
en sentido de que puede tener lugar sólo entre dos partes que quieran el cambio activamente.
un par transmisor-receptor.
Consecuentemente, alo más un mensaje debe emitir a la vez por
La ventaja de este mecanismo síncrono de envía-recibe mensaje son sus procesos suplementarios comparativamente bajosy la f k i l implementación.
Una desventaja es la sincronización forzosa de la operación de transmisores
y receptores,
Unaalternativa,almacenamientointermediodemensajes,permite
elfuncionamiento
asíncrono de transmisoresy receptores. Si los receptores no están esperando,un emisor manda
. Bu mensaje al sistema operativo para el envío posterior al reccptor.
Pág
22
Como el sistema operativo aceptay almacena temporalmente los mensajes enviadospero
su ejecución después de enviar
un mensaje y no necesita
no recibidos, un proceso puede continuar
los receptores.
suspenderse, despreocupándose de la actividad de
Un problema relacionado, común para ambas implementaciones, es el de laposposición
indefinida. Esto pasa cuando se envía
un mensaje, pero nadielo recibe, es decir, debido a quiebra
del receptor, o cuando un receptor está esperandoun mensaje que nunca se produce.
Dos formas
comunes de conducir este problema son la versión no bloqueada (sin espera) de la primitiva
RECIBE y una implementación de espera temporizada deRECIBE.
El no bloqueo esuna forma especial de la primitiva
RECIBE que es soportada en algunos
sistemas para permitirrecibir un mensaje si se está disponible,pero sin esperar si no lo está.
Unaaproximaciónalproblemamásdirecta,
pero más compleja, es proporcionar una
facilidad de establecer un límite de tiempo durante el cual se debe complctar
un intercambio
concreto de mensaje. Esta necesita una secuencia modificada de llamada de las operaciones de
mensaje, por ejemplo:
recibe (buzón, mensaje, tiempo-límite)
LONGITUD
El problema es si los mensajes deberían ser de longitudfija o variable. Este problema no
es de gran importancia en sistemas dondc el paso de mensajes sc hace a través de punteros, ya
que se puede proporcionar un tamaño diferente de ventana para cada transmisión incluyendo
un parámetro Único, "tamaño-ventana", en el propio mensaje.
Usualmente los mensajesdetamaño fijo producenunamenorcantidaddeprocesos
suplementarios al permitir que las memorias intermedias correspondientes del sistema sean de
tamaño fijo, lo que hace muy sencilla y eficaz su asignación. El problema es que los mensajes,
y dividirlosen pedazos
cuando se usan paracomunicación naturalmentevienen en varios tamaños,
pequeñosdetamaño fijo producefrecuentemente un procesosuplementarioadicional. La
alternativa,mensajesdetamañovariable,aliviaestosproblemascreandodinámicamente
memorias intermedias paraencajar el tamaño de cada mensaje.
PBg 23
PROBLEMA DEL PRODUCTOR-CONSUMIDOR (VERSION DE ALMACENAMIENTO LIMITADO
CON MENSAJES)
En vez de tener unamemoria intermedia únicaglobal para todoslosprocesos, se distribuyen
sobre los mensajes porcionesindividuales de memoria intcrrnedia. Se supone que el campo de
datos está presente en cada mensaje y dimensionado de forma que sea capaz de guardar un
elemento Único producido.
Para intercambiarmensajesentreproductores
"Puede-Prod" y "Puede-Cons''.
y consumidoresseusandosbuzones,
Se supone que cada proceso productor coge
un mensaje del buzón "Puede-Prod". Después
de llenar el mensaje con el elemento producido, el productor envia el mensaje al buzón "Puede-Cons"para su construcción. Un procesoconsumidorquita un mensajedelbuzón"Puede-Cons",consumeelelementocontenido
en 61 y devuelveelmensajevacíoalbuzón
"Puede-Prod".
Definiciones:
"mensaje"
"capacidad"
"nulo"
llill
es un registro
es la capacidad de almacenamiento
cs cl lncnsaje vacío
es un entero
MENSAJES-PRODUCTORES-CONSUMIDORES ():
{
Crea-Buzón (Puede-Prod);
Crea-Buzón (Puede-Cons);
for (i = O, i capacidad,transmite(Puedc-Prod,nulo))
cobegin
PRODUCTORES ();
CONSUMIDORES ():
coend;
1;
PBg 24
PRODUCTOR ();
{
while (true)
{
recibe (Puede-Prod, pmsg);
pmsg = produce;
transmite (Puede-Cons, pmsg);
otrosgrocesamientos;
/* pmsg es una variable local de
tipo nlensajc */
};
1;
CONSUMIDOR ();
{
while (true)
recibe (Puede-Cons, cmsg);
consume (cmsg);
transmite (Puede-Cons, cmsg);
otrosgrocesamientos;
/* cmsg es una variable local de
tipo mensaje */
};
1;
2.2.2 modelos
En esta parte discutimos cuatro modelos
básicos de envíoy recepción de mensajes:
a) Mensajes punto a punto
b) Rendezvous
c) Llamada a procedimientos remotos
d) Mensajes uno a muchos
MENSAJES PUNTO A PUNTO
Es el modelo más elemental
y el más utilizado. Este modelo involucra dos partes:
el emisor
y el receptor.
Pág 25
I
I
El emisor inicia la interacción explícitamente; por ejemplo, envía
un mensaje o invoca a un
procedimiento remoto.Por el otro lado, la recepción del mensaje puede ser implícita
o explícita.
Si la recepción es implícita, el receptor recibe el mensaje
y qué acciones tomará cuando el
mensaje llegue. Si la recepción es explícita, el receptor puede estar en diferentesy estados
recibir
diferentes tipos de mensaje.
El envío y recepción de los mensajes puede ser síncrono o asíncrono; si es síncrono, el
elnisor al enviarun mensaje se bloquea hasta que el
receptor lo recibe. Si es asíncrono, el emisor
no necesita bloquearse al enviar el mensaje, aún cuando elreceptor no lo haya recibido aún.
RENDEZVOUS
Se basa en 3 conceptos:
- Declaración
-
Llamada
Aceptación
La declaración y la aceptación son parte del emisor.
La declaración es sintácticamente
parecida auna declaración de procedimiento,la llamada es similara llamar a un procedimiento.
La aceptación puede contener una lista de sentencias que serán ejecutadas cuando la entrada
sea llamada, ej.:
accept incr (x:integer;y:out integer)
doy:= x + 1;
end:
LLAMADA A PROCEDIMIENTOS REMOTOS
Es similar a una llamada de procedimiento excepto que el solicitante
diferentes procesos.
y el receptor son
Cuando un proceso S llama a un procedimiento remotoP de un proceso R,losparámetros
de entradasuplantados por
S son enviadosa R.Cuando R recibe la solicitud invocada, éste ejecuta
el código deP y entonces pasa cualquier parámetro de salida S.
a
Pbg 26
3. CONCLUSIONES
Se ha visto que el estudio de la programación concurrente, presenta dos aspectos importantes que debemos considerar:los procesos y sus interacciones, y la comunicación y sincronización entre los mismos.
AI analizar los procesos y sus interacciones, se presentan varios problemas, tales como:
la
perdida de integridad de lasvariablesque comparten varios procesos,
es decir, el uso incontrolado
de las variables compartidas por tales procesos, así como la ocurrencia de situaciones llamadas
"abrazos mortales",en los cuales los procesos se bloquean mutuamente.
Por consiguiente se han desarrollado soluciones a dichos problemas; tales como la "excl-
usión mutua", o "bloqueo/desbloqueo",entre otras.
Por otro lado, la comunicacióny sincronización entre procesos también presenta problem a s ; los procesos necesitan establecer comunicación entre ellos y para ello seexponen dos
esquemas de comunicación: memoria compartida
y envío y recepci6n de mensajes.
AI estudiar estos aspectos nos damos cuenta que la programación concurrente no es un
tema fácil de dominar, debido a que presenta problemas de implementación algo complejos,
además de serun tema de profunda investigación.
Tarnbién se puede concluir que en un futuro cercano exista la tendencia hacia el multiprocesamiento, ya que el costo y el tamaño delos procesadores es cada vez menor,y Csto implica
que se puedan colocar varios procesadores trabajando juntos y así llevar a cabo un verdadero
paralelismo.
PBg
27
NOI’AS
1. Harvey M. Deilel. Introducciona los sistemas operativos,
pp. 80.
2. Milan Milenkovic. Sistemas operativos. conceptosv diseño ,
pp. 102.
3. Hanna Oktaba. “Programaciónconcurrente”,
Comunicaciones técnicas, pp. 4.
4. Harvey M. Deitel. OD. cit. ,pp.91.
5. Milan Milenkovic. Opcit. ,pp.125.
6. Andrew S. Tanenbaum. Sistemas operalivos, diseñoe implementación ,pp. 67.
7. Ib., pp.68.
8. Henri E.Bal. ProcramminP lanrluages for distrihuited computine svstems,pp. 87.
9. Hanna Oktaba. Op. cit., pp 39.
10. Henri E. Bal. OD.cit,, pp. 101.
BIBLIOGRAFIA
Ba1,Henri E. (1989) Prolrrammine laneuarrcs for distributcd cotnDutinrr
,
svstems .Ed. ACMComputing Surveys, E.U., 356 pp.
Deite1,Harvey M. (1990) Introducción a los sistemas operativos,
Ed.Addison-Wesley ,México, 673 pp.
Milan,Milenkovic.(l988)Sistemas Operativos. conceptosv diseño,
Ed. Mc Grawn Hill ,México, 486 pp.
Oktaba,Hanna.( 1985) "Programación concurrente",
Comunicaciones Técnicas ,(México) IIMAS UNAM, 112 pp.
Tanenbaum, AndrewS.( 1988) Sistemas Operativos. diseño e implementación,
tr. J.C. Vega Fagoaga ,Ed. Prentice Hall, México, 733 pp.
UNIVERSIDAD AUTONOMA METROPOLITANA
IZTAPALAPA
.
CIENCIAS BASICAS E INGENIERIA
PROYECTO DE INVESTIGACIONII
DISEÑO E IMPLEMENTACION DE UN
'
.MINILENGUAJE DE PROGRAMACION CONCURRENTE
ALUMNA:LETICIA
ILLESCAS SERRANO
ASESORA: M. C. ELIZABETH PEREZ CORTES
TRIMESTRF. 92-P
'
MEXICO,
D.F.
CONTENIDO
INTRODUCCION
1
1.
MODELO
DEL
PARALELISMO
2
2.
DEFINICION
DE
4
3.
EL COMPILADOR
LA GRAMATICA
3.1
Analizador Lerricogrhfico
3.2
Analizador Sintktico
33
Analizador Semhtico
3.4Generadorde
C6digo Intermedio
BIBLIOGRAFIA
PROGRAMAS FUENTE
7
8
14
INTRODUCCION
Este proyecto tiene como objetivo principal el diseño e implantaci6n un
de minilenguaje de programaci6n paralela, ademb de desarrollar todo un ambiente de ejhci6n, que consta de un editor de
programas, un editor de laberintos,un compilador,un indrprete, un depurador y algunas utilerías.
se parte de una idea inicial donde empezamos por definir con que
Para realizar todo este trabajo,
un mundo que contiene
universo vamosa trabajar.Esto es: existeun robot llamadoKAREL el cual vive en
laberintosy trompos, KARELpuede detectar
dichos trompos,tomarlos
o dejarlos,tambihpuede detectar
y por último posee una brújula para orientarse.
paredes (laberintos) para no chocar con ellos,
La idea final es construir un mundo en el que puedan convivir =
varios
L.'s
al mismo tiempo y aún
m b que puedan comunicarseentre ellos.
E n tomo al ambiente de ejecuci6n, se desea tener un conjunto de herramientas con las cualesse
pueda realizar desde la edici6n del programa hasta el ejecucidn del mismo.
El Editor De Programas es un editor de textos que permite
al usuario introducir los programas fuente
que posteriormentes e r h ejecutados.
El Editor de Laberintos permiteal usuario editar sus propios laberintos para
el mundo deKAREL.
El Compilador verifica un programa fuente,
si no ocurre algúnerror durante la verificaci6n entonces
genera un archivo objeto.
El Interpretetoma el archivo objeto generado por el compilador
y lo ejecutainstruccidn por inStNWi6n.
El Depurador permite correr paso a paso un programa del ukrio,y verificar el estado en que se
encuentra dicho programa cada vez que
se ejecuta una instruccibn.
Ya que se tiene un panorama general de lo que se desea realizar, ahora lo primero que se debe
aimplantar, una vez definido el modelo
se define la
gramAttica
definir es el modelo del paralelismose va
que
del lenguaje y posteriormente se irnplementa cada parte del ambiente de ejecuci6n mencionado anteriormente.
Pbg 1
1. MODELO
DELPARALELISMO
E n esta partese define cualser& el modelo del paralelismo que
se va a implantar, para dicho modelo
se deben definir las siguientes partes:
1) UNIDAD DEL PARALELISMO.
E n un entorno de paralelismo existen varias unidadesejecuthdose al mismo tiempo, para nuestro
modelo vamos a utilizar como unidades de paralelismoPROCESOS.
a los
Cuando se activen los KAREL's,cada uno dar6 origen
a un proceso,estos procesos
s e r h conjuntos de
ordenes quese e j m t a r h al mismo tiempo.
2) SINCRONIZACION Y COMUNICACION.
La comunicaci6n que
establecerh los KAREL'sserl por medio de
MENSAJES. Dentro delos mensajes
se envian señales de tipo 16gico que cadaKAREL interpreta. Estos mensajesson 6rdenes que Forman
parte del lenguaje,son dos tipos de mensajes; uno que envia
y otro que recibe señales. La especificaci6n
es:
para tales mensajes
ENVZA (receptor ;señales ) y
RECIBE (emkor ;señales )
El receptor es el KAREL que recibe l a s señales y el emisor es elKAREL que envial a s señales.
Las señales puedenser variables declaradas de tipo
16gic0, o l a s constantes V y F.
Otro parhetro que se debe definir es la sincronía de la comunicaci6n,
los mensajes s e r h sincronos, es
KAREL
decir,si un KAREL envia un mensaje aotro ,Qte no podrh continuar con sutarea hasta que el
receptor haya recibido el mensaje completo
3) ACI'IVACION.
La activaci6n en paralelo de los KAREL's
se va a indicar por medio de una orden. Para nuestro modelo
la orden ser& EN-PARALELO
PBg 2
4) CONTROL Y EXPRESION DELNO DETERMINISMO.
El no determinismo surge cuando varias partes del proceso son candidatos a ser ejecutadas
y solo una
de ellas debe efectuarse, para expresar el no determinism0 dentro de nuestro lenguaje introducimos una
orden llamada ALTERNATIVA cuya especificaci6n es:
ALT: cuerpo FIN
El cuerpo es una secuencia de custodiasy acciones, dondel a s custodias son expresiones condicionales
y l a s acciones son instrucciones que
se deben ejecutar si la custodiase cumple.
De alguna manerase debe tener control sobre el no determinismo, de tal manera que pueda elegirse
una de todas l a s custodias que son candidatos a ejecutarse.
El contro que se establece para nuestro
modelo
es el siguiente:
se cumplen,
Se evalúan simultheamente todas l a s custodias y luego se determinan cuales son las que
y esa es la que se ejecuta.
posteriormentese elige una de ellas aleatoriamente
147687
PBg 3
2. DEFINICION DE LA GRAMATICA.
Programa ::= PROGRAMA id bloque-tareasprincipal
I
bloque-tareas ::= bloque-tareasuna-tarea
una-tarea ::= KAR número
una-tarea
= decl-varbloque-def
INICIAsecuenciaTERMINA
dec-var ::= VAR lista-var
Ie
I una-var
lista-var ::= lista-varuna-var
una-var ::= SENALlista-id
lista-id ::= lista-id
;
, id I id
principal ::= EN-PARALELO llamadas
llamadas ::= llamadas
.
, una-llamada I una-llamada
una-llamada ::= KAR número
bloque-def ::= bloque-defdefinici6n
I
e
definici6n ::= APRENDE id = secuencia FIN id
I inStNcci6n
secuencia ::= secuenciainStNCCi6n
inst~cci6n::= inst-elem
selecci6n
I ciclo-mientras I ciclo-repite
I id I alternativa I asignacion
ENVIA(receptor ;lista-id
/'A
I lista-ctes) I
RECIBE( emisor ;lista-id )
c&pibr eo c b ,
vLyJ
enva5
4~d
w, c ( ~ I
I RELOJ ( número )
lista-ctes ::= lista-ctes ,constante
I constante
.~ s ~
constante ::= V
IF
receptor ::= KAR número
emisor ::= KAR número
inst-elem ::= AVANZA
I WELTAIZQ I WELTADER I
RECOGEOBJETO
I DEJAOBJETO I PIDEOBJETO
I DEVUELVE OBJETO
ciclo-mientras ::= MIENTRASexp-cond
HAZ secuencia bIN
ciclo-repite ::= REPITE secuencia HASTAexp-cond
seleccidn ::= SI exp-condENTONCESsecuencia
FIN
I
SI exp-condENTONCESsecuencia
OTROsecuenciaFIN
exp-cond ::= exp-cond Y exp-cond
(exp-cond)
I NO--cond
asignacidn ::= id
I id:=
I exp-cond O exp-cond I
I condicion
:= id I id := constante I id := NOid
Noconstante
alternativa ::= ALT : cuerpo [ gllg,f)&$@&@~ppJFIN
cuerpo ::= cuerpoaccidn
acci6n ::= custodias
-> secuencia [I
custodias ::= custodias
NO custodias
I
I acci6n
.
Y custodias I custodias O custodias I
( custodias)
I una-custodia
PBg 5
una-custodia ::= condici6n
I RECIBE ( emisor ;lista-id ) .
condici6n ::= PAREDENFRENTE
PAREDIZQUIERDA
PAREDDERECHA
I
OBJETOSUENA
NINGUNOBJETO
id = constante
id = id
I
I NADAENFRENTE I
I NADAIZQUIERDA I
I NADADERECHA I
NADASUENA
I ALGUNOBJETO I
I DIRECCIONNORTE
I id
<> constante
I
id <> id
id ::= letra ( letra I dígito ) *
constante ::= V
.
IF
número ::= ( dlgito )
+
-
letra ::= [ 'a' 'z' 'A' - 'Z' ]
digit0 ::= [ O - 9 ]
P4g 6
3.1 Analizador Lexicográfico.
El analizador lexicogr&fico esta hecho a traves de un programa llamado LEX del cual se da una
explicaci6n a continuaci6n:
Lex es un generador de programascapaces de realizar el procesamiento lexica de archivos texto.
Lex recibe como entrada
un conjunto de expresiones regulares
y produce como salida
un programa escrito
en algún lenguaje de programacidn de prop6sito general capaz de reconocer dentro de un archivo de
por cada
caracteres las secuencias de slmbolos que forman cadenas pertenecientes al lenguaje denotado
expresibn regular. Cada expresi6n regular tiene asociado
un conjunto de acciones que deben ser realizadas
cada vez que una cadena
con la forma indicada por la expresi6n regular sea encontrada en la entrada.
LEX es denominadoyylex() ,y esta escritoen lenguaje C.
El analizador 1exicogrAfk.o generado por
Este programa es quien le devuelve al analizadorsintktico unidades sintkticas llamadas tokens.
3.2 Analizador Sintáctico
*
..
El analizador sintktico esta hecho a traves de un programa llamado
explicaci6n a continuaci6n:
YACC del cual se da una
YACC es un generador de analizadores sintkticos que recibe como entrada una gramAtica (almacenada en un archivo texto)y produce como salida el analizadorsintktico ascendente que reconoce
las estructuras definidas por las producciones de la gramtltica.
YACC transforma la especificaci6n que el usuario le proporciona
en un programaescrito en lenguaje
C; este programa es capaz de analizar la entrada y determinar si ;st& formada según las producciones
indicadas en la especificaci6n.
El analizador sintktico producido por YACC, contiene una funci6n llamadayypurse(), la cual es
invocada para realizar el aniilisis
sintktico de un programa fuente.
3.3 Analizador Sernántico
E n esta partese realizan dos tipos de chequeo, el de tipos
y el de unicidad.
Mediante elchequeo de tipos se revisa que las partes que
se relacionan entresí sean del mismo tipo,por
ejemplo,en una asignacidnse checa que los dos identificadores sean del mismo tipo señal.
Este chequeo
se vuelve demasiado sencillo debido
a que tenemosun solo tipo de variables.
P6g 7
Mediante elchequeo de unicidad se verifica queun identificador sea utilizado para una misma funci6n
dentro del programa, por ejemplo, el nombre el programa no puede
ser utilizado como nombre de una
tarea, de una definici6no de una variable.Este chequeo es un poco m h fuerte que el detipos, ya que se
presentan mas posibilidades de utilizar los identificadores en distintas partes del programa.
3.4 Generador De Códio Intermedio
En esta parte se define cual es el &digo que produce un programa fuente correctamente escrito
despub de pasar por el compilador.El c6digo generado es c6digo de tres direcciones representado por
cutidruplos con la siguiente estructura:
( OP, dl,d2,d3 1
Donde
op es el operador quese aplica,
dl es donde quedael resultado
d2 es el primer operando
d3 es el segundo operando
se le asigna un cuAdruplo de c6digo intermedio,que
se muestra a continuaci6n:
A cada instrucci6n
a) INSTRUCCION ELEMENTAL
Jnstrucci6n
Re~resentacibnen c6dino
Avanza
VueltaIzq
VueltaDer
Recogeobjeto
Dejaobjeto
Pideobjeto
Devuelveobjeto
PBg 8
b) INVOCACION (Cuando se llama a un Aprende )
Representad611 en &digo
Instrucci6n
Invocamos a l aprende llamadoP
( U P , - , - )
c) CICLO MIENTRAS
Re~resentaci6nen &digo
hStNcci611
MIENTRAS <exp-mnd>
<secuencia>
HAZ
Se traduce asi:
uno:
(exp_cond>
Si x = falso goto dos
<secuencia>
goto uno
dos:
-
(PUNTOS,uno,-, )
(FALSOAgoto,dos)
(GOTO,uno, -, )
(PUNTOS,dos,-,- )
-
d) CICLO REPITE
InStNcci6n
Re~resentaci6nen &digo
REPITE <secuencia> HASTA
<exp-mnd>
Se traduce asi:
uno:
<secuencia>
<exp-wnd>
Si x = falso goto uno
-
(PUNTOS,uno,-, )
(FALSO,x,goto,uno)
PBg 9
e) RELOJ
Instrucci6n
Reloj ( <num> )
Re~resentaci6nen &digo
(RELOJ,num, -,- )
f) ASIGNACION
x:= y
x:= NOy
g) SELECCION
Instrucci6n
Re~resentaci6nen &digo
SI <exp-mnd> ENTONCES
<secuencia1>
OTRO
<secuencia2>
Se traduceasi:
<exp-wnd>
Si x = falso goto uno
<secuencia1>;
goto dos
uno:
<secuencia2>
dos:
(FALSO,x,goto,uno)
(GOTO,dos, -,- )
(PUNTOS,uno,-,- )
(PUNTOS,dos,-,- )
SI <exp-cond> ENTONCES
<secuencia>
Se traducea i :
PBg 10
<exp-mnd>
Si x = falso goto uno
<secuencia>
uno:
(FALSO,x,goto,uno)
(PUNTOS,uno,-,- )
h) CONDICION
Instrucci6n
Reoresentaci6n en cddieo
<idl> = <id2>
(IGUAL,x,idl,id2)
<idl> <> <id2>
(DIST,x,idl,id2)
ParedEnfrente
Nadanfrente
ParedIzquierda
NadaIzquierda
ParedDerecha
NadaDerecha
Objetosuena
NadaSuena
AlgunObjeto
NingunObjeto
DireccionNorte
i) ENVIA
Instrucci6n
Envia (receptor,x,y,...4)
Re~resentacidnen &digo
(ENVIA,receptor,x,-)
(ENVIA,receptor,y,- )
...
(ENVIA,receptor,z,- )
j) RECIBE
Instrucci6n
Re~resentaci6nen c6dipo
Recibe (receptor,x,y,...4)
(RECIBE,receptor,x,- )
(RECIBE,receptor,y,- )
...
(RECIBE,receptor,z,- )
k) ALTERNATIVA
ReDresentaci6n en c6dino
...
<custN> -> <secuenciaN>
FIN
Se traduceasi:
uno:
<secuencia1>
goto sigue
dos:
<secuencia2>
.
goto
sigue
(PUNTOS,uno, -,- )
(GOTO,sigue,-,- )
(PUNTOS,dos, -,- )
(GOTO,sigue,-,- )
...
(PUNTOS,N,-,- )
l
...
N:
csecuenciaN>
goto sigue
...
(=Tfl,
-)
(FALSO,i,goto,i)
(PUNTOS,sigue,-,- )
-9
...
ccustN>
ALEATORIA(xl,x2,...a)
Si i=falso goto i
sigue:
1) PRINCIPAL
Instruccidn
Representacidn en &digo
EN-PARALELO
Karl,Kar2, ...,KarN
...
(ACIIVA,KarN,- ,- )
Piig 13
i
I
,
c
BIBLIOGRAF'IA
Ahofifred V. y coautores.(l990) Comoiladores. Princiuios,
Flores S. y Pere
tCcnicas y herramientas, tr. Pedro
Botella i L.,Ed. Addison-Wesley Iberoamericana,
(E.U.A.),805 pp.
'
Manual de usuarioLEXv YACC;
Oktaba ,Hanna.(1985) "ProgramacionConcurrente",Comunicacines t&nicas, (M6ico) 1
1
UNAM, 112 pp.
PBg 14
Descargar