Está en la página 1de 34

Tema 9.

6: Sincronizacin de Procesos

Antecedentes
El acceso concurrente a datos compartidos puede dar pie

a inconsistencia de datos
Mantener la consistencia de los datos requiere

mecanismos para asegurar el orden de ejecucin de los procesos que los comparten
Tratemos de dar una solucin al problema del productor-

consumidor. Usamos una variable entera llamada count que guarda el nmero de elementos en el buffer

Inicialmente, count vale 0 Es incrementado por el productor cuando produce un nuevo valor y lo almacena en el buffer Es decrementado por el consumidor cuando extrae un elemento del buffer

Fundamentos de los Computadores (ITT, Sist. Electr.), 2005-2006

Tema 9.6: 2

Silberschatz, Galvin and Gagne 2005

Productor
while (true) { /* produce un elemento y lo pone en nextProduced */ while (count == BUFFER_SIZE) { // nada } buffer [in] = nextProduced; in = (in + 1) % BUFFER_SIZE; count++; }

Fundamentos de los Computadores (ITT, Sist. Electr.), 2005-2006

Tema 9.6: 3

Silberschatz, Galvin and Gagne 2005

Consumidor
while (true)

{
while (count == 0) { // nada

}
nextConsumed = buffer[out]; out = (out + 1) % BUFFER_SIZE; count--; /* consume el elemento en nextConsumed */ }

Fundamentos de los Computadores (ITT, Sist. Electr.), 2005-2006

Tema 9.6: 4

Silberschatz, Galvin and Gagne 2005

Condicin de Carrera (Race Condition)

count++ podra ser implementado en lenguaje mquina as register1 = count register1 = register1 + 1 count = register1

count-- podra ser implementado as register2 = count register2 = register2 - 1 count = register2

Consideremos la siguiente ejecucin intercalada con count = 5 al principio:

S0: productor register1 = count {register1 = 5} S1: productor register1 = register1 + 1 {register1 = 6} S2: consumidor register2 = count {register2 = 5} S3: consumidor register2 = register2 - 1 {register2 = 4} S4: productor count = register1 {count = 6 } S5: consumidor count = register2 {count = 4}

Fundamentos de los Computadores (ITT, Sist. Electr.), 2005-2006

Tema 9.6: 5

Silberschatz, Galvin and Gagne 2005

El Problema de la Seccin Crtica


Cada proceso posee un fragmento de cdigo, denominado

seccin crtica, que no debe intercalarse con las secciones crticas de los dems procesos
En las secciones crticas de los procesos se encuentra el cdigo

que accede y/o modifica los datos compartidos


La ejecucin de las secciones crticas debe ser mutuamente

exclusiva para evitar inconsistencia de datos


El problema de la seccin crtica consiste en disear un protocolo

que los procesos pueden usar para conseguir la exclusin mutua de las secciones crticas.
El protocolo consta de:

Seccin de ingreso: solicita permiso para ingresar en la SC

Seccin de egreso: anuncia la salida de la SC

Fundamentos de los Computadores (ITT, Sist. Electr.), 2005-2006

Tema 9.6: 6

Silberschatz, Galvin and Gagne 2005

Solucin al Problema de la Seccin Crtica


1. Exclusin Mutua Si el proceso Pi est ejecutando su seccin crtica, ningn otro proceso puede estar ejecutando su seccin crtica 2. Progreso Si ningn proceso est ejecutando su seccin crtica y existen algunos que quieren entrar en su seccin crtica, slo los procesos que no estn ejecutando su seccin restante pueden participar en la decisin de qu proceso puede ingresar en su seccin crtica, y esta seleccin no puede posponerse indefinidamente

3. Espera limitada - Hay un lmite para el nmero de veces que otros procesos pueden entrar a sus secciones crticas despus de que un proceso ha solicitado entrar en su seccin crtica y antes de que se le otorgue la autorizacin para hacerlo Asumimos que cada proceso se ejecuta con velocidad 0 No hacemos supuestos acerca de las velocidades relativas de los N procesos

Fundamentos de los Computadores (ITT, Sist. Electr.), 2005-2006

Tema 9.6: 7

Silberschatz, Galvin and Gagne 2005

Primer intento
while (true)

{
while (turno 0); SECCIN CRTICA turno = 1; SECCIN RESTANTE }
Satisface la exclusin mutua No cumple la condicin de progreso Requiere una alternancia estricta de

los procesos en la ejecucin de la seccin crtica

Fundamentos de los Computadores (ITT, Sist. Electr.), 2005-2006

Tema 9.6: 8

Silberschatz, Galvin and Gagne 2005

Segundo intento
while (true)

{
indicador[0] = TRUE; while (indicador[1]);

Satisface la exclusin mutua No cumple la condicin de progreso

SECCIN CRTICA indicador[0] = FALSE; SECCIN RESTANTE }

Los dos procesos pueden quedarse

bloqueados en ciclos infinitos

Fundamentos de los Computadores (ITT, Sist. Electr.), 2005-2006

Tema 9.6: 9

Silberschatz, Galvin and Gagne 2005

Solucin de Peterson (1981)


Asume que las instrucciones de carga y almacenamiento

(LOAD y STORE) son atmicas; no pueden ser interrumpidas Los dos procesos comparten dos variables: int turno Boolean indicador[2] La variable turno indica a quin le toca entrar en la seccin crtica Los indicadores se usan para indicar si un proceso est listo para entrar en la seccin crtica. indicador[i] = TRUE implica que el proceso Pi est listo

Fundamentos de los Computadores (ITT, Sist. Electr.), 2005-2006 Tema 9.6: 10

Silberschatz, Galvin and Gagne 2005

Algoritmo para el Proceso P0


while (true) { indicador[0] = TRUE; turno = 1; while (indicador[1] && turno == 1);

Satisface la exclusin mutua Cumple la condicin de progreso Cumple el requisito de espera

SECCIN CRTICA
indicador[0] = FALSE; SECCIN RESTANTE }

limitada

Fundamentos de los Computadores (ITT, Sist. Electr.), 2005-2006 Tema 9.6: 11

Silberschatz, Galvin and Gagne 2005

Solucin de Dekker (1965)


while (true) { indicador[0] = TRUE; while (indicador[1]) { if (turno 0) { indicador[0] = FALSE; while (turno 0); indicador[0] = TRUE; } } SECCIN CRTICA

Satisface la exclusin mutua Cumple la condicin de progreso Cumple el requisito de espera

limitada

turno = 1; indicador[0] = FALSE;


SECCIN RESTANTE }

Fundamentos de los Computadores (ITT, Sist. Electr.), 2005-2006 Tema 9.6: 12

Silberschatz, Galvin and Gagne 2005

Hardware de Sincronizacin
Muchos sistemas proveen soporte hardware para resolver

el problema de la exclusin mutua Una solucin en mquinas con un solo procesador es deshabilitar las interrupciones El cdigo que se est ejecutando no puede ser retirado de la CPU No es buena solucin porque el SO pierde el control temporalmente En sistemas multiprocesadores no es eficiente Las mquinas actuales proveen instrucciones atmicas especiales Atmica = no interrumpible Chequeo y asignacin simultnea Intercambio de dos palabras de memoria

Fundamentos de los Computadores (ITT, Sist. Electr.), 2005-2006 Tema 9.6: 13

Silberschatz, Galvin and Gagne 2005

Instruccin Test & Set


Definicin:

boolean TestAndSet (boolean *target) {

boolean rv = *target; *target = TRUE; return rv:


}

Fundamentos de los Computadores (ITT, Sist. Electr.), 2005-2006 Tema 9.6: 14

Silberschatz, Galvin and Gagne 2005

Solucin usando Test & Set


Se comparte una variable booleana lock, inicializada a false. Solucin:

while (true) { while ( TestAndSet (&lock )); // nada // seccin crtica

lock = FALSE; // }
Silberschatz, Galvin and Gagne 2005

seccin restante

Fundamentos de los Computadores (ITT, Sist. Electr.), 2005-2006 Tema 9.6: 15

Instruccin Swap
Definicin:

void Swap (boolean *a, boolean *b) {

boolean temp = *a; *a = *b; *b = temp:


}

Fundamentos de los Computadores (ITT, Sist. Electr.), 2005-2006 Tema 9.6: 16

Silberschatz, Galvin and Gagne 2005

Solucin usando Swap


Se comparte una variable booleana lock inicializada a FALSE;

Cada proceso tiene una variable local booleana key Solucin:

while (true) { key = TRUE; while ( key == TRUE) Swap (&lock, &key );
// seccin crtica

lock = FALSE; // seccin restante }

Fundamentos de los Computadores (ITT, Sist. Electr.), 2005-2006 Tema 9.6: 17

Silberschatz, Galvin and Gagne 2005

Semforos
Herramienta de sincronizacin que no requiere espera activa Semforo S variable entera Dos operaciones estndar modifican S: wait() y signal()

Llamadas originalmente por Dijkstra P() y V() Slo puede accederse al semforo a travs de las dos operaciones atmicas wait (S) {

while S <= 0 ; // no-op S--;


}

signal (S) { S++; }

Fundamentos de los Computadores (ITT, Sist. Electr.), 2005-2006 Tema 9.6: 18

Silberschatz, Galvin and Gagne 2005

Semforo como Herramienta de Sincronizacin


Semforo de conteo el valor entero puede variar en un dominio

no acotado
Semforo binario el valor entero puede variar slo entre 0 y 1

Tambin se conoce como mutex locks

Se puede implementar un semforo de conteo usando un

semforo binario
Uso de semforo para exclusin mutua

Semaphore S; wait (S);

// inicializado a 1

Seccin Crtica signal (S);

Fundamentos de los Computadores (ITT, Sist. Electr.), 2005-2006 Tema 9.6: 19

Silberschatz, Galvin and Gagne 2005

Implementacin de Semforos
Se debe garantizar que dos procesos no ejecuten wait () y

signal () sobre el mismo semforo al mismo tiempo


La operacin wait puede implementarse con espera activa

Si la seccin crtica es corta la espera activa tambin lo ser

Las aplicaciones pueden pasar mucho tiempo en secciones

crticas y por tanto, no es una buena solucin

Se desaprovecha la CPU

Fundamentos de los Computadores (ITT, Sist. Electr.), 2005-2006 Tema 9.6: 20

Silberschatz, Galvin and Gagne 2005

Implementacin de Semforos sin Espera Activa

Con cada semforo hay una cola de espera asociada. Con

cada semforo hay asociados dos elementos:


un valor (de tipo entero) un puntero al primer proceso de la cola de espera

Dos operaciones:

block coloca el proceso llamante en la cola de espera apropiada wakeup saca un proceso de la cola de espera y lo coloca en la cola de listos

Fundamentos de los Computadores (ITT, Sist. Electr.), 2005-2006 Tema 9.6: 21

Silberschatz, Galvin and Gagne 2005

Implementacin de Semforos sin Espera Activa

Implementacin de wait: wait (S){ valor--; if (valor < 0) { aade este proceso a la cola de espera block(); } }

Implementacin de signal: signal (S){ valor++; if (valor <= 0) { saca un proceso P de la cola de espera wakeup(P); } }

Fundamentos de los Computadores (ITT, Sist. Electr.), 2005-2006 Tema 9.6: 22

Silberschatz, Galvin and Gagne 2005

Bloqueos mutuos e Inanicin


Bloqueos mutuos (deadlock) dos o ms procesos esperan

indefinidamente un evento que slo puede ser causado por uno de los procesos que esperan Sean S y Q dos semforos inicializados a 1 P0 P1
wait (S); wait (Q);

wait (Q);
. . . signal (S); signal (Q);

wait (S);
. . . signal (Q); signal (S);

Inanicin bloqueo indefinido. Un proceso puede no ser nunca

sacado de la cola de espera de un semforo

Fundamentos de los Computadores (ITT, Sist. Electr.), 2005-2006 Tema 9.6: 23

Silberschatz, Galvin and Gagne 2005

Problemas Clsicos de Sincronizacin


Problema de los productores y consumidores (buffer limitado)

Problema de los lectores y escritores


Problema de los filsofos

Fundamentos de los Computadores (ITT, Sist. Electr.), 2005-2006 Tema 9.6: 24

Silberschatz, Galvin and Gagne 2005

Problema de los Productores y Consumidores


Tenemos un buffer con capacidad para N elementos

Semforo mutex inicializado a 1


Semforo full inicializado a 0 Semforo empty inicializado a N

Fundamentos de los Computadores (ITT, Sist. Electr.), 2005-2006 Tema 9.6: 25

Silberschatz, Galvin and Gagne 2005

Problema de los Productores y Consumidores

Estructura del proceso productor while (true) { // produce un elemento wait (empty); wait (mutex); // aade el elemento al buffer signal (mutex);

signal (full);
}

Fundamentos de los Computadores (ITT, Sist. Electr.), 2005-2006 Tema 9.6: 26

Silberschatz, Galvin and Gagne 2005

Problema de los Productores y Consumidores

Estructura del proceso consumidor while (true) {

wait (full);
wait (mutex); // saca un elemento del buffer signal (mutex); signal (empty); // consume el elemento sacado }

Fundamentos de los Computadores (ITT, Sist. Electr.), 2005-2006 Tema 9.6: 27

Silberschatz, Galvin and Gagne 2005

Problema de los Lectores y Escritores


Un conjunto de datos se comparte entre varios procesos

concurrentes Lectores slo leen el conjunto de datos; no realizan ninguna modificacin Escritores pueden leer y escribir
Problema permitir a muchos lectores leer al mismo tiempo.

Slo un escritor puede acceder a los datos compartidos en un instante dado


Datos compartidos por los procesos

Conjunto de datos Semforo mutex inicializado a 1

Semforo wrt inicializado a 1 Entero readcount inicializado a 0

Fundamentos de los Computadores (ITT, Sist. Electr.), 2005-2006 Tema 9.6: 28

Silberschatz, Galvin and Gagne 2005

Problema de los Lectores y Escritores


Estructura de un proceso escritor

while (true) { wait (wrt) ; // se realiza la escritura

signal (wrt) ; }

Fundamentos de los Computadores (ITT, Sist. Electr.), 2005-2006 Tema 9.6: 29

Silberschatz, Galvin and Gagne 2005

Problema de los Lectores y Escritores

Estructura de un proceso lector while (true) { wait (mutex) ; readcount ++ ; if (readcount == 1) wait (wrt) ; signal (mutex) // se realiza la lectura wait (mutex) ; readcount -- ; if (readcount == 0) signal (wrt) ; signal (mutex) ; }

Fundamentos de los Computadores (ITT, Sist. Electr.), 2005-2006 Tema 9.6: 30

Silberschatz, Galvin and Gagne 2005

Problema de los Filsofos

Datos compartidos

Tazn de arroz (conjunto de datos) Semforos chopstick [5] inicializados a 1

Fundamentos de los Computadores (ITT, Sist. Electr.), 2005-2006 Tema 9.6: 31

Silberschatz, Galvin and Gagne 2005

Problema de los Filsofos

Estructura del proceso Filsofo i: while (true) { wait ( chopstick[i] ); wait ( chopstick[ (i + 1) % 5] ); // come signal ( chopstick[i] ); signal (chopstick[ (i + 1) % 5] );

// piensa
}

Fundamentos de los Computadores (ITT, Sist. Electr.), 2005-2006 Tema 9.6: 32

Silberschatz, Galvin and Gagne 2005

Problema de los Filsofos


La solucin anterior es susceptible de sufrir interbloqueo.

Algunas soluciones son:

Permitir como mucho 4 filsofos en la mesa

Permitir que un filsofo tome los palillos si los dos estn disponibles
Que haya un filsofo distinto que tome el palillo izquierdo primero

Fundamentos de los Computadores (ITT, Sist. Electr.), 2005-2006 Tema 9.6: 33

Silberschatz, Galvin and Gagne 2005

Fin del Tema 9

También podría gustarte