Upload
kruskaya-salazar
View
4.130
Download
0
Embed Size (px)
1SEMAacuteFOROS2PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN3 MONITORES
GRUPO VI
INTEGRANTESbullKruskaya SalazarbullYadira TorresbullSantiago Plascencia
SINCRONIZACIOacuteN DE PROCESOS
1 SEMAacuteFORO
Herramienta de sincronizacioacuten que no requiere de espera ocupada
Sentildeala si un recurso estaacute libre y se puede utilizar el proceso
Semaacuteforo S ndash variable entera
Puede solo ser accesada viacutea dos indivisibles (atoacutemicas) operaciones wait() y signal()
Wait activa el proceso cuando encuentra codigo de condicioacuten ocupado
wait (S) P proberen = probar
while Sle 0 no-opS--Signal queda activado
cuando un proceso sale de la regioacuten criacutetica y el coacutedigo de condicioacuten estaacute como libre
signal (S) Vverhogen = incrementar
S++
1 SEMAacuteFORO ndash IMPLEMENTACIOacuteN
Defina un semaacuteforo como un registrotypedef struct int valuestruct process L semaphore
Suponga dos operaciones simples block suspende el proceso que lo
invoco wakeup(P) reanuda la ejecucioacuten de
un proceso P bloqueado
1 SEMAacuteFORO - IMPLEMENTACIOacuteN
wait(S)Svalue--if (Svalue lt 0) agregar este
proceso a la lista SL
block
signal(S)Svalue++if (Svalue lt= 0)
remover un proceso P de la lista SLwakeup(P)
Definamos las operaciones con semaacuteforos como
1 SEMAacuteFORO - INTERBLOQUEOS E INANICIOacuteN
Semaacuteforo de conteo ndash valor entero con un rango sin restricciones dentro de un dominio
Semaacuteforo binario ndash se los conoce tambieacuten como cerrojos muacutetex
valor entero con un rango solo entre 0 y 1 puede ser el maacutes simple de implementar
Puede implementarse un semaacuteforo de conteo S como un semaacuteforo binario
Dos o mas procesos estaacuten esperando indefidinamente a que se produzca otro proceso que solo puede ser consecuencia del resultado de otro proceso que esta en estado de espera debido a la ejecucioacuten de la operacioacuten signal() a esto se le atribuye que los procesos se han interbloqueado
1 SEMAacuteFORO - INTERBLOQUEOS DE INACICIOacuteN
Interbloqueo(Deadlock) ndash dos oacute maacutes procesos estaacuten esperando indefinidamente por un evento que puede ser causado soacutelo por uno de los procesos que estaacuten en espera Suponga que S y Q son dos semaacuteforos inicializados a 1
P0 P1wait(S) wait(Q)wait(Q) wait(S)M Msignal(S) signal(Q)signal(Q) signal(S)
Inanicioacuten ndash bloqueo indefinido Un proceso puede jamaacutes ser removido de la cola de semaacuteforos en la cual se encuentra suspendido
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
21 Problema del Buffer Limitado22 Problema de los Lectores y
Escritores23 Problema de los Filoacutesofos Comensales
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
21 Problema del Buffer Limitado
Se utiliza para ilustrar la potencia de las primitivas de sincronizacioacuten
Datos compartidos semaphore full empty mutex Inicialmente
full = 0 empty = n mutex = 1
do hellip produce un item en nextp hellip wait(empty)Cuenta el
de bufferes vacios y llenos
wait(mutex) hellip agrega nextp al buffer hellip signal(mutex) signal(full) Cuenta el
de bufferes vacios y llenos
while (1)
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN 21 Problema del Buffer Limitado-Proceso
Consumidor
do wait(full)wait(mutex)hellipremueve un item desde el buffer a nextchellipsignal(mutex)signal(empty)hellipconsume el item en nextchellip while (1)
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
22 Problema de los Lectores - Escritores
Esta estructura de utiliza para asegurar q los problemas generados por acceder simultaacuteneamente un escritor y alguacuten otro proceso no afloren
Lectores-Escritores Datos compartidos
semaphore mutex wrtInicialmentemutex = 1 wrt = 1 readcount = 0
Proceso Escritorwait(wrt)asegurar la exclusioacuten mutua mientras actualioza la variablehellipestaacute escribiendohellipsignal(wrt)
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
23 Problema de los Filoacutesofos Comensales
Es un ejemplo de amplia clase de problemas de control de concurrencia
Datos compartidos
semaphore chopstick[5]
Inicialmente todos los valores son 1
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
23 Problema de los Filoacutesofos Comensales
Filoacutesofo i
do wait(chopstick[i])wait(chopstick[(i+1) 5])hellipcomerhellipsignal(chopstick[i])
signal(chopstick[(i+1) 5])hellippensarhellip while (1)
3 MONITORES
31 Utilizacioacuten 32 Solucioacuten al problema de la
cena de los filoacutesofos usando monitores
33 Implementacioacuten de un monitor usando semaacuteforos
34 Reanudacioacuten de procesos dentro de un monitor
3MONITORES
Son una herramienta de sincronizacion mas estructurada que un semaacuteforo encapsula variables compartidas en conjunto con los procedimientos para accesar esas variables
Son tipo de dato abstracto por lo tanto los procesos llaman a los procedimientos del monitor en cualquier momento pero no pueden accesar directamente a las variables encapsuladas
3 MONITORES
Permiten a un proceso esperar dentro del monitor una variable de condicioacuten debe de ser declarada como condition x y
La variable de condicioacuten puede solo ser usada con las operaciones wait y signal
La operacioacutenxwait()significa que al proceso
que invoca esta operacioacuten
es suspendido hasta que algun otro proceso invoque
xsignal() La operacioacuten xsignal
reanuda exactamente un proceso
suspendido If no hay proceso suspendido then la
operacioacuten signal no tiene efecto
3MONITORES31 Utilizacioacuten
Construccioacuten de sincronizacioacuten de alto-nivel que permite compartir con
seguridad un tipo de datos abstracto entre procesos concurrentes
monitor nombre-monitor
declaracioacuten de variables compartidas
procedure body P1 (hellip) procedure body P2 (hellip) procedure body Pn (hellip) coacutedigo de inicializacioacuten
3MONITORES31 Utilizacioacuten
Visioacuten Esquemaacutetica de un MonitorMonitor con Variables de Condicioacuten
3MONITORES32 Solucioacuten al problema de la cena de
los filoacutesofos usando monitores
monitor dp
enum thinking hungry eating state[5]
condition self[5]
void pickup(int i) siguiente movimiento
void putdown(int i) siguiente movimiento
void test(int i) siguiente movimiento
void init()
for (int i = 0 i lt 5 i++)
state[i] = thinking
void pickup(int i)
state[i] = hungry
test[i]
if (state[i] = eating)
self[i]wait()
void putdown(int i)
state[i] = thinking
probar vecinos izquierdo y derecho
test((i+4) 5)
test((i+1) 5)
void test(int i)
if ( (state[(I + 4) 5] = eating) ampamp
(state[i] == hungry) ampamp
(state[(i + 1) 5] = eating))
state[i] = eating
self[i]signal()
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Variablessemaphore mutex (initially = 1)semaphore next (initially = 0)int next-count = 0 Cada procedimiento externo F seraacute
reemplazado porwait(mutex)hellipbody of Fhellipif (next-count gt 0)signal(next)elsesignal(mutex) La exclusioacuten mutua dentro de un monitor estaacute
asegurada
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Por cada variable de condicioacuten x tenemos
semaphore x-sem (initially = 0)
int x-count = 01048708 La operacioacuten xwait
puede ser implementada como
x-count++if (next-count gt 0)signal(next)elsesignal(mutex)wait(x-sem)x-count--
La operacioacuten xsignal puede ser implementada como
if (x-count gt 0) next-count++signal(x-sem)wait(next)next-count--
1 SEMAacuteFORO
Herramienta de sincronizacioacuten que no requiere de espera ocupada
Sentildeala si un recurso estaacute libre y se puede utilizar el proceso
Semaacuteforo S ndash variable entera
Puede solo ser accesada viacutea dos indivisibles (atoacutemicas) operaciones wait() y signal()
Wait activa el proceso cuando encuentra codigo de condicioacuten ocupado
wait (S) P proberen = probar
while Sle 0 no-opS--Signal queda activado
cuando un proceso sale de la regioacuten criacutetica y el coacutedigo de condicioacuten estaacute como libre
signal (S) Vverhogen = incrementar
S++
1 SEMAacuteFORO ndash IMPLEMENTACIOacuteN
Defina un semaacuteforo como un registrotypedef struct int valuestruct process L semaphore
Suponga dos operaciones simples block suspende el proceso que lo
invoco wakeup(P) reanuda la ejecucioacuten de
un proceso P bloqueado
1 SEMAacuteFORO - IMPLEMENTACIOacuteN
wait(S)Svalue--if (Svalue lt 0) agregar este
proceso a la lista SL
block
signal(S)Svalue++if (Svalue lt= 0)
remover un proceso P de la lista SLwakeup(P)
Definamos las operaciones con semaacuteforos como
1 SEMAacuteFORO - INTERBLOQUEOS E INANICIOacuteN
Semaacuteforo de conteo ndash valor entero con un rango sin restricciones dentro de un dominio
Semaacuteforo binario ndash se los conoce tambieacuten como cerrojos muacutetex
valor entero con un rango solo entre 0 y 1 puede ser el maacutes simple de implementar
Puede implementarse un semaacuteforo de conteo S como un semaacuteforo binario
Dos o mas procesos estaacuten esperando indefidinamente a que se produzca otro proceso que solo puede ser consecuencia del resultado de otro proceso que esta en estado de espera debido a la ejecucioacuten de la operacioacuten signal() a esto se le atribuye que los procesos se han interbloqueado
1 SEMAacuteFORO - INTERBLOQUEOS DE INACICIOacuteN
Interbloqueo(Deadlock) ndash dos oacute maacutes procesos estaacuten esperando indefinidamente por un evento que puede ser causado soacutelo por uno de los procesos que estaacuten en espera Suponga que S y Q son dos semaacuteforos inicializados a 1
P0 P1wait(S) wait(Q)wait(Q) wait(S)M Msignal(S) signal(Q)signal(Q) signal(S)
Inanicioacuten ndash bloqueo indefinido Un proceso puede jamaacutes ser removido de la cola de semaacuteforos en la cual se encuentra suspendido
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
21 Problema del Buffer Limitado22 Problema de los Lectores y
Escritores23 Problema de los Filoacutesofos Comensales
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
21 Problema del Buffer Limitado
Se utiliza para ilustrar la potencia de las primitivas de sincronizacioacuten
Datos compartidos semaphore full empty mutex Inicialmente
full = 0 empty = n mutex = 1
do hellip produce un item en nextp hellip wait(empty)Cuenta el
de bufferes vacios y llenos
wait(mutex) hellip agrega nextp al buffer hellip signal(mutex) signal(full) Cuenta el
de bufferes vacios y llenos
while (1)
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN 21 Problema del Buffer Limitado-Proceso
Consumidor
do wait(full)wait(mutex)hellipremueve un item desde el buffer a nextchellipsignal(mutex)signal(empty)hellipconsume el item en nextchellip while (1)
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
22 Problema de los Lectores - Escritores
Esta estructura de utiliza para asegurar q los problemas generados por acceder simultaacuteneamente un escritor y alguacuten otro proceso no afloren
Lectores-Escritores Datos compartidos
semaphore mutex wrtInicialmentemutex = 1 wrt = 1 readcount = 0
Proceso Escritorwait(wrt)asegurar la exclusioacuten mutua mientras actualioza la variablehellipestaacute escribiendohellipsignal(wrt)
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
23 Problema de los Filoacutesofos Comensales
Es un ejemplo de amplia clase de problemas de control de concurrencia
Datos compartidos
semaphore chopstick[5]
Inicialmente todos los valores son 1
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
23 Problema de los Filoacutesofos Comensales
Filoacutesofo i
do wait(chopstick[i])wait(chopstick[(i+1) 5])hellipcomerhellipsignal(chopstick[i])
signal(chopstick[(i+1) 5])hellippensarhellip while (1)
3 MONITORES
31 Utilizacioacuten 32 Solucioacuten al problema de la
cena de los filoacutesofos usando monitores
33 Implementacioacuten de un monitor usando semaacuteforos
34 Reanudacioacuten de procesos dentro de un monitor
3MONITORES
Son una herramienta de sincronizacion mas estructurada que un semaacuteforo encapsula variables compartidas en conjunto con los procedimientos para accesar esas variables
Son tipo de dato abstracto por lo tanto los procesos llaman a los procedimientos del monitor en cualquier momento pero no pueden accesar directamente a las variables encapsuladas
3 MONITORES
Permiten a un proceso esperar dentro del monitor una variable de condicioacuten debe de ser declarada como condition x y
La variable de condicioacuten puede solo ser usada con las operaciones wait y signal
La operacioacutenxwait()significa que al proceso
que invoca esta operacioacuten
es suspendido hasta que algun otro proceso invoque
xsignal() La operacioacuten xsignal
reanuda exactamente un proceso
suspendido If no hay proceso suspendido then la
operacioacuten signal no tiene efecto
3MONITORES31 Utilizacioacuten
Construccioacuten de sincronizacioacuten de alto-nivel que permite compartir con
seguridad un tipo de datos abstracto entre procesos concurrentes
monitor nombre-monitor
declaracioacuten de variables compartidas
procedure body P1 (hellip) procedure body P2 (hellip) procedure body Pn (hellip) coacutedigo de inicializacioacuten
3MONITORES31 Utilizacioacuten
Visioacuten Esquemaacutetica de un MonitorMonitor con Variables de Condicioacuten
3MONITORES32 Solucioacuten al problema de la cena de
los filoacutesofos usando monitores
monitor dp
enum thinking hungry eating state[5]
condition self[5]
void pickup(int i) siguiente movimiento
void putdown(int i) siguiente movimiento
void test(int i) siguiente movimiento
void init()
for (int i = 0 i lt 5 i++)
state[i] = thinking
void pickup(int i)
state[i] = hungry
test[i]
if (state[i] = eating)
self[i]wait()
void putdown(int i)
state[i] = thinking
probar vecinos izquierdo y derecho
test((i+4) 5)
test((i+1) 5)
void test(int i)
if ( (state[(I + 4) 5] = eating) ampamp
(state[i] == hungry) ampamp
(state[(i + 1) 5] = eating))
state[i] = eating
self[i]signal()
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Variablessemaphore mutex (initially = 1)semaphore next (initially = 0)int next-count = 0 Cada procedimiento externo F seraacute
reemplazado porwait(mutex)hellipbody of Fhellipif (next-count gt 0)signal(next)elsesignal(mutex) La exclusioacuten mutua dentro de un monitor estaacute
asegurada
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Por cada variable de condicioacuten x tenemos
semaphore x-sem (initially = 0)
int x-count = 01048708 La operacioacuten xwait
puede ser implementada como
x-count++if (next-count gt 0)signal(next)elsesignal(mutex)wait(x-sem)x-count--
La operacioacuten xsignal puede ser implementada como
if (x-count gt 0) next-count++signal(x-sem)wait(next)next-count--
1 SEMAacuteFORO ndash IMPLEMENTACIOacuteN
Defina un semaacuteforo como un registrotypedef struct int valuestruct process L semaphore
Suponga dos operaciones simples block suspende el proceso que lo
invoco wakeup(P) reanuda la ejecucioacuten de
un proceso P bloqueado
1 SEMAacuteFORO - IMPLEMENTACIOacuteN
wait(S)Svalue--if (Svalue lt 0) agregar este
proceso a la lista SL
block
signal(S)Svalue++if (Svalue lt= 0)
remover un proceso P de la lista SLwakeup(P)
Definamos las operaciones con semaacuteforos como
1 SEMAacuteFORO - INTERBLOQUEOS E INANICIOacuteN
Semaacuteforo de conteo ndash valor entero con un rango sin restricciones dentro de un dominio
Semaacuteforo binario ndash se los conoce tambieacuten como cerrojos muacutetex
valor entero con un rango solo entre 0 y 1 puede ser el maacutes simple de implementar
Puede implementarse un semaacuteforo de conteo S como un semaacuteforo binario
Dos o mas procesos estaacuten esperando indefidinamente a que se produzca otro proceso que solo puede ser consecuencia del resultado de otro proceso que esta en estado de espera debido a la ejecucioacuten de la operacioacuten signal() a esto se le atribuye que los procesos se han interbloqueado
1 SEMAacuteFORO - INTERBLOQUEOS DE INACICIOacuteN
Interbloqueo(Deadlock) ndash dos oacute maacutes procesos estaacuten esperando indefinidamente por un evento que puede ser causado soacutelo por uno de los procesos que estaacuten en espera Suponga que S y Q son dos semaacuteforos inicializados a 1
P0 P1wait(S) wait(Q)wait(Q) wait(S)M Msignal(S) signal(Q)signal(Q) signal(S)
Inanicioacuten ndash bloqueo indefinido Un proceso puede jamaacutes ser removido de la cola de semaacuteforos en la cual se encuentra suspendido
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
21 Problema del Buffer Limitado22 Problema de los Lectores y
Escritores23 Problema de los Filoacutesofos Comensales
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
21 Problema del Buffer Limitado
Se utiliza para ilustrar la potencia de las primitivas de sincronizacioacuten
Datos compartidos semaphore full empty mutex Inicialmente
full = 0 empty = n mutex = 1
do hellip produce un item en nextp hellip wait(empty)Cuenta el
de bufferes vacios y llenos
wait(mutex) hellip agrega nextp al buffer hellip signal(mutex) signal(full) Cuenta el
de bufferes vacios y llenos
while (1)
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN 21 Problema del Buffer Limitado-Proceso
Consumidor
do wait(full)wait(mutex)hellipremueve un item desde el buffer a nextchellipsignal(mutex)signal(empty)hellipconsume el item en nextchellip while (1)
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
22 Problema de los Lectores - Escritores
Esta estructura de utiliza para asegurar q los problemas generados por acceder simultaacuteneamente un escritor y alguacuten otro proceso no afloren
Lectores-Escritores Datos compartidos
semaphore mutex wrtInicialmentemutex = 1 wrt = 1 readcount = 0
Proceso Escritorwait(wrt)asegurar la exclusioacuten mutua mientras actualioza la variablehellipestaacute escribiendohellipsignal(wrt)
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
23 Problema de los Filoacutesofos Comensales
Es un ejemplo de amplia clase de problemas de control de concurrencia
Datos compartidos
semaphore chopstick[5]
Inicialmente todos los valores son 1
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
23 Problema de los Filoacutesofos Comensales
Filoacutesofo i
do wait(chopstick[i])wait(chopstick[(i+1) 5])hellipcomerhellipsignal(chopstick[i])
signal(chopstick[(i+1) 5])hellippensarhellip while (1)
3 MONITORES
31 Utilizacioacuten 32 Solucioacuten al problema de la
cena de los filoacutesofos usando monitores
33 Implementacioacuten de un monitor usando semaacuteforos
34 Reanudacioacuten de procesos dentro de un monitor
3MONITORES
Son una herramienta de sincronizacion mas estructurada que un semaacuteforo encapsula variables compartidas en conjunto con los procedimientos para accesar esas variables
Son tipo de dato abstracto por lo tanto los procesos llaman a los procedimientos del monitor en cualquier momento pero no pueden accesar directamente a las variables encapsuladas
3 MONITORES
Permiten a un proceso esperar dentro del monitor una variable de condicioacuten debe de ser declarada como condition x y
La variable de condicioacuten puede solo ser usada con las operaciones wait y signal
La operacioacutenxwait()significa que al proceso
que invoca esta operacioacuten
es suspendido hasta que algun otro proceso invoque
xsignal() La operacioacuten xsignal
reanuda exactamente un proceso
suspendido If no hay proceso suspendido then la
operacioacuten signal no tiene efecto
3MONITORES31 Utilizacioacuten
Construccioacuten de sincronizacioacuten de alto-nivel que permite compartir con
seguridad un tipo de datos abstracto entre procesos concurrentes
monitor nombre-monitor
declaracioacuten de variables compartidas
procedure body P1 (hellip) procedure body P2 (hellip) procedure body Pn (hellip) coacutedigo de inicializacioacuten
3MONITORES31 Utilizacioacuten
Visioacuten Esquemaacutetica de un MonitorMonitor con Variables de Condicioacuten
3MONITORES32 Solucioacuten al problema de la cena de
los filoacutesofos usando monitores
monitor dp
enum thinking hungry eating state[5]
condition self[5]
void pickup(int i) siguiente movimiento
void putdown(int i) siguiente movimiento
void test(int i) siguiente movimiento
void init()
for (int i = 0 i lt 5 i++)
state[i] = thinking
void pickup(int i)
state[i] = hungry
test[i]
if (state[i] = eating)
self[i]wait()
void putdown(int i)
state[i] = thinking
probar vecinos izquierdo y derecho
test((i+4) 5)
test((i+1) 5)
void test(int i)
if ( (state[(I + 4) 5] = eating) ampamp
(state[i] == hungry) ampamp
(state[(i + 1) 5] = eating))
state[i] = eating
self[i]signal()
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Variablessemaphore mutex (initially = 1)semaphore next (initially = 0)int next-count = 0 Cada procedimiento externo F seraacute
reemplazado porwait(mutex)hellipbody of Fhellipif (next-count gt 0)signal(next)elsesignal(mutex) La exclusioacuten mutua dentro de un monitor estaacute
asegurada
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Por cada variable de condicioacuten x tenemos
semaphore x-sem (initially = 0)
int x-count = 01048708 La operacioacuten xwait
puede ser implementada como
x-count++if (next-count gt 0)signal(next)elsesignal(mutex)wait(x-sem)x-count--
La operacioacuten xsignal puede ser implementada como
if (x-count gt 0) next-count++signal(x-sem)wait(next)next-count--
1 SEMAacuteFORO - IMPLEMENTACIOacuteN
wait(S)Svalue--if (Svalue lt 0) agregar este
proceso a la lista SL
block
signal(S)Svalue++if (Svalue lt= 0)
remover un proceso P de la lista SLwakeup(P)
Definamos las operaciones con semaacuteforos como
1 SEMAacuteFORO - INTERBLOQUEOS E INANICIOacuteN
Semaacuteforo de conteo ndash valor entero con un rango sin restricciones dentro de un dominio
Semaacuteforo binario ndash se los conoce tambieacuten como cerrojos muacutetex
valor entero con un rango solo entre 0 y 1 puede ser el maacutes simple de implementar
Puede implementarse un semaacuteforo de conteo S como un semaacuteforo binario
Dos o mas procesos estaacuten esperando indefidinamente a que se produzca otro proceso que solo puede ser consecuencia del resultado de otro proceso que esta en estado de espera debido a la ejecucioacuten de la operacioacuten signal() a esto se le atribuye que los procesos se han interbloqueado
1 SEMAacuteFORO - INTERBLOQUEOS DE INACICIOacuteN
Interbloqueo(Deadlock) ndash dos oacute maacutes procesos estaacuten esperando indefinidamente por un evento que puede ser causado soacutelo por uno de los procesos que estaacuten en espera Suponga que S y Q son dos semaacuteforos inicializados a 1
P0 P1wait(S) wait(Q)wait(Q) wait(S)M Msignal(S) signal(Q)signal(Q) signal(S)
Inanicioacuten ndash bloqueo indefinido Un proceso puede jamaacutes ser removido de la cola de semaacuteforos en la cual se encuentra suspendido
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
21 Problema del Buffer Limitado22 Problema de los Lectores y
Escritores23 Problema de los Filoacutesofos Comensales
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
21 Problema del Buffer Limitado
Se utiliza para ilustrar la potencia de las primitivas de sincronizacioacuten
Datos compartidos semaphore full empty mutex Inicialmente
full = 0 empty = n mutex = 1
do hellip produce un item en nextp hellip wait(empty)Cuenta el
de bufferes vacios y llenos
wait(mutex) hellip agrega nextp al buffer hellip signal(mutex) signal(full) Cuenta el
de bufferes vacios y llenos
while (1)
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN 21 Problema del Buffer Limitado-Proceso
Consumidor
do wait(full)wait(mutex)hellipremueve un item desde el buffer a nextchellipsignal(mutex)signal(empty)hellipconsume el item en nextchellip while (1)
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
22 Problema de los Lectores - Escritores
Esta estructura de utiliza para asegurar q los problemas generados por acceder simultaacuteneamente un escritor y alguacuten otro proceso no afloren
Lectores-Escritores Datos compartidos
semaphore mutex wrtInicialmentemutex = 1 wrt = 1 readcount = 0
Proceso Escritorwait(wrt)asegurar la exclusioacuten mutua mientras actualioza la variablehellipestaacute escribiendohellipsignal(wrt)
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
23 Problema de los Filoacutesofos Comensales
Es un ejemplo de amplia clase de problemas de control de concurrencia
Datos compartidos
semaphore chopstick[5]
Inicialmente todos los valores son 1
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
23 Problema de los Filoacutesofos Comensales
Filoacutesofo i
do wait(chopstick[i])wait(chopstick[(i+1) 5])hellipcomerhellipsignal(chopstick[i])
signal(chopstick[(i+1) 5])hellippensarhellip while (1)
3 MONITORES
31 Utilizacioacuten 32 Solucioacuten al problema de la
cena de los filoacutesofos usando monitores
33 Implementacioacuten de un monitor usando semaacuteforos
34 Reanudacioacuten de procesos dentro de un monitor
3MONITORES
Son una herramienta de sincronizacion mas estructurada que un semaacuteforo encapsula variables compartidas en conjunto con los procedimientos para accesar esas variables
Son tipo de dato abstracto por lo tanto los procesos llaman a los procedimientos del monitor en cualquier momento pero no pueden accesar directamente a las variables encapsuladas
3 MONITORES
Permiten a un proceso esperar dentro del monitor una variable de condicioacuten debe de ser declarada como condition x y
La variable de condicioacuten puede solo ser usada con las operaciones wait y signal
La operacioacutenxwait()significa que al proceso
que invoca esta operacioacuten
es suspendido hasta que algun otro proceso invoque
xsignal() La operacioacuten xsignal
reanuda exactamente un proceso
suspendido If no hay proceso suspendido then la
operacioacuten signal no tiene efecto
3MONITORES31 Utilizacioacuten
Construccioacuten de sincronizacioacuten de alto-nivel que permite compartir con
seguridad un tipo de datos abstracto entre procesos concurrentes
monitor nombre-monitor
declaracioacuten de variables compartidas
procedure body P1 (hellip) procedure body P2 (hellip) procedure body Pn (hellip) coacutedigo de inicializacioacuten
3MONITORES31 Utilizacioacuten
Visioacuten Esquemaacutetica de un MonitorMonitor con Variables de Condicioacuten
3MONITORES32 Solucioacuten al problema de la cena de
los filoacutesofos usando monitores
monitor dp
enum thinking hungry eating state[5]
condition self[5]
void pickup(int i) siguiente movimiento
void putdown(int i) siguiente movimiento
void test(int i) siguiente movimiento
void init()
for (int i = 0 i lt 5 i++)
state[i] = thinking
void pickup(int i)
state[i] = hungry
test[i]
if (state[i] = eating)
self[i]wait()
void putdown(int i)
state[i] = thinking
probar vecinos izquierdo y derecho
test((i+4) 5)
test((i+1) 5)
void test(int i)
if ( (state[(I + 4) 5] = eating) ampamp
(state[i] == hungry) ampamp
(state[(i + 1) 5] = eating))
state[i] = eating
self[i]signal()
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Variablessemaphore mutex (initially = 1)semaphore next (initially = 0)int next-count = 0 Cada procedimiento externo F seraacute
reemplazado porwait(mutex)hellipbody of Fhellipif (next-count gt 0)signal(next)elsesignal(mutex) La exclusioacuten mutua dentro de un monitor estaacute
asegurada
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Por cada variable de condicioacuten x tenemos
semaphore x-sem (initially = 0)
int x-count = 01048708 La operacioacuten xwait
puede ser implementada como
x-count++if (next-count gt 0)signal(next)elsesignal(mutex)wait(x-sem)x-count--
La operacioacuten xsignal puede ser implementada como
if (x-count gt 0) next-count++signal(x-sem)wait(next)next-count--
1 SEMAacuteFORO - INTERBLOQUEOS E INANICIOacuteN
Semaacuteforo de conteo ndash valor entero con un rango sin restricciones dentro de un dominio
Semaacuteforo binario ndash se los conoce tambieacuten como cerrojos muacutetex
valor entero con un rango solo entre 0 y 1 puede ser el maacutes simple de implementar
Puede implementarse un semaacuteforo de conteo S como un semaacuteforo binario
Dos o mas procesos estaacuten esperando indefidinamente a que se produzca otro proceso que solo puede ser consecuencia del resultado de otro proceso que esta en estado de espera debido a la ejecucioacuten de la operacioacuten signal() a esto se le atribuye que los procesos se han interbloqueado
1 SEMAacuteFORO - INTERBLOQUEOS DE INACICIOacuteN
Interbloqueo(Deadlock) ndash dos oacute maacutes procesos estaacuten esperando indefinidamente por un evento que puede ser causado soacutelo por uno de los procesos que estaacuten en espera Suponga que S y Q son dos semaacuteforos inicializados a 1
P0 P1wait(S) wait(Q)wait(Q) wait(S)M Msignal(S) signal(Q)signal(Q) signal(S)
Inanicioacuten ndash bloqueo indefinido Un proceso puede jamaacutes ser removido de la cola de semaacuteforos en la cual se encuentra suspendido
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
21 Problema del Buffer Limitado22 Problema de los Lectores y
Escritores23 Problema de los Filoacutesofos Comensales
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
21 Problema del Buffer Limitado
Se utiliza para ilustrar la potencia de las primitivas de sincronizacioacuten
Datos compartidos semaphore full empty mutex Inicialmente
full = 0 empty = n mutex = 1
do hellip produce un item en nextp hellip wait(empty)Cuenta el
de bufferes vacios y llenos
wait(mutex) hellip agrega nextp al buffer hellip signal(mutex) signal(full) Cuenta el
de bufferes vacios y llenos
while (1)
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN 21 Problema del Buffer Limitado-Proceso
Consumidor
do wait(full)wait(mutex)hellipremueve un item desde el buffer a nextchellipsignal(mutex)signal(empty)hellipconsume el item en nextchellip while (1)
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
22 Problema de los Lectores - Escritores
Esta estructura de utiliza para asegurar q los problemas generados por acceder simultaacuteneamente un escritor y alguacuten otro proceso no afloren
Lectores-Escritores Datos compartidos
semaphore mutex wrtInicialmentemutex = 1 wrt = 1 readcount = 0
Proceso Escritorwait(wrt)asegurar la exclusioacuten mutua mientras actualioza la variablehellipestaacute escribiendohellipsignal(wrt)
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
23 Problema de los Filoacutesofos Comensales
Es un ejemplo de amplia clase de problemas de control de concurrencia
Datos compartidos
semaphore chopstick[5]
Inicialmente todos los valores son 1
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
23 Problema de los Filoacutesofos Comensales
Filoacutesofo i
do wait(chopstick[i])wait(chopstick[(i+1) 5])hellipcomerhellipsignal(chopstick[i])
signal(chopstick[(i+1) 5])hellippensarhellip while (1)
3 MONITORES
31 Utilizacioacuten 32 Solucioacuten al problema de la
cena de los filoacutesofos usando monitores
33 Implementacioacuten de un monitor usando semaacuteforos
34 Reanudacioacuten de procesos dentro de un monitor
3MONITORES
Son una herramienta de sincronizacion mas estructurada que un semaacuteforo encapsula variables compartidas en conjunto con los procedimientos para accesar esas variables
Son tipo de dato abstracto por lo tanto los procesos llaman a los procedimientos del monitor en cualquier momento pero no pueden accesar directamente a las variables encapsuladas
3 MONITORES
Permiten a un proceso esperar dentro del monitor una variable de condicioacuten debe de ser declarada como condition x y
La variable de condicioacuten puede solo ser usada con las operaciones wait y signal
La operacioacutenxwait()significa que al proceso
que invoca esta operacioacuten
es suspendido hasta que algun otro proceso invoque
xsignal() La operacioacuten xsignal
reanuda exactamente un proceso
suspendido If no hay proceso suspendido then la
operacioacuten signal no tiene efecto
3MONITORES31 Utilizacioacuten
Construccioacuten de sincronizacioacuten de alto-nivel que permite compartir con
seguridad un tipo de datos abstracto entre procesos concurrentes
monitor nombre-monitor
declaracioacuten de variables compartidas
procedure body P1 (hellip) procedure body P2 (hellip) procedure body Pn (hellip) coacutedigo de inicializacioacuten
3MONITORES31 Utilizacioacuten
Visioacuten Esquemaacutetica de un MonitorMonitor con Variables de Condicioacuten
3MONITORES32 Solucioacuten al problema de la cena de
los filoacutesofos usando monitores
monitor dp
enum thinking hungry eating state[5]
condition self[5]
void pickup(int i) siguiente movimiento
void putdown(int i) siguiente movimiento
void test(int i) siguiente movimiento
void init()
for (int i = 0 i lt 5 i++)
state[i] = thinking
void pickup(int i)
state[i] = hungry
test[i]
if (state[i] = eating)
self[i]wait()
void putdown(int i)
state[i] = thinking
probar vecinos izquierdo y derecho
test((i+4) 5)
test((i+1) 5)
void test(int i)
if ( (state[(I + 4) 5] = eating) ampamp
(state[i] == hungry) ampamp
(state[(i + 1) 5] = eating))
state[i] = eating
self[i]signal()
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Variablessemaphore mutex (initially = 1)semaphore next (initially = 0)int next-count = 0 Cada procedimiento externo F seraacute
reemplazado porwait(mutex)hellipbody of Fhellipif (next-count gt 0)signal(next)elsesignal(mutex) La exclusioacuten mutua dentro de un monitor estaacute
asegurada
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Por cada variable de condicioacuten x tenemos
semaphore x-sem (initially = 0)
int x-count = 01048708 La operacioacuten xwait
puede ser implementada como
x-count++if (next-count gt 0)signal(next)elsesignal(mutex)wait(x-sem)x-count--
La operacioacuten xsignal puede ser implementada como
if (x-count gt 0) next-count++signal(x-sem)wait(next)next-count--
1 SEMAacuteFORO - INTERBLOQUEOS DE INACICIOacuteN
Interbloqueo(Deadlock) ndash dos oacute maacutes procesos estaacuten esperando indefinidamente por un evento que puede ser causado soacutelo por uno de los procesos que estaacuten en espera Suponga que S y Q son dos semaacuteforos inicializados a 1
P0 P1wait(S) wait(Q)wait(Q) wait(S)M Msignal(S) signal(Q)signal(Q) signal(S)
Inanicioacuten ndash bloqueo indefinido Un proceso puede jamaacutes ser removido de la cola de semaacuteforos en la cual se encuentra suspendido
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
21 Problema del Buffer Limitado22 Problema de los Lectores y
Escritores23 Problema de los Filoacutesofos Comensales
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
21 Problema del Buffer Limitado
Se utiliza para ilustrar la potencia de las primitivas de sincronizacioacuten
Datos compartidos semaphore full empty mutex Inicialmente
full = 0 empty = n mutex = 1
do hellip produce un item en nextp hellip wait(empty)Cuenta el
de bufferes vacios y llenos
wait(mutex) hellip agrega nextp al buffer hellip signal(mutex) signal(full) Cuenta el
de bufferes vacios y llenos
while (1)
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN 21 Problema del Buffer Limitado-Proceso
Consumidor
do wait(full)wait(mutex)hellipremueve un item desde el buffer a nextchellipsignal(mutex)signal(empty)hellipconsume el item en nextchellip while (1)
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
22 Problema de los Lectores - Escritores
Esta estructura de utiliza para asegurar q los problemas generados por acceder simultaacuteneamente un escritor y alguacuten otro proceso no afloren
Lectores-Escritores Datos compartidos
semaphore mutex wrtInicialmentemutex = 1 wrt = 1 readcount = 0
Proceso Escritorwait(wrt)asegurar la exclusioacuten mutua mientras actualioza la variablehellipestaacute escribiendohellipsignal(wrt)
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
23 Problema de los Filoacutesofos Comensales
Es un ejemplo de amplia clase de problemas de control de concurrencia
Datos compartidos
semaphore chopstick[5]
Inicialmente todos los valores son 1
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
23 Problema de los Filoacutesofos Comensales
Filoacutesofo i
do wait(chopstick[i])wait(chopstick[(i+1) 5])hellipcomerhellipsignal(chopstick[i])
signal(chopstick[(i+1) 5])hellippensarhellip while (1)
3 MONITORES
31 Utilizacioacuten 32 Solucioacuten al problema de la
cena de los filoacutesofos usando monitores
33 Implementacioacuten de un monitor usando semaacuteforos
34 Reanudacioacuten de procesos dentro de un monitor
3MONITORES
Son una herramienta de sincronizacion mas estructurada que un semaacuteforo encapsula variables compartidas en conjunto con los procedimientos para accesar esas variables
Son tipo de dato abstracto por lo tanto los procesos llaman a los procedimientos del monitor en cualquier momento pero no pueden accesar directamente a las variables encapsuladas
3 MONITORES
Permiten a un proceso esperar dentro del monitor una variable de condicioacuten debe de ser declarada como condition x y
La variable de condicioacuten puede solo ser usada con las operaciones wait y signal
La operacioacutenxwait()significa que al proceso
que invoca esta operacioacuten
es suspendido hasta que algun otro proceso invoque
xsignal() La operacioacuten xsignal
reanuda exactamente un proceso
suspendido If no hay proceso suspendido then la
operacioacuten signal no tiene efecto
3MONITORES31 Utilizacioacuten
Construccioacuten de sincronizacioacuten de alto-nivel que permite compartir con
seguridad un tipo de datos abstracto entre procesos concurrentes
monitor nombre-monitor
declaracioacuten de variables compartidas
procedure body P1 (hellip) procedure body P2 (hellip) procedure body Pn (hellip) coacutedigo de inicializacioacuten
3MONITORES31 Utilizacioacuten
Visioacuten Esquemaacutetica de un MonitorMonitor con Variables de Condicioacuten
3MONITORES32 Solucioacuten al problema de la cena de
los filoacutesofos usando monitores
monitor dp
enum thinking hungry eating state[5]
condition self[5]
void pickup(int i) siguiente movimiento
void putdown(int i) siguiente movimiento
void test(int i) siguiente movimiento
void init()
for (int i = 0 i lt 5 i++)
state[i] = thinking
void pickup(int i)
state[i] = hungry
test[i]
if (state[i] = eating)
self[i]wait()
void putdown(int i)
state[i] = thinking
probar vecinos izquierdo y derecho
test((i+4) 5)
test((i+1) 5)
void test(int i)
if ( (state[(I + 4) 5] = eating) ampamp
(state[i] == hungry) ampamp
(state[(i + 1) 5] = eating))
state[i] = eating
self[i]signal()
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Variablessemaphore mutex (initially = 1)semaphore next (initially = 0)int next-count = 0 Cada procedimiento externo F seraacute
reemplazado porwait(mutex)hellipbody of Fhellipif (next-count gt 0)signal(next)elsesignal(mutex) La exclusioacuten mutua dentro de un monitor estaacute
asegurada
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Por cada variable de condicioacuten x tenemos
semaphore x-sem (initially = 0)
int x-count = 01048708 La operacioacuten xwait
puede ser implementada como
x-count++if (next-count gt 0)signal(next)elsesignal(mutex)wait(x-sem)x-count--
La operacioacuten xsignal puede ser implementada como
if (x-count gt 0) next-count++signal(x-sem)wait(next)next-count--
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
21 Problema del Buffer Limitado22 Problema de los Lectores y
Escritores23 Problema de los Filoacutesofos Comensales
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
21 Problema del Buffer Limitado
Se utiliza para ilustrar la potencia de las primitivas de sincronizacioacuten
Datos compartidos semaphore full empty mutex Inicialmente
full = 0 empty = n mutex = 1
do hellip produce un item en nextp hellip wait(empty)Cuenta el
de bufferes vacios y llenos
wait(mutex) hellip agrega nextp al buffer hellip signal(mutex) signal(full) Cuenta el
de bufferes vacios y llenos
while (1)
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN 21 Problema del Buffer Limitado-Proceso
Consumidor
do wait(full)wait(mutex)hellipremueve un item desde el buffer a nextchellipsignal(mutex)signal(empty)hellipconsume el item en nextchellip while (1)
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
22 Problema de los Lectores - Escritores
Esta estructura de utiliza para asegurar q los problemas generados por acceder simultaacuteneamente un escritor y alguacuten otro proceso no afloren
Lectores-Escritores Datos compartidos
semaphore mutex wrtInicialmentemutex = 1 wrt = 1 readcount = 0
Proceso Escritorwait(wrt)asegurar la exclusioacuten mutua mientras actualioza la variablehellipestaacute escribiendohellipsignal(wrt)
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
23 Problema de los Filoacutesofos Comensales
Es un ejemplo de amplia clase de problemas de control de concurrencia
Datos compartidos
semaphore chopstick[5]
Inicialmente todos los valores son 1
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
23 Problema de los Filoacutesofos Comensales
Filoacutesofo i
do wait(chopstick[i])wait(chopstick[(i+1) 5])hellipcomerhellipsignal(chopstick[i])
signal(chopstick[(i+1) 5])hellippensarhellip while (1)
3 MONITORES
31 Utilizacioacuten 32 Solucioacuten al problema de la
cena de los filoacutesofos usando monitores
33 Implementacioacuten de un monitor usando semaacuteforos
34 Reanudacioacuten de procesos dentro de un monitor
3MONITORES
Son una herramienta de sincronizacion mas estructurada que un semaacuteforo encapsula variables compartidas en conjunto con los procedimientos para accesar esas variables
Son tipo de dato abstracto por lo tanto los procesos llaman a los procedimientos del monitor en cualquier momento pero no pueden accesar directamente a las variables encapsuladas
3 MONITORES
Permiten a un proceso esperar dentro del monitor una variable de condicioacuten debe de ser declarada como condition x y
La variable de condicioacuten puede solo ser usada con las operaciones wait y signal
La operacioacutenxwait()significa que al proceso
que invoca esta operacioacuten
es suspendido hasta que algun otro proceso invoque
xsignal() La operacioacuten xsignal
reanuda exactamente un proceso
suspendido If no hay proceso suspendido then la
operacioacuten signal no tiene efecto
3MONITORES31 Utilizacioacuten
Construccioacuten de sincronizacioacuten de alto-nivel que permite compartir con
seguridad un tipo de datos abstracto entre procesos concurrentes
monitor nombre-monitor
declaracioacuten de variables compartidas
procedure body P1 (hellip) procedure body P2 (hellip) procedure body Pn (hellip) coacutedigo de inicializacioacuten
3MONITORES31 Utilizacioacuten
Visioacuten Esquemaacutetica de un MonitorMonitor con Variables de Condicioacuten
3MONITORES32 Solucioacuten al problema de la cena de
los filoacutesofos usando monitores
monitor dp
enum thinking hungry eating state[5]
condition self[5]
void pickup(int i) siguiente movimiento
void putdown(int i) siguiente movimiento
void test(int i) siguiente movimiento
void init()
for (int i = 0 i lt 5 i++)
state[i] = thinking
void pickup(int i)
state[i] = hungry
test[i]
if (state[i] = eating)
self[i]wait()
void putdown(int i)
state[i] = thinking
probar vecinos izquierdo y derecho
test((i+4) 5)
test((i+1) 5)
void test(int i)
if ( (state[(I + 4) 5] = eating) ampamp
(state[i] == hungry) ampamp
(state[(i + 1) 5] = eating))
state[i] = eating
self[i]signal()
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Variablessemaphore mutex (initially = 1)semaphore next (initially = 0)int next-count = 0 Cada procedimiento externo F seraacute
reemplazado porwait(mutex)hellipbody of Fhellipif (next-count gt 0)signal(next)elsesignal(mutex) La exclusioacuten mutua dentro de un monitor estaacute
asegurada
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Por cada variable de condicioacuten x tenemos
semaphore x-sem (initially = 0)
int x-count = 01048708 La operacioacuten xwait
puede ser implementada como
x-count++if (next-count gt 0)signal(next)elsesignal(mutex)wait(x-sem)x-count--
La operacioacuten xsignal puede ser implementada como
if (x-count gt 0) next-count++signal(x-sem)wait(next)next-count--
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
21 Problema del Buffer Limitado
Se utiliza para ilustrar la potencia de las primitivas de sincronizacioacuten
Datos compartidos semaphore full empty mutex Inicialmente
full = 0 empty = n mutex = 1
do hellip produce un item en nextp hellip wait(empty)Cuenta el
de bufferes vacios y llenos
wait(mutex) hellip agrega nextp al buffer hellip signal(mutex) signal(full) Cuenta el
de bufferes vacios y llenos
while (1)
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN 21 Problema del Buffer Limitado-Proceso
Consumidor
do wait(full)wait(mutex)hellipremueve un item desde el buffer a nextchellipsignal(mutex)signal(empty)hellipconsume el item en nextchellip while (1)
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
22 Problema de los Lectores - Escritores
Esta estructura de utiliza para asegurar q los problemas generados por acceder simultaacuteneamente un escritor y alguacuten otro proceso no afloren
Lectores-Escritores Datos compartidos
semaphore mutex wrtInicialmentemutex = 1 wrt = 1 readcount = 0
Proceso Escritorwait(wrt)asegurar la exclusioacuten mutua mientras actualioza la variablehellipestaacute escribiendohellipsignal(wrt)
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
23 Problema de los Filoacutesofos Comensales
Es un ejemplo de amplia clase de problemas de control de concurrencia
Datos compartidos
semaphore chopstick[5]
Inicialmente todos los valores son 1
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
23 Problema de los Filoacutesofos Comensales
Filoacutesofo i
do wait(chopstick[i])wait(chopstick[(i+1) 5])hellipcomerhellipsignal(chopstick[i])
signal(chopstick[(i+1) 5])hellippensarhellip while (1)
3 MONITORES
31 Utilizacioacuten 32 Solucioacuten al problema de la
cena de los filoacutesofos usando monitores
33 Implementacioacuten de un monitor usando semaacuteforos
34 Reanudacioacuten de procesos dentro de un monitor
3MONITORES
Son una herramienta de sincronizacion mas estructurada que un semaacuteforo encapsula variables compartidas en conjunto con los procedimientos para accesar esas variables
Son tipo de dato abstracto por lo tanto los procesos llaman a los procedimientos del monitor en cualquier momento pero no pueden accesar directamente a las variables encapsuladas
3 MONITORES
Permiten a un proceso esperar dentro del monitor una variable de condicioacuten debe de ser declarada como condition x y
La variable de condicioacuten puede solo ser usada con las operaciones wait y signal
La operacioacutenxwait()significa que al proceso
que invoca esta operacioacuten
es suspendido hasta que algun otro proceso invoque
xsignal() La operacioacuten xsignal
reanuda exactamente un proceso
suspendido If no hay proceso suspendido then la
operacioacuten signal no tiene efecto
3MONITORES31 Utilizacioacuten
Construccioacuten de sincronizacioacuten de alto-nivel que permite compartir con
seguridad un tipo de datos abstracto entre procesos concurrentes
monitor nombre-monitor
declaracioacuten de variables compartidas
procedure body P1 (hellip) procedure body P2 (hellip) procedure body Pn (hellip) coacutedigo de inicializacioacuten
3MONITORES31 Utilizacioacuten
Visioacuten Esquemaacutetica de un MonitorMonitor con Variables de Condicioacuten
3MONITORES32 Solucioacuten al problema de la cena de
los filoacutesofos usando monitores
monitor dp
enum thinking hungry eating state[5]
condition self[5]
void pickup(int i) siguiente movimiento
void putdown(int i) siguiente movimiento
void test(int i) siguiente movimiento
void init()
for (int i = 0 i lt 5 i++)
state[i] = thinking
void pickup(int i)
state[i] = hungry
test[i]
if (state[i] = eating)
self[i]wait()
void putdown(int i)
state[i] = thinking
probar vecinos izquierdo y derecho
test((i+4) 5)
test((i+1) 5)
void test(int i)
if ( (state[(I + 4) 5] = eating) ampamp
(state[i] == hungry) ampamp
(state[(i + 1) 5] = eating))
state[i] = eating
self[i]signal()
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Variablessemaphore mutex (initially = 1)semaphore next (initially = 0)int next-count = 0 Cada procedimiento externo F seraacute
reemplazado porwait(mutex)hellipbody of Fhellipif (next-count gt 0)signal(next)elsesignal(mutex) La exclusioacuten mutua dentro de un monitor estaacute
asegurada
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Por cada variable de condicioacuten x tenemos
semaphore x-sem (initially = 0)
int x-count = 01048708 La operacioacuten xwait
puede ser implementada como
x-count++if (next-count gt 0)signal(next)elsesignal(mutex)wait(x-sem)x-count--
La operacioacuten xsignal puede ser implementada como
if (x-count gt 0) next-count++signal(x-sem)wait(next)next-count--
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN 21 Problema del Buffer Limitado-Proceso
Consumidor
do wait(full)wait(mutex)hellipremueve un item desde el buffer a nextchellipsignal(mutex)signal(empty)hellipconsume el item en nextchellip while (1)
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
22 Problema de los Lectores - Escritores
Esta estructura de utiliza para asegurar q los problemas generados por acceder simultaacuteneamente un escritor y alguacuten otro proceso no afloren
Lectores-Escritores Datos compartidos
semaphore mutex wrtInicialmentemutex = 1 wrt = 1 readcount = 0
Proceso Escritorwait(wrt)asegurar la exclusioacuten mutua mientras actualioza la variablehellipestaacute escribiendohellipsignal(wrt)
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
23 Problema de los Filoacutesofos Comensales
Es un ejemplo de amplia clase de problemas de control de concurrencia
Datos compartidos
semaphore chopstick[5]
Inicialmente todos los valores son 1
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
23 Problema de los Filoacutesofos Comensales
Filoacutesofo i
do wait(chopstick[i])wait(chopstick[(i+1) 5])hellipcomerhellipsignal(chopstick[i])
signal(chopstick[(i+1) 5])hellippensarhellip while (1)
3 MONITORES
31 Utilizacioacuten 32 Solucioacuten al problema de la
cena de los filoacutesofos usando monitores
33 Implementacioacuten de un monitor usando semaacuteforos
34 Reanudacioacuten de procesos dentro de un monitor
3MONITORES
Son una herramienta de sincronizacion mas estructurada que un semaacuteforo encapsula variables compartidas en conjunto con los procedimientos para accesar esas variables
Son tipo de dato abstracto por lo tanto los procesos llaman a los procedimientos del monitor en cualquier momento pero no pueden accesar directamente a las variables encapsuladas
3 MONITORES
Permiten a un proceso esperar dentro del monitor una variable de condicioacuten debe de ser declarada como condition x y
La variable de condicioacuten puede solo ser usada con las operaciones wait y signal
La operacioacutenxwait()significa que al proceso
que invoca esta operacioacuten
es suspendido hasta que algun otro proceso invoque
xsignal() La operacioacuten xsignal
reanuda exactamente un proceso
suspendido If no hay proceso suspendido then la
operacioacuten signal no tiene efecto
3MONITORES31 Utilizacioacuten
Construccioacuten de sincronizacioacuten de alto-nivel que permite compartir con
seguridad un tipo de datos abstracto entre procesos concurrentes
monitor nombre-monitor
declaracioacuten de variables compartidas
procedure body P1 (hellip) procedure body P2 (hellip) procedure body Pn (hellip) coacutedigo de inicializacioacuten
3MONITORES31 Utilizacioacuten
Visioacuten Esquemaacutetica de un MonitorMonitor con Variables de Condicioacuten
3MONITORES32 Solucioacuten al problema de la cena de
los filoacutesofos usando monitores
monitor dp
enum thinking hungry eating state[5]
condition self[5]
void pickup(int i) siguiente movimiento
void putdown(int i) siguiente movimiento
void test(int i) siguiente movimiento
void init()
for (int i = 0 i lt 5 i++)
state[i] = thinking
void pickup(int i)
state[i] = hungry
test[i]
if (state[i] = eating)
self[i]wait()
void putdown(int i)
state[i] = thinking
probar vecinos izquierdo y derecho
test((i+4) 5)
test((i+1) 5)
void test(int i)
if ( (state[(I + 4) 5] = eating) ampamp
(state[i] == hungry) ampamp
(state[(i + 1) 5] = eating))
state[i] = eating
self[i]signal()
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Variablessemaphore mutex (initially = 1)semaphore next (initially = 0)int next-count = 0 Cada procedimiento externo F seraacute
reemplazado porwait(mutex)hellipbody of Fhellipif (next-count gt 0)signal(next)elsesignal(mutex) La exclusioacuten mutua dentro de un monitor estaacute
asegurada
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Por cada variable de condicioacuten x tenemos
semaphore x-sem (initially = 0)
int x-count = 01048708 La operacioacuten xwait
puede ser implementada como
x-count++if (next-count gt 0)signal(next)elsesignal(mutex)wait(x-sem)x-count--
La operacioacuten xsignal puede ser implementada como
if (x-count gt 0) next-count++signal(x-sem)wait(next)next-count--
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
22 Problema de los Lectores - Escritores
Esta estructura de utiliza para asegurar q los problemas generados por acceder simultaacuteneamente un escritor y alguacuten otro proceso no afloren
Lectores-Escritores Datos compartidos
semaphore mutex wrtInicialmentemutex = 1 wrt = 1 readcount = 0
Proceso Escritorwait(wrt)asegurar la exclusioacuten mutua mientras actualioza la variablehellipestaacute escribiendohellipsignal(wrt)
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
23 Problema de los Filoacutesofos Comensales
Es un ejemplo de amplia clase de problemas de control de concurrencia
Datos compartidos
semaphore chopstick[5]
Inicialmente todos los valores son 1
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
23 Problema de los Filoacutesofos Comensales
Filoacutesofo i
do wait(chopstick[i])wait(chopstick[(i+1) 5])hellipcomerhellipsignal(chopstick[i])
signal(chopstick[(i+1) 5])hellippensarhellip while (1)
3 MONITORES
31 Utilizacioacuten 32 Solucioacuten al problema de la
cena de los filoacutesofos usando monitores
33 Implementacioacuten de un monitor usando semaacuteforos
34 Reanudacioacuten de procesos dentro de un monitor
3MONITORES
Son una herramienta de sincronizacion mas estructurada que un semaacuteforo encapsula variables compartidas en conjunto con los procedimientos para accesar esas variables
Son tipo de dato abstracto por lo tanto los procesos llaman a los procedimientos del monitor en cualquier momento pero no pueden accesar directamente a las variables encapsuladas
3 MONITORES
Permiten a un proceso esperar dentro del monitor una variable de condicioacuten debe de ser declarada como condition x y
La variable de condicioacuten puede solo ser usada con las operaciones wait y signal
La operacioacutenxwait()significa que al proceso
que invoca esta operacioacuten
es suspendido hasta que algun otro proceso invoque
xsignal() La operacioacuten xsignal
reanuda exactamente un proceso
suspendido If no hay proceso suspendido then la
operacioacuten signal no tiene efecto
3MONITORES31 Utilizacioacuten
Construccioacuten de sincronizacioacuten de alto-nivel que permite compartir con
seguridad un tipo de datos abstracto entre procesos concurrentes
monitor nombre-monitor
declaracioacuten de variables compartidas
procedure body P1 (hellip) procedure body P2 (hellip) procedure body Pn (hellip) coacutedigo de inicializacioacuten
3MONITORES31 Utilizacioacuten
Visioacuten Esquemaacutetica de un MonitorMonitor con Variables de Condicioacuten
3MONITORES32 Solucioacuten al problema de la cena de
los filoacutesofos usando monitores
monitor dp
enum thinking hungry eating state[5]
condition self[5]
void pickup(int i) siguiente movimiento
void putdown(int i) siguiente movimiento
void test(int i) siguiente movimiento
void init()
for (int i = 0 i lt 5 i++)
state[i] = thinking
void pickup(int i)
state[i] = hungry
test[i]
if (state[i] = eating)
self[i]wait()
void putdown(int i)
state[i] = thinking
probar vecinos izquierdo y derecho
test((i+4) 5)
test((i+1) 5)
void test(int i)
if ( (state[(I + 4) 5] = eating) ampamp
(state[i] == hungry) ampamp
(state[(i + 1) 5] = eating))
state[i] = eating
self[i]signal()
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Variablessemaphore mutex (initially = 1)semaphore next (initially = 0)int next-count = 0 Cada procedimiento externo F seraacute
reemplazado porwait(mutex)hellipbody of Fhellipif (next-count gt 0)signal(next)elsesignal(mutex) La exclusioacuten mutua dentro de un monitor estaacute
asegurada
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Por cada variable de condicioacuten x tenemos
semaphore x-sem (initially = 0)
int x-count = 01048708 La operacioacuten xwait
puede ser implementada como
x-count++if (next-count gt 0)signal(next)elsesignal(mutex)wait(x-sem)x-count--
La operacioacuten xsignal puede ser implementada como
if (x-count gt 0) next-count++signal(x-sem)wait(next)next-count--
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
23 Problema de los Filoacutesofos Comensales
Es un ejemplo de amplia clase de problemas de control de concurrencia
Datos compartidos
semaphore chopstick[5]
Inicialmente todos los valores son 1
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
23 Problema de los Filoacutesofos Comensales
Filoacutesofo i
do wait(chopstick[i])wait(chopstick[(i+1) 5])hellipcomerhellipsignal(chopstick[i])
signal(chopstick[(i+1) 5])hellippensarhellip while (1)
3 MONITORES
31 Utilizacioacuten 32 Solucioacuten al problema de la
cena de los filoacutesofos usando monitores
33 Implementacioacuten de un monitor usando semaacuteforos
34 Reanudacioacuten de procesos dentro de un monitor
3MONITORES
Son una herramienta de sincronizacion mas estructurada que un semaacuteforo encapsula variables compartidas en conjunto con los procedimientos para accesar esas variables
Son tipo de dato abstracto por lo tanto los procesos llaman a los procedimientos del monitor en cualquier momento pero no pueden accesar directamente a las variables encapsuladas
3 MONITORES
Permiten a un proceso esperar dentro del monitor una variable de condicioacuten debe de ser declarada como condition x y
La variable de condicioacuten puede solo ser usada con las operaciones wait y signal
La operacioacutenxwait()significa que al proceso
que invoca esta operacioacuten
es suspendido hasta que algun otro proceso invoque
xsignal() La operacioacuten xsignal
reanuda exactamente un proceso
suspendido If no hay proceso suspendido then la
operacioacuten signal no tiene efecto
3MONITORES31 Utilizacioacuten
Construccioacuten de sincronizacioacuten de alto-nivel que permite compartir con
seguridad un tipo de datos abstracto entre procesos concurrentes
monitor nombre-monitor
declaracioacuten de variables compartidas
procedure body P1 (hellip) procedure body P2 (hellip) procedure body Pn (hellip) coacutedigo de inicializacioacuten
3MONITORES31 Utilizacioacuten
Visioacuten Esquemaacutetica de un MonitorMonitor con Variables de Condicioacuten
3MONITORES32 Solucioacuten al problema de la cena de
los filoacutesofos usando monitores
monitor dp
enum thinking hungry eating state[5]
condition self[5]
void pickup(int i) siguiente movimiento
void putdown(int i) siguiente movimiento
void test(int i) siguiente movimiento
void init()
for (int i = 0 i lt 5 i++)
state[i] = thinking
void pickup(int i)
state[i] = hungry
test[i]
if (state[i] = eating)
self[i]wait()
void putdown(int i)
state[i] = thinking
probar vecinos izquierdo y derecho
test((i+4) 5)
test((i+1) 5)
void test(int i)
if ( (state[(I + 4) 5] = eating) ampamp
(state[i] == hungry) ampamp
(state[(i + 1) 5] = eating))
state[i] = eating
self[i]signal()
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Variablessemaphore mutex (initially = 1)semaphore next (initially = 0)int next-count = 0 Cada procedimiento externo F seraacute
reemplazado porwait(mutex)hellipbody of Fhellipif (next-count gt 0)signal(next)elsesignal(mutex) La exclusioacuten mutua dentro de un monitor estaacute
asegurada
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Por cada variable de condicioacuten x tenemos
semaphore x-sem (initially = 0)
int x-count = 01048708 La operacioacuten xwait
puede ser implementada como
x-count++if (next-count gt 0)signal(next)elsesignal(mutex)wait(x-sem)x-count--
La operacioacuten xsignal puede ser implementada como
if (x-count gt 0) next-count++signal(x-sem)wait(next)next-count--
2 PROBLEMAS CLAacuteSICOS DE SINCRONIZACIOacuteN
23 Problema de los Filoacutesofos Comensales
Filoacutesofo i
do wait(chopstick[i])wait(chopstick[(i+1) 5])hellipcomerhellipsignal(chopstick[i])
signal(chopstick[(i+1) 5])hellippensarhellip while (1)
3 MONITORES
31 Utilizacioacuten 32 Solucioacuten al problema de la
cena de los filoacutesofos usando monitores
33 Implementacioacuten de un monitor usando semaacuteforos
34 Reanudacioacuten de procesos dentro de un monitor
3MONITORES
Son una herramienta de sincronizacion mas estructurada que un semaacuteforo encapsula variables compartidas en conjunto con los procedimientos para accesar esas variables
Son tipo de dato abstracto por lo tanto los procesos llaman a los procedimientos del monitor en cualquier momento pero no pueden accesar directamente a las variables encapsuladas
3 MONITORES
Permiten a un proceso esperar dentro del monitor una variable de condicioacuten debe de ser declarada como condition x y
La variable de condicioacuten puede solo ser usada con las operaciones wait y signal
La operacioacutenxwait()significa que al proceso
que invoca esta operacioacuten
es suspendido hasta que algun otro proceso invoque
xsignal() La operacioacuten xsignal
reanuda exactamente un proceso
suspendido If no hay proceso suspendido then la
operacioacuten signal no tiene efecto
3MONITORES31 Utilizacioacuten
Construccioacuten de sincronizacioacuten de alto-nivel que permite compartir con
seguridad un tipo de datos abstracto entre procesos concurrentes
monitor nombre-monitor
declaracioacuten de variables compartidas
procedure body P1 (hellip) procedure body P2 (hellip) procedure body Pn (hellip) coacutedigo de inicializacioacuten
3MONITORES31 Utilizacioacuten
Visioacuten Esquemaacutetica de un MonitorMonitor con Variables de Condicioacuten
3MONITORES32 Solucioacuten al problema de la cena de
los filoacutesofos usando monitores
monitor dp
enum thinking hungry eating state[5]
condition self[5]
void pickup(int i) siguiente movimiento
void putdown(int i) siguiente movimiento
void test(int i) siguiente movimiento
void init()
for (int i = 0 i lt 5 i++)
state[i] = thinking
void pickup(int i)
state[i] = hungry
test[i]
if (state[i] = eating)
self[i]wait()
void putdown(int i)
state[i] = thinking
probar vecinos izquierdo y derecho
test((i+4) 5)
test((i+1) 5)
void test(int i)
if ( (state[(I + 4) 5] = eating) ampamp
(state[i] == hungry) ampamp
(state[(i + 1) 5] = eating))
state[i] = eating
self[i]signal()
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Variablessemaphore mutex (initially = 1)semaphore next (initially = 0)int next-count = 0 Cada procedimiento externo F seraacute
reemplazado porwait(mutex)hellipbody of Fhellipif (next-count gt 0)signal(next)elsesignal(mutex) La exclusioacuten mutua dentro de un monitor estaacute
asegurada
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Por cada variable de condicioacuten x tenemos
semaphore x-sem (initially = 0)
int x-count = 01048708 La operacioacuten xwait
puede ser implementada como
x-count++if (next-count gt 0)signal(next)elsesignal(mutex)wait(x-sem)x-count--
La operacioacuten xsignal puede ser implementada como
if (x-count gt 0) next-count++signal(x-sem)wait(next)next-count--
3 MONITORES
31 Utilizacioacuten 32 Solucioacuten al problema de la
cena de los filoacutesofos usando monitores
33 Implementacioacuten de un monitor usando semaacuteforos
34 Reanudacioacuten de procesos dentro de un monitor
3MONITORES
Son una herramienta de sincronizacion mas estructurada que un semaacuteforo encapsula variables compartidas en conjunto con los procedimientos para accesar esas variables
Son tipo de dato abstracto por lo tanto los procesos llaman a los procedimientos del monitor en cualquier momento pero no pueden accesar directamente a las variables encapsuladas
3 MONITORES
Permiten a un proceso esperar dentro del monitor una variable de condicioacuten debe de ser declarada como condition x y
La variable de condicioacuten puede solo ser usada con las operaciones wait y signal
La operacioacutenxwait()significa que al proceso
que invoca esta operacioacuten
es suspendido hasta que algun otro proceso invoque
xsignal() La operacioacuten xsignal
reanuda exactamente un proceso
suspendido If no hay proceso suspendido then la
operacioacuten signal no tiene efecto
3MONITORES31 Utilizacioacuten
Construccioacuten de sincronizacioacuten de alto-nivel que permite compartir con
seguridad un tipo de datos abstracto entre procesos concurrentes
monitor nombre-monitor
declaracioacuten de variables compartidas
procedure body P1 (hellip) procedure body P2 (hellip) procedure body Pn (hellip) coacutedigo de inicializacioacuten
3MONITORES31 Utilizacioacuten
Visioacuten Esquemaacutetica de un MonitorMonitor con Variables de Condicioacuten
3MONITORES32 Solucioacuten al problema de la cena de
los filoacutesofos usando monitores
monitor dp
enum thinking hungry eating state[5]
condition self[5]
void pickup(int i) siguiente movimiento
void putdown(int i) siguiente movimiento
void test(int i) siguiente movimiento
void init()
for (int i = 0 i lt 5 i++)
state[i] = thinking
void pickup(int i)
state[i] = hungry
test[i]
if (state[i] = eating)
self[i]wait()
void putdown(int i)
state[i] = thinking
probar vecinos izquierdo y derecho
test((i+4) 5)
test((i+1) 5)
void test(int i)
if ( (state[(I + 4) 5] = eating) ampamp
(state[i] == hungry) ampamp
(state[(i + 1) 5] = eating))
state[i] = eating
self[i]signal()
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Variablessemaphore mutex (initially = 1)semaphore next (initially = 0)int next-count = 0 Cada procedimiento externo F seraacute
reemplazado porwait(mutex)hellipbody of Fhellipif (next-count gt 0)signal(next)elsesignal(mutex) La exclusioacuten mutua dentro de un monitor estaacute
asegurada
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Por cada variable de condicioacuten x tenemos
semaphore x-sem (initially = 0)
int x-count = 01048708 La operacioacuten xwait
puede ser implementada como
x-count++if (next-count gt 0)signal(next)elsesignal(mutex)wait(x-sem)x-count--
La operacioacuten xsignal puede ser implementada como
if (x-count gt 0) next-count++signal(x-sem)wait(next)next-count--
3MONITORES
Son una herramienta de sincronizacion mas estructurada que un semaacuteforo encapsula variables compartidas en conjunto con los procedimientos para accesar esas variables
Son tipo de dato abstracto por lo tanto los procesos llaman a los procedimientos del monitor en cualquier momento pero no pueden accesar directamente a las variables encapsuladas
3 MONITORES
Permiten a un proceso esperar dentro del monitor una variable de condicioacuten debe de ser declarada como condition x y
La variable de condicioacuten puede solo ser usada con las operaciones wait y signal
La operacioacutenxwait()significa que al proceso
que invoca esta operacioacuten
es suspendido hasta que algun otro proceso invoque
xsignal() La operacioacuten xsignal
reanuda exactamente un proceso
suspendido If no hay proceso suspendido then la
operacioacuten signal no tiene efecto
3MONITORES31 Utilizacioacuten
Construccioacuten de sincronizacioacuten de alto-nivel que permite compartir con
seguridad un tipo de datos abstracto entre procesos concurrentes
monitor nombre-monitor
declaracioacuten de variables compartidas
procedure body P1 (hellip) procedure body P2 (hellip) procedure body Pn (hellip) coacutedigo de inicializacioacuten
3MONITORES31 Utilizacioacuten
Visioacuten Esquemaacutetica de un MonitorMonitor con Variables de Condicioacuten
3MONITORES32 Solucioacuten al problema de la cena de
los filoacutesofos usando monitores
monitor dp
enum thinking hungry eating state[5]
condition self[5]
void pickup(int i) siguiente movimiento
void putdown(int i) siguiente movimiento
void test(int i) siguiente movimiento
void init()
for (int i = 0 i lt 5 i++)
state[i] = thinking
void pickup(int i)
state[i] = hungry
test[i]
if (state[i] = eating)
self[i]wait()
void putdown(int i)
state[i] = thinking
probar vecinos izquierdo y derecho
test((i+4) 5)
test((i+1) 5)
void test(int i)
if ( (state[(I + 4) 5] = eating) ampamp
(state[i] == hungry) ampamp
(state[(i + 1) 5] = eating))
state[i] = eating
self[i]signal()
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Variablessemaphore mutex (initially = 1)semaphore next (initially = 0)int next-count = 0 Cada procedimiento externo F seraacute
reemplazado porwait(mutex)hellipbody of Fhellipif (next-count gt 0)signal(next)elsesignal(mutex) La exclusioacuten mutua dentro de un monitor estaacute
asegurada
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Por cada variable de condicioacuten x tenemos
semaphore x-sem (initially = 0)
int x-count = 01048708 La operacioacuten xwait
puede ser implementada como
x-count++if (next-count gt 0)signal(next)elsesignal(mutex)wait(x-sem)x-count--
La operacioacuten xsignal puede ser implementada como
if (x-count gt 0) next-count++signal(x-sem)wait(next)next-count--
3 MONITORES
Permiten a un proceso esperar dentro del monitor una variable de condicioacuten debe de ser declarada como condition x y
La variable de condicioacuten puede solo ser usada con las operaciones wait y signal
La operacioacutenxwait()significa que al proceso
que invoca esta operacioacuten
es suspendido hasta que algun otro proceso invoque
xsignal() La operacioacuten xsignal
reanuda exactamente un proceso
suspendido If no hay proceso suspendido then la
operacioacuten signal no tiene efecto
3MONITORES31 Utilizacioacuten
Construccioacuten de sincronizacioacuten de alto-nivel que permite compartir con
seguridad un tipo de datos abstracto entre procesos concurrentes
monitor nombre-monitor
declaracioacuten de variables compartidas
procedure body P1 (hellip) procedure body P2 (hellip) procedure body Pn (hellip) coacutedigo de inicializacioacuten
3MONITORES31 Utilizacioacuten
Visioacuten Esquemaacutetica de un MonitorMonitor con Variables de Condicioacuten
3MONITORES32 Solucioacuten al problema de la cena de
los filoacutesofos usando monitores
monitor dp
enum thinking hungry eating state[5]
condition self[5]
void pickup(int i) siguiente movimiento
void putdown(int i) siguiente movimiento
void test(int i) siguiente movimiento
void init()
for (int i = 0 i lt 5 i++)
state[i] = thinking
void pickup(int i)
state[i] = hungry
test[i]
if (state[i] = eating)
self[i]wait()
void putdown(int i)
state[i] = thinking
probar vecinos izquierdo y derecho
test((i+4) 5)
test((i+1) 5)
void test(int i)
if ( (state[(I + 4) 5] = eating) ampamp
(state[i] == hungry) ampamp
(state[(i + 1) 5] = eating))
state[i] = eating
self[i]signal()
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Variablessemaphore mutex (initially = 1)semaphore next (initially = 0)int next-count = 0 Cada procedimiento externo F seraacute
reemplazado porwait(mutex)hellipbody of Fhellipif (next-count gt 0)signal(next)elsesignal(mutex) La exclusioacuten mutua dentro de un monitor estaacute
asegurada
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Por cada variable de condicioacuten x tenemos
semaphore x-sem (initially = 0)
int x-count = 01048708 La operacioacuten xwait
puede ser implementada como
x-count++if (next-count gt 0)signal(next)elsesignal(mutex)wait(x-sem)x-count--
La operacioacuten xsignal puede ser implementada como
if (x-count gt 0) next-count++signal(x-sem)wait(next)next-count--
3MONITORES31 Utilizacioacuten
Construccioacuten de sincronizacioacuten de alto-nivel que permite compartir con
seguridad un tipo de datos abstracto entre procesos concurrentes
monitor nombre-monitor
declaracioacuten de variables compartidas
procedure body P1 (hellip) procedure body P2 (hellip) procedure body Pn (hellip) coacutedigo de inicializacioacuten
3MONITORES31 Utilizacioacuten
Visioacuten Esquemaacutetica de un MonitorMonitor con Variables de Condicioacuten
3MONITORES32 Solucioacuten al problema de la cena de
los filoacutesofos usando monitores
monitor dp
enum thinking hungry eating state[5]
condition self[5]
void pickup(int i) siguiente movimiento
void putdown(int i) siguiente movimiento
void test(int i) siguiente movimiento
void init()
for (int i = 0 i lt 5 i++)
state[i] = thinking
void pickup(int i)
state[i] = hungry
test[i]
if (state[i] = eating)
self[i]wait()
void putdown(int i)
state[i] = thinking
probar vecinos izquierdo y derecho
test((i+4) 5)
test((i+1) 5)
void test(int i)
if ( (state[(I + 4) 5] = eating) ampamp
(state[i] == hungry) ampamp
(state[(i + 1) 5] = eating))
state[i] = eating
self[i]signal()
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Variablessemaphore mutex (initially = 1)semaphore next (initially = 0)int next-count = 0 Cada procedimiento externo F seraacute
reemplazado porwait(mutex)hellipbody of Fhellipif (next-count gt 0)signal(next)elsesignal(mutex) La exclusioacuten mutua dentro de un monitor estaacute
asegurada
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Por cada variable de condicioacuten x tenemos
semaphore x-sem (initially = 0)
int x-count = 01048708 La operacioacuten xwait
puede ser implementada como
x-count++if (next-count gt 0)signal(next)elsesignal(mutex)wait(x-sem)x-count--
La operacioacuten xsignal puede ser implementada como
if (x-count gt 0) next-count++signal(x-sem)wait(next)next-count--
3MONITORES31 Utilizacioacuten
Visioacuten Esquemaacutetica de un MonitorMonitor con Variables de Condicioacuten
3MONITORES32 Solucioacuten al problema de la cena de
los filoacutesofos usando monitores
monitor dp
enum thinking hungry eating state[5]
condition self[5]
void pickup(int i) siguiente movimiento
void putdown(int i) siguiente movimiento
void test(int i) siguiente movimiento
void init()
for (int i = 0 i lt 5 i++)
state[i] = thinking
void pickup(int i)
state[i] = hungry
test[i]
if (state[i] = eating)
self[i]wait()
void putdown(int i)
state[i] = thinking
probar vecinos izquierdo y derecho
test((i+4) 5)
test((i+1) 5)
void test(int i)
if ( (state[(I + 4) 5] = eating) ampamp
(state[i] == hungry) ampamp
(state[(i + 1) 5] = eating))
state[i] = eating
self[i]signal()
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Variablessemaphore mutex (initially = 1)semaphore next (initially = 0)int next-count = 0 Cada procedimiento externo F seraacute
reemplazado porwait(mutex)hellipbody of Fhellipif (next-count gt 0)signal(next)elsesignal(mutex) La exclusioacuten mutua dentro de un monitor estaacute
asegurada
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Por cada variable de condicioacuten x tenemos
semaphore x-sem (initially = 0)
int x-count = 01048708 La operacioacuten xwait
puede ser implementada como
x-count++if (next-count gt 0)signal(next)elsesignal(mutex)wait(x-sem)x-count--
La operacioacuten xsignal puede ser implementada como
if (x-count gt 0) next-count++signal(x-sem)wait(next)next-count--
3MONITORES32 Solucioacuten al problema de la cena de
los filoacutesofos usando monitores
monitor dp
enum thinking hungry eating state[5]
condition self[5]
void pickup(int i) siguiente movimiento
void putdown(int i) siguiente movimiento
void test(int i) siguiente movimiento
void init()
for (int i = 0 i lt 5 i++)
state[i] = thinking
void pickup(int i)
state[i] = hungry
test[i]
if (state[i] = eating)
self[i]wait()
void putdown(int i)
state[i] = thinking
probar vecinos izquierdo y derecho
test((i+4) 5)
test((i+1) 5)
void test(int i)
if ( (state[(I + 4) 5] = eating) ampamp
(state[i] == hungry) ampamp
(state[(i + 1) 5] = eating))
state[i] = eating
self[i]signal()
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Variablessemaphore mutex (initially = 1)semaphore next (initially = 0)int next-count = 0 Cada procedimiento externo F seraacute
reemplazado porwait(mutex)hellipbody of Fhellipif (next-count gt 0)signal(next)elsesignal(mutex) La exclusioacuten mutua dentro de un monitor estaacute
asegurada
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Por cada variable de condicioacuten x tenemos
semaphore x-sem (initially = 0)
int x-count = 01048708 La operacioacuten xwait
puede ser implementada como
x-count++if (next-count gt 0)signal(next)elsesignal(mutex)wait(x-sem)x-count--
La operacioacuten xsignal puede ser implementada como
if (x-count gt 0) next-count++signal(x-sem)wait(next)next-count--
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Variablessemaphore mutex (initially = 1)semaphore next (initially = 0)int next-count = 0 Cada procedimiento externo F seraacute
reemplazado porwait(mutex)hellipbody of Fhellipif (next-count gt 0)signal(next)elsesignal(mutex) La exclusioacuten mutua dentro de un monitor estaacute
asegurada
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Por cada variable de condicioacuten x tenemos
semaphore x-sem (initially = 0)
int x-count = 01048708 La operacioacuten xwait
puede ser implementada como
x-count++if (next-count gt 0)signal(next)elsesignal(mutex)wait(x-sem)x-count--
La operacioacuten xsignal puede ser implementada como
if (x-count gt 0) next-count++signal(x-sem)wait(next)next-count--
3MONITORES33 Implementacioacuten de un monitor
usando semaacuteforos
Por cada variable de condicioacuten x tenemos
semaphore x-sem (initially = 0)
int x-count = 01048708 La operacioacuten xwait
puede ser implementada como
x-count++if (next-count gt 0)signal(next)elsesignal(mutex)wait(x-sem)x-count--
La operacioacuten xsignal puede ser implementada como
if (x-count gt 0) next-count++signal(x-sem)wait(next)next-count--