20
1.SEMÁFOROS 2.PROBLEMAS CLÁSICOS DE SINCRONIZACIÓN 3. MONITORES GRUPO VI INTEGRANTES: Kruskaya Salazar Yadira Torres Santiago Plascencia SINCRONIZACIÓN DE PROCESOS

Sincronizacion de procesos

Embed Size (px)

Citation preview

Page 1: Sincronizacion de procesos

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--

Page 2: Sincronizacion 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--

Page 3: Sincronizacion de procesos

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--

Page 4: Sincronizacion de procesos

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--

Page 5: Sincronizacion de procesos

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--

Page 6: Sincronizacion de procesos

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--

Page 7: Sincronizacion de procesos

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--

Page 8: Sincronizacion de procesos

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--

Page 9: Sincronizacion de procesos

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--

Page 10: Sincronizacion de procesos

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--

Page 11: Sincronizacion de procesos

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--

Page 12: Sincronizacion de procesos

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--

Page 13: Sincronizacion de procesos

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--

Page 14: Sincronizacion de procesos

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--

Page 15: Sincronizacion de procesos

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--

Page 16: Sincronizacion de procesos

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--

Page 17: Sincronizacion de procesos

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--

Page 18: Sincronizacion de procesos

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--

Page 19: Sincronizacion de procesos

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--

Page 20: Sincronizacion de procesos

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--