Está en la página 1de 42

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA

ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS


CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN


FACULTAD DE INGENIERIA
E.A.P. INGENIARIA EN INFORAMTICA Y SISTEMAS

MONITORES: "PROBLEMA DE SANTA CLAUS

PRESENTADO POR:
Uriel Jonatan Villaca Paco
CODIGO 2013-39111

DIRIGIDO A DOCENTE/ CURSO:


Ing. Ana Cori Moron
Algoritmos paralelos

TACNA- PERU
2014

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

INTRODUCCIN

Cuando estamos enfrente de algn caso de concurrencia entre procesos es


necesario conocer las diversas soluciones y alternativas para controlar la exclusin
mutua y sincronizacin entre dos o ms procesos. Entre las cuales estn dos
herramientas para controlar el acceso a la seccin crtica: semforos y monitores.

Los semforos nos ofrecen un control del acceso a la seccin crtica interna de los
procesos, mientras que los monitores controlan el acceso mediante procesos
externos.

Para aprender mejor el uso de semforos y monitores es necesario conocer tambin


los problemas clsicos de concurrencia. Los problemas clsicos de concurrencia son
solucionados de diversas maneras y nos dan idea de como aplicar los monitores y
semforos correctamente y cules pueden ser nuestros errores al encontrarnos con
problemas similares.

El Problema de Santa Claus es un problema clsico de concurrencia, donde se tiene


como objetivo obtener la sincronizacin y exclusin mutua entre procesos. Este
problema nos da una idea de cmo analizar en busca de una solucin cuando se
tiene problemas de este tipo, adems si tuviramos un caso similar en la vida real
(posiblemente en un caso laboral) podramos aplicar una solucin adecuada.

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

EL PROBLEMA DE SANTA CLAUS

1.

DEFINICIN:

1.1.

Definicin de Semforos

La idea de un semforo para el control del trfico de coches se puede emplear sin
grandes modificaciones para el control de acceso a datos. Un semforo es una
estructura particular que contiene un valor mayor o igual a cera y que maneja una
cola de procesos esperando por unas condiciones particulares en el propio semforo.
Aunque parezcan sencillos, los semforos son muy potentes, lo que incrementa
consecuentemente las complicaciones. Empecemos (como siempre) dejando fuera el
control de errores: lo meteremos en nuestro cdigo cuando encaremos un programa
ms complejo.
Los semforos pueden utilizarse para controlar el acceso a recursos: el valor del
semforo representa el nmero de procesos que pueden acceder al recurso; cada vez
que un proceso accede al recurso el valor del semforo debe ser decrementado e
incrementado de nuevo cuando el recurso sea liberado. Si el recurso es exclusivo
(slo un proceso puede acceder) el valor inicial del semforo ser 1.

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

OperacinWait (P): Si el valor del semforo no es nulo, esta operacin


decrementa en uno el valor del semforo. En el caso de que su valor sea
nulo, la operacin suspende el proceso que lo ejecuta y lo ubica en la lista
del semforo a la espera de que deje de ser nulo el valor.

Operacin Signal (V): Incrementa el valor del semforo, y en caso de que


haya procesos en la lista de espera del semforo, se activa uno de ellos para
que concluya su operacin Wait.

1.2.

Definicin de monitores

En la programacin paralela, los monitores son objetos destinados a ser usados sin
peligro por ms de un hilo de ejecucin. La caracterstica que principalmente los
define es que sus mtodos son ejecutados con exclusin mutua. Lo que significa,
que en cada momento en el tiempo, un hilo como mximo puede estar ejecutando
cualquiera de sus mtodos. Esta exclusin mutua simplifica el razonamiento de
implementar monitores en lugar de cdigo a ser ejecutado en paralelo.

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

En el estudio y uso de los semforos se puede ver que las llamadas a las funciones
necesarias para utilizarlos quedan repartidas en el cdigo del programa, haciendo
difcil corregir errores y asegurar el buen funcionamiento de los algoritmos. Para
evitar estos inconvenientes se desarrollaron los monitores. El concepto de monitor
fue definido por primera vez por Charles Antony Richard Hoare en un artculo del
ao 1974. La estructura de los monitores se ha implementado en varios lenguajes de
programacin.
Un monitor tiene 4 componentes:
-Un conjunto de variables locales que podemos denominar permanentes.
Dichas variables se utilizan para almacenar el estado interno del recurso.
-Un cdigo de inicializacin que se ejecuta antes de la primera instruccin
ejecutable del programa, inicia las variables.
-Un conjunto de procedimientos internos que manipulan las variables
permanentes.
-Una declaracin de los procedimientos que son exportados y por lo
tanto pueden ser accedidos por los procesos activos que accedan al monitor.

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

1.3.

El problema de Santa Claus

Santa Claus pasa su tiempo de descanso, durmiendo, en su casa del Polo


Norte. Para poder despertarlo, se ha de cumplir una de las dos condiciones
siguientes:

1. Que todos los renos de los que dispone, siete en total, hayan
vuelto de

vacaciones.

2. Que algunos de sus duendes necesiten su ayuda para fabricar un


juguete.

Para permitir que Santa Claus pueda descansar, los duendes han acordado
despertarle si tres de ellos tienen problemas a la hora de fabricar un juguete
(figura 1). En el caso de que un grupo de tres duendes estn siendo ayudados
por Santa, el resto de los duendes con problemas tendrn que esperar a que
Santa termine de ayudar al primer grupo.

En caso de que haya duendes esperando y todos los renos hayan vuelto de
vacaciones, entonces Santa Claus decidir preparar el trineo y repartir los
6

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

regalos (figura2), ya que su entrega es ms importante que la fabricacin de


otros juguetes que podra esperar al ao siguiente. El ltimo reno en llegar
ha de despertar a Santa mientras el resto de renos esperan antes de ser
enganchados al trineo.

Figura 1: Duendes despiertan

Figura 2: Santa se va a

a Santa para que los ayude.

repartir regalos.

1.3.1. Solucin con Semforos

Para solucionar este problema, se pueden distinguir tres procesos


bsicos: i) Santa Claus, ii) duende y iii) reno. Respecto a los recursos
compartidos, es necesario controlar el nmero de duendes que, en un
determinado momento, necesitan la ayuda de Santa y el nmero de
renos que, en un determinado momento, estn disponibles.
7

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

Evidentemente, el acceso concurrente a estas variables ha de estar


controlado por un semforo binario.

Respecto a los eventos de sincronizacin, ser necesario disponer de


mecanismos para despertar a Santa Claus, noticar a los renos que se
han de enganchar al trineo y controlar la espera por parte de los
duendes cuando otro grupo de duendes est siendo ayudado por
Santa Claus.

En resumen, se utilizarn las siguientes estructuras para plantear la


solucin del problema:

Duendes: Variable compartida que contiene el nmero de


duendes que necesitan la ayuda de Santa en un determinado
instante de tiempo.
Renos: Variable compartida que contiene el nmero de renos
que han vuelto de vacaciones y estn disponibles para viajar.
Mutex: Semforo binario que controla el acceso a Duendes y
Renos.

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

SantaSem: Semforo binario utilizado para despertar a Santa


Claus.
RenosSem: Semforo contador utilizado para noticar a los
renos que van a emprender el viaje en trineo.
DuendesSem: Semforo contador utilizado para noticar a
los duendes que Santa los va a ayudar.
Proceso Santa Claus:

Santa est durmiendo a la espera de que lo despierten. Si lo


despiertan, ser porque los duendes necesitan su ayuda o porque
todos los renos han vuelto de vacaciones. Por lo tanto, Santa tendr
que comprobar cul de las dos condiciones se ha cumplido.
Si todos los renos estn disponibles, entonces Santa preparara el
trineo y noticar a todos los renos. Si hay sucientes duendes para
que sean ayudados, entonces Santa los ayudar, noticando esa
ayuda de manera explcita mediante el semforo DuendesSem.

Proceso Reno:

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

El proceso reno es bastante sencillo, ya que simplemente ha de


despertar a Santa cuando todos los renos estn disponibles y, a
continuacin, esperar la noticacin de Santa. Una vez ms, el
acceso a la variable compartida renos se controla mediante el
semforo binario mutex.

Proceso Duende:

Finalmente, en el proceso duende se ha de controlar la formacin de


grupos de duendes de tres componentes antes de despertar a Santa.
Si se ha alcanzado el nmero mnimo para poder despertar a Santa,
entonces se le despierta mediante signal sobre el semforo
SantaSem. Si no es as, es decir, si otro duende necesita ayuda pero
no se ha llegado al nmero mnimo de duendes para despertar a
Santa, entonces el semforo DuendesMutex se libera.

El duende invocar a obtener Ayuda y esperar a que Santa notifique


dicha ayuda mediante DuendesSem. Note cmo despus de solicitar
ayuda, el duende queda a la espera de la noticacin de Santa.

10

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

2.

OBJETIVOS

Solucionar la exclusin mutua y condicin de sincronizacin en el problema de


Santa Claus con semforos y monitores.

3.

Aprender ms acerca de los monitores.

ALGORITMO DE SANTA CLAUS APLICANDO SEMFOROS

3.1.

El presente algoritmo da solucin al problema de Santa Claus.

1.
2.
3.
4.
5.

INICIO
Declarar constante TotalRenos=7
Declarar constante NumDuendesGrupo=3
Declarar variables renos y duendes como entero
Declarar variables SantaSem, DuendesSem, RenosSem y
mutex como semforos
6.
Crear proceso SantaClaus
6.1. Inicio proceso
6.1.1. Repetir
6.1.1.1.
Esperar(SantaSem)
6.1.1.2.
Esperar(mutex)
6.1.1.3.
Si renos es igual a TotalRenos entonces
6.1.1.4.
Inicio de condicin si
6.1.1.4.1.
Seal(RenosSem)
6.1.1.4.2.
Mostrar Santa salio a repartir
regalos
6.1.1.4.3.
Seal(mutex)
6.1.1.5.
Fin de condicin si
6.1.1.6.
Caso contrario hacer
11

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

6.1.1.7.
Inicio de caso contrario
6.1.1.7.1.
Si Duendes es igual a
NumDuendesGrupo entonces
6.1.1.7.2.
Inicio de condicin si
6.1.1.7.2.1.
Mostrar Santa ayuda a los
Duendes...
6.1.1.7.2.2.
seal(DuendesSem)
6.1.1.7.2.3.
Seal(mutex)
6.1.1.7.3.
Fin de condicin si
6.1.1.8.
Fin de caso contrario
6.1.2. Por siempre
6.2. Fin de proceso
7.
Crear proceso Reno
7.1. Inicio proceso
7.1.1. Repetir
7.1.1.1.
Esperar(mutex)
7.1.1.2.
Si renos es igual a TotalRenos-1 entonces
7.1.1.3.
Inicio de condicin si
7.1.1.3.1.
Aumentar el valor de renos en 1
7.1.1.3.2.
seal(SantaSem);
7.1.1.3.3.
Mostrar reno 7 lleg de vacaciones
y despert a Santa
7.1.1.3.4.
Seal(mutex)
7.1.1.3.5.
esperar(RenosSem)
7.1.1.3.6.
asignar a renos el valor de 0
7.1.1.4.
Fin de condicin si
7.1.1.5.
Caso contrario hacer
7.1.1.6.
Inicio de caso contrario
7.1.1.6.1.
Aumentar el valor de renos en 1
7.1.1.6.2.
Mostrar mensaje: Reno llego de
vacaciones
7.1.1.6.3.
Seal(mutex)
7.1.1.7.
Fin de caso contrario
7.1.2. Por siempre
12

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

7.2. Fin de proceso


8.
Crear proceso Duende
8.1. Inicio proceso
8.1.1. Repetir
8.1.1.1.
Esperar(mutex)
8.1.1.2.
Si duendes es igual a NumDuendesGrupo1 entonces
8.1.1.3.
Inicio de condicin si
8.1.1.3.1.
Aumentar el valor de duendes en 1
8.1.1.3.2.
Mostrar el mensaje: tres duendes
despiertan a santa solo a pedir ayuda
8.1.1.3.3.
Seal (SantaSem)
8.1.1.3.4.
Seal(mutex)
8.1.1.3.5.
Esperar(DuendesSem)
8.1.1.3.6.
asignar a duendes el valor de 0
8.1.1.4.
Fin de condicin si
8.1.1.5.
Caso contrario hacer
8.1.1.6.
Inicio de caso contrario
8.1.1.6.1.
Aumentar el valor de duendes en 1
8.1.1.6.2.
Seal(mutex)
8.1.1.7.
Fin de caso contrario
8.1.2. Por siempre
9.
Fin de proceso
10. INICIO DE PROGRAMA PRINCIPAL
10.1.Asignar a duendes el valor de 0
10.2.Asignar a renos el valor de 0
10.3.Inicializar semforo mutex en 1
10.4.Inicializar semforo SantaSem en 0
10.5.Inicializar semforo RenosSem en 0
10.6.Inicializar semforo DuendesSem en 0
10.7.INICIO DE PROCESOS CONCURRENTES
10.7.1.
Inicializar proceso SantaClaus
10.7.2.
Inicializar proceso Reno
10.7.3.
Inicializar proceso Duende
13

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

10.8.FIN DE PROCESOS CONCURRENTES


11. FIN PROGRAMA PRINCIPAL
12. FIN.

14

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

DIAGRAMA DE FLUJO
3.2.

Para un mejor entendimiento y seguimiento al problema de Santa Claus se


desarroll un diagrama de Flujo.

Figura 3. Diagrama de flujo del programa principal.


15

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

Figura 4. Diagrama de flujo del proceso SantaClaus.


16

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

Figura 5. Diagrama de flujo del proceso Reno.


17

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

Figura 6. Diagrama de flujo del proceso Duende.


18

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

4.

SEUDOCDIGO DEL PROBLEMA DE SANTA CLAUS APLICANDO


SEMAFOROS
4.1.

Especificacion de los procesos del problema de Santa Claus en


pseudocdigo:

Proceso SantaClaus
begin
repetir
1. wait(SantaSem)
2. wait(mutex)
3. si (renos=TotalRenos) entonces
begin
signal(RenosSem)
santa salio a repartir regalos
signal(mutex)
end
4. Caso Contrario
begin
si duendes = NumDuendesGrupo) entonces
begin
Santa ayuda a los Duendes
signal(DuendesSem)
signal(mutex)
end
end
Por siempre
end

19

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

Proceso Reno;
begin
repetir
1.
wait(mutex)
2.
si (renos=TotalRenos-1) entonces
begin
renos:=renos+1
signal(SantaSem)
ltimo reno lleg de vacaciones y despert a santa...
signal(mutex)
wait(RenosSem)
renos:=0
end
3. else
begin
renos:=renos+1
un reno lleg de vacaciones
signal(mutex)
end
por siempre
end;
Proceso Duende;
begin
repetir
1. wait(mutex)
2. si duendes = (NumDuendesGrupo-1) entonces
begin
duendes:=duendes+1
tres duendes despiertan a santa solo a pedir ayuda
signal(SantaSem)
signal(mutex)
wait(DuendesSem)
duendes:=0
end
20

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

3.caso contrario
begin
duendes:=duendes+1
signal(mutex)
end;
por siempre
end;
Las variables duendes y renos comienzan en 0.
El semaforo mutex inicializa en uno.
los semaforos SantaSem, DuendesSem y RenosSem inicializan en 0.

5.

CDIGO FUENTE
5.1.

Cdigo Fuente con semforos:

program SantaClaussem;
const TotalRenos=7;NumDuendesGrupo=3;
var SantaSem,DuendesSem,RenosSem,mutex:semaphore;
renos,duendes:integer;
process SantaClaus;
begin
repeat
wait(SantaSem);
wait(mutex);
if (renos=TotalRenos) then
begin
signal(RenosSem);
writeln('santa salio a repartir regalos');
writeln('
');
signal(mutex);
end
else
21

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

begin
if (duendes = NumDuendesGrupo) then
begin
writeln(' Santa ayuda a los Duendes...');
signal(DuendesSem);
signal(mutex);
end
end;
forever
end;
process Reno;
begin
repeat
wait(mutex);
if (renos=TotalRenos-1) then
begin
renos:=renos+1;
signal(SantaSem);
writeln('reno ',renos,' lleg de vacaciones y despert a
santa...');
signal(mutex);
wait(RenosSem);
renos:=0;
end
else
begin
renos:=renos+1;
writeln('reno ',renos,' lleg de vacaciones');
signal(mutex);
end;
forever
end;

22

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

process Duende;
begin
repeat
wait(mutex);
if ((duendes = NumDuendesGrupo-1)) then
begin
duendes:=duendes+1;
writeln(' tres duendes despiertan a santa solo a pedir ayuda');
signal(SantaSem);
signal(mutex);
wait(DuendesSem);
duendes:=0;
end
else
begin
duendes:=duendes+1;
signal(mutex);
end;
forever
end;
begin
duendes:=0;
renos:=0;
initial(mutex,1);
initial(SantaSem,0);
initial(RenosSem,0);
initial(DuendesSem,0);
cobegin
SantaClaus;
Reno;
Duende;
coend;
end.

23

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

5.2. RESULTADOS AL EJECUTAR EL CDIGO FUENTE.

Figura 3. Resultados obtenidos al ejecutar el cdigo del problema de Santa Claus con
semforos.
El resultado muestra que a inicializar la ejecucin santa se encuentra dormido y no realiza
ninguna accin. Al mismo tiempo que santa duerme los renos van llegando de uno en uno
24

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

hasta que llega el sptimo reno y despierta a santa para que salga a repartir los regalos,
tambin los duendes trabajan concurrentemente y cuando tres duendes se les presenta
problemas, solo en ese caso despiertan a santa un instante para que los ayude a solucionar
su problema y santa sigue durmiendo hasta que otro evento lo despierte. Esta iteraccion se
repite muchas veces para ver que no hay interbloqueos entre procesos lo cual se comprueba
en la ejecucin del cdigo fuente.

6.
ALGORITMO DEL PROBLEMA DE SANTA CLAUS APLICANDO
MONITORES
1.
2.
2.1.
2.2.
2.3.
2.4.
2.5.
2.6.
2.7.

INICIO
Crear monitor santaclaus
Exportar procedimiento santaclaus, renos, duendes
Declarar constante TotalRenos igual a 7
Declarar constante NumDuendesGrupo igual a 3
Declarar variables numDuende y numRenos como enteros
Declarar variables santa, renos y duendes como condicin
Crear procedimiento santaclaus
Inicio procedimiento
2.7.1.1.
Si numRenos es igual a TotalRenos entonces
2.7.1.2.
Inicio de condicin si
2.7.1.2.1.
Retrasar(santa)
2.7.1.2.2.
Santa Claus sali a repartir regalos
2.7.1.2.3.
Retardar(santa)
2.7.1.2.4.
Asignar a numDuende el valor de 0
2.7.1.2.5.
Asignar a numRenos el valor de 0
2.7.1.2.6.
Reanudar(renos)
2.7.1.3.
Fin de condicin si
2.7.1.4.
Caso contrario hacer
2.7.1.5.
Inicio de caso contrario
25

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

2.7.1.5.1.
Si numDuendes es igual a NumDuendesGrupo
entonces
2.7.1.5.2.
Inicio de condicin si
2.7.1.5.2.1. Duendes despiertan a Santa para pedir ayuda...
2.7.1.5.2.2.
Asignar a numDuende el valor de 0
2.7.1.5.2.3.
Reanudar(duendes)
2.7.1.5.3.
Fin de condicin si
2.7.1.6.
Fin de caso contrario
2.7.2. Fin de condicin
2.8. Fin de proceso
2.9. Crear procedimiento Reno
2.10.Inicio procedimiento
2.10.1. Aumentar el valor de numRenos en 1
2.10.2. Si numRenos dividido entre TotalRenos da un residuo 0 entonces
2.10.3. Inicio de condicin si
2.10.3.1.
ltimo reno llega de vacaciones y despierta a Santa
2.10.3.2.
Retardar(renos)
2.10.3.3.
Reanudar(santa)
2.10.4. Fin de condicin si
2.10.5. Caso contrario hacer
2.10.6. Inicio caso contrario
2.10.6.1.
Un reno llega de vacaciones
2.10.7.
Fin caso contrario
2.11.Fin de procedimiento
2.12.Crear procedimiento duende
2.13.Inicio procedimiento
2.13.1. Aumentar el valor de numDuende en 1
2.13.2. Si numDuende dividido entre NumDuendesGrupo da un residuo 0
entonces
2.13.3. Inicio de condicin si
2.13.3.1.
Reanudar(santa)
2.13.4. Fin de condicin si
2.14.Fin de procedimiento
2.15.INICIO DE VARIABLES DE MONITOR
2.15.1. Asignar a numRenos el valor de 0
26

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

2.15.2. Asignar a numDuendes el valor de 0


2.16.FIN DE INICIALIZACION DE VARIABLES DE MONITOR
3.
Crear proceso COsanta
4.
Inicio de proceso
4.1. Repetir
4.1.1. Invocar el procedimiento santaclaus del monitor santaclausm
4.2. Por siempre
5.
Fin de proceso
6.
Crear proceso COreno
7.
Inicio de proceso
7.1. Repetir
7.1.1. Invocar el procedimiento reno del monitor santaclausm
7.2. Por siempre
8.
Fin de proceso
9.
Crear proceso COduende
10. Inicio de proceso
10.1.Repetir
10.1.1. Invocar el procedimiento duende del monitor santaclausm
10.2.Por siempre
11. INICIO DE PROGRAMA PRINCIPAL
11.1.INICIO DE PROCESOS CONCURRENTES
11.1.1.
Inicializar proceso COsanta
11.1.2.
Inicializar proceso COreno
11.1.3.
Inicializar proceso COduende
11.2.FIN DE PROCESOS CONCURRENTES
12. FIN DE PROGRAMA PRINCIPAL
13. FIN

27

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

7.
SEUDOCDIGO DEL PROBLEMA DE SANTA CLAUS CON
MONITORES
Monitor santaclausm;
const TotalRenos=7;
const NumDuendesGrupo=3;
var numDuende,numRenos,i:integer;
santa,renos,duendes:condition;
export santaclaus,reno,duende;
procedimiento santaclaus;
begin
si (numRenos=TotalRenos) entonces
begin
delay(santa);
Santa va a repartir regalos
numDuende:=0;
numRenos:=0;
resume(renos);
end
caso contrario
begin
si (numDuende=NumDuendesGrupo) entonces
begin
Duendes despiertan a santa para que les ayude con los regalos
numDuende:=0;
resume(duendes);
end
end;
end;
procedimiento reno;
28

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

begin
numRenos:=numRenos+1;
{todos los renos listos?}
Si ((numRenos mod TotalRenos)=0) entonces
begin
llega el ultimo reno y despierta a Santa
delay(renos);
resume(santa);
end
caso contrario
renos llegando de vacaciones
end;
procedimiento duende;
begin
numDuende:=numDuende+1;
si ((numDuende mod NumDuendesGrupo)=0) entonces
begin
resume(santa);
end;
end;
begin
numRenos:=0;
numDuende:=0;
end;
Para utilizar este monitor, los 3 procesos activos debern invocar a los
procedimientos exportados de la siguiente forma:
santaclausm.santaclaus;
santaclausm.reno;
santaclausm.duende;
29

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

8.
DIAGRAMA DE FLUJO DEL PROBLEMA DE SANTA CLAUS CON
MONITORES

30

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

31

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

32

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

9.

CDIGO FUENTE CON MONITORES:

program santaclauss;
monitor santaclausm;
export santaclaus,reno,duende;
const TotalRenos=7;
const NumDuendesGrupo=3;
var numDuende,numRenos,i:integer;
santa,renos,duendes:condition;

procedure santaclaus;
begin
if (numRenos=TotalRenos) then
begin
delay(santa);
{notificar a los renos}
writeln('Santa salio a repartir regalos');
writeln('
');
{delay(santa);}
numDuende:=0;
numRenos:=0;
resume(renos);
end
else
begin
if (numDuende=NumDuendesGrupo) then
begin
{notificar a los duendes}

33

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

writeln('Duendes despiertan a Santa para pedir


ayuda...');
numDuende:=0;
resume(duendes);
end
end;
end;
procedure reno;
begin
numRenos:=numRenos+1;
{todos los renos listos?}
if ((numRenos mod TotalRenos)=0) then
begin

writeln('Reno ',numRenos,' llega de vacaciones y despierta a


Santa Claus...');
{numRenos:=0;}
delay(renos);
resume(santa);
end
else
begin
writeln('Reno ',numRenos,' llega de vacaciones...');
end;
{esperar las notificaciones de Santa}
end;
procedure duende;
begin
numDuende:=numDuende+1;
34

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

{esta completo el grupo de duendes?}


if ((numDuende mod NumDuendesGrupo)=0) then
begin
{delay(duendes);
numDuende:=0;}
resume(santa);
end;
end;
begin
numRenos:=0;
numDuende:=0;
end;
process COsanta;
begin
repeat
santaclausm.santaclaus;
forever
end;
process COreno;
begin
repeat
santaclausm.reno;
forever
end;
process COduende;
begin
repeat
santaclausm.duende;
forever
end;

35

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

begin
cobegin
COsanta;
COreno;
COduende;
coend;
end.

10.

APLICACIN REAL

En una fbrica de automotriz de gran escala, se produce autos y cada uno de ellos
tiene que pasar por 7 procesos, una vez culminado el sptimo proceso el vehculo
est listo para salir de la fbrica y ser exportador. Pero algunos de los proceso, los
inspectores pueden encontrar algunos defectos que tienen que ser solucionados,
como no se puede solucionar un defecto cada vez que aparece, la empresa toma una
poltica de que en cada 3 defectos encontrados se realizaran las correcciones as no
afectaran el tiempo de produccin.
Para encontrar solucin a este problema se utilizara la solucin aplicada al
problema de Santa Claus con las siguientes consideraciones a tomar en cuenta.
El procesos auto solo culminara si se han pasado por los siete procesos, las
reparaciones en el proceso de produccin se solucionaran en cualquier instancia del
proceso en que se encuentre el auto.
36

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

El cdigo fuente en Pascal FC es:


program ProduccionAutos;
monitor santaclausm;
export santaclaus,reno,duende;
const TotalRenos=7;
const NumDuendesGrupo=3;
var numDuende,numRenos,i:integer;
santa,renos,duendes:condition;
procedure santaclaus;
begin
if (numRenos=TotalRenos) then
begin
delay(santa);
writeln('AUTO sale para ser exportado');
writeln('
');
numDuende:=0;
numRenos:=0;
resume(renos);
end
else
begin
if (numDuende=NumDuendesGrupo) then
begin
writeln('Solucionar errores encontrados por
inspectores...');
numDuende:=0;
resume(duendes);
end
end;
end;
procedure reno;
begin
37

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

numRenos:=numRenos+1;
if ((numRenos mod TotalRenos)=0) then
begin
writeln('Termina proceso ',numRenos,' y esta listo
para salir de fbrica...');
delay(renos);
resume(santa);
end
else
begin
writeln('Termina proceso ',numRenos );
end;
end;
procedure duende;
begin
numDuende:=numDuende+1;
if ((numDuende mod NumDuendesGrupo)=0) then
begin
resume(santa);
end;
end;
begin
numRenos:=0;
numDuende:=0;
end;
process COautomovil;
begin
repeat
santaclausm.santaclaus;
forever
end;
process COproceso;
begin
repeat
santaclausm.reno;
forever
38

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

end;
process COinspector;
begin
repeat
santaclausm.duende;
forever
end;
begin
cobegin
COautomovil;
COproceso;
COinspector;
coend;
end.

10.1.

Anlisis de resultados

Captura de pantalla de resultados obtenidos.

39

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

Figura 5. Resultados obtenidos al ejecutar el cdigo fuente.


Como se muestra, el auto pasa necesariamente por 7 procesos antes de salir de la fbrica y
ser exportado. Y tambin al momento de hacer las correcciones de los tres errores
encontrados por los inspectores se da el cualquier proceso en que se encuentre el vehculo,
estos resultados se deben gracias a la sincronizacin entre los procesos.
Tambin se comprueba que estos proceso se pueden ejecutar indeterminadas veces sin dar
lugar a un problema de interbloqueo.
40

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

11.

CONCLUSIONES
Se solucionaron los problemas de exclusin mutua y condicin de
sincronizacin correctamente en el problema de Santa Claus con monitores
y con semforos.

Un proceso slo puede acceder a las variables del monitor usando los
procedimientos exportados por el monitor. La exclusin mutua en el acceso
a los procedimientos del monitor est garantizada por el hecho de que el
monitor se construye de tal forma que la ejecucin de los procedimientos del
mismo monitor no se solapa. Los monitores nos permiten desarrollar de
forma casi independiente los distintos procesos

12.

BIBLIOGRAFA

THOMSON; Programacin Concurrente/Jos Tomas Palma Mndez/M del


Carmen Garrido Carrera/Fernando Snchez Figueroa/Alexis Quesada Arencibia/ 1
edicin.
OPENLIBRA; Programacin Concurrente/Josep Jorba Estebe & Roma Suppi
Boldrito.
http://www.esi.uclm.es/www/dvallejo/pctr/libro/pctr2012.pdf

41

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERA


ESCUELA ACADMICO PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS
CURSO: ALGORITMOS PARALELOS
AO DE ESTUDIOS: SEGUNDO

42