Está en la página 1de 9

Sincronizacin y Comunicacin de Procesos Sincronizacin y Comunicacin de Procesos

Sincronizacin Sincronizacin

Comunicacin Comunicacin

Condiciones de Condiciones de Carrera Carrera

Memoria Memoria Compartida Compartida

Seriabilidad Seriabilidad Hardware Hardware Seccin Seccin Crtica Crtica

Paso de Paso de Mensajes Mensajes

Soluciones Soluciones

Semforos Semforos

Construcciones Construcciones Lingsticas Lingsticas

Sincronizacin y Comunicacin (I)


Sistema multiprogramado procesos concurrentes cooperantes Datos de un proceso Pi deben ser conocidos por el proceso Pj Formas de comunicacin

Mediante memoria compartida Los procesos se ejecutan en el mismo espacio de direcciones (threads) o tienen acceso a memoria comn. Se comunican mediante variables globales Mediante paso de mensajes Los procesos se pueden ejecutar en espacios de direcciones independientes Se comunican mediante mensajes La infraestructura de la comunicacin la ofrece el SO (ports, pipes, ...)
SITR: Sincronizacin de Procesos 2

Sincronizacin y Comunicacin (II)


Es necesario sincronizar el acceso a zonas de memoria compartida para mantener la integridad de los datos Un dato puede perder la integridad cuando varios procesos lo modifican concurrentemente Seriabilidad: la ejecucin paralela de un conjunto de instrucciones debe ser equivalente a la de una de las posibles alternativas secuenciales Si no se cumple la seriabilidad se dice que se ha producido una condicin de carrera

SITR: Sincronizacin de Procesos

Ejemplo: Productor - Consumidor (I)


Se plantea la necesidad de comunicar la informacin generada por un grupo de procesos (productores) a otro grupo que necesitan de ella (consumidores) En la comunicacin se utiliza una zona de memoria de tamao limitado (buffer) que almacena los datos producidos y no consumidos
Buffer

P

.....

El problema consiste en que varios procesos acceden concurrentemente a una zona de datos compartidos y se pueden dar condiciones de carrera

SITR: Sincronizacin de Procesos

// Problema productor - consumidor type item=.....; var buffer:array[0..n-1] of item entrada, salida: 0..n-1; contador: 0..n entrada=0; salida=0; contador=0; function productor; repeat ..... // produce un item en la variable nuevo ..... while contador==n do no-op buffer[entrada]=nuevo; entrada=(entrada+1)mod n; contador=contador+1; until false end productor function consumidor; repeat while contador==0 do no-op nuevo=buffer[salida]; salida=(salida+1)mod n; contador=contador-1; ..... // consume el item almacenado en nuevo ..... until false end consumidor
SITR: Sincronizacin de Procesos

Productores

Buffer

Salida

Entrada

Consumidores

Ejemplo: Productor - Consumidor (II)



Productores
Buffer

contador = contador +1
mov inc mov contador, reg1 reg1 reg1, contador

Consumidores

Salida P2 C1 Entrada

contador = contador - 1
mov dec mov contador, reg2 reg2 reg2, contador

P1

Contador = 4

SITR: Sincronizacin de Procesos

Ejemplo: Productor - Consumidor (III)


Supongamos que se da la siguiente ejecucin


Tiempo t0 t1 t2 t3 t4 t5 Proceso productor productor Operacin mov contador, reg1 inc reg1 reg1 5 6 6 6 6 6 reg2 ? ? 5 4 4 4 contador 5 5 5 5 6 4

consumidor mov contador, reg2 consumidor dec reg2 productor mov reg1, contador

consumidor mov reg2, contador

La variable contador es utilizada por el proceso consumidor antes de que el proceso productor la actualice inconsistencia (vale 4 en vez de 5) CONCLUSION: este tipo de operaciones deben ser ATMICAS
SITR: Sincronizacin de Procesos 7

El Problema de la Seccin Crtica (I)


Intenta sistematizar el estudio de la sincronizacin Sean n procesos que tienen datos compartidos. Cada proceso tiene un segmento de cdigo llamado Seccin Crtica en el cual se accede a los datos compartidos Se pretende que cuando un proceso est en su seccin crtica, ningn otro este en la suya propia
SITR: Sincronizacin de Procesos

Seccin de Entrada

SECCION CRITICA Seccin de Salida

Seccin restante

El Problema de la Seccin Crtica (II)


Para resolver el problema de la seccin crtica hay que definir el cdigo de la seccin de entrada y de la seccin de salida Una solucin al problema de la seccin crtica debe cumplir las siguientes propiedades

Exclusin mutua: si Pi ejecuta su seccin crtica, ningn otro Pj (ij) lo podr hacer en la suya Progreso: Si no hay procesos ejecutando su seccin crtica y hay varios que quieren entrar en la suya, la decisin de quien entra la deben tomar aquellos que no se encuentre en su seccin restante y en un tiempo finito Espera limitada: Un proceso no debe esperar infinitamente a ejecutar su seccin crtica

El problema de la seccin crtica se puede resolver son soluciones software o hardware


SITR: Sincronizacin de Procesos 9

El Problema de la Seccin Crtica (III)


Soluciones hardware:

Inhibicin de interrupciones La forma ms sencilla y menos eficiente de resolver el problema No se permiten interrupciones durante la ejecucin de la seccin crtica (as se evitan los cambios de contexto)
Inhibir_Interrupciones(); Seccin crtica Habilitar Interrupciones();

Slo es til cuando la seccin crtica es pequea Este mtodo de sincronizacin slo es aplicable a nivel del SO (es peligroso que los usuarios accedan al sistema de interrupciones)

SITR: Sincronizacin de Procesos

10

Semforos (I)

Las soluciones hardware anteriores no son fciles de generalizar a problemas ms complejos Semforo (S): estructura de datos formada por una variable tipo entero y una cola de procesos en espera A un semforo slo se puede acceder mediante dos operaciones P y V
typedef semaforo { int contador; cola: lista de procesos; }
13

SITR: Sincronizacin de Procesos

Semforos (II)

P(S)

V(S)

Decrementa el contador Si el resultado es negativo suspende al proceso en la cola asociada

Incrementa el contador Si el resultado es negativo o cero despierta a un proceso que se encuentra en la cola del semforo

S.contador = S.contador-1; if (contador<0) { Insertar_en_Cola(S.cola, Proceso_en_ejecucin); Suspender(Proceso_en_ejecucin); }

S.contador = S.contador+1; if (contador<=0) { Extraer_de_Cola(S.cola, Proceso); Activar(Proceso); }

SITR: Sincronizacin de Procesos

14

Semforos (III)

Si el contador es mayor o igual que cero, indica el nmero de procesos que pueden invocar la operacin P sin suspenderse Si el contador es menor o igual que cero, su valor absoluto indica el nmero de procesos suspendidos en la cola asociada al semforo P y V (suministradas por el SO) deben realizarse de forma atmica ya que su cdigo es una seccin crtica El uso de semforos no supone espera activa por lo que no exige gasto innecesario de CPU

SITR: Sincronizacin de Procesos

15

Empleo de Semforos (I)


Problema de la seccin crtica para n procesos


Se tienen n procesos que comparten datos pero slo uno de puede acceder a ellos (Exclusin Mutua, mutex) Se define el semforo
var mutex: semaforo(1) (*El valor inicial del contador es 1*)

Cada proceso Pi tiene la estructura siguiente


. . P(mutex); /*Seccin de entrada */ Seccin crtica V(mutex); /* Seccin de salida */ Seccin restante . .

SITR: Sincronizacin de Procesos

16

Empleo de Semforos (II)


Secuenciacin de dos secciones de cdigo de procesos diferentes


Se pretende ejecutar B en Pj despus de A en Pi La solucin consiste en crear un semforo S con S.contador = 0 y definir las secuencias de Pi y Pj como sigue
Pi: ..... A V(S) ..... Pj: ..... P(S) B .....

SITR: Sincronizacin de Procesos

17

Empleo de Semforos (III)


Aparicin de interbloqueos

Al utilizar semforos se pueden dar situaciones en que ningn proceso pueda acceder a su seccin crtica y todos los procesos que comparten el semforo estn suspendidos Supongamos que tenemos dos procesos P1 y P2 que comparten dos semforos S y Q
P1: ..... P(S); P(Q); ..... V(S); V(Q); ..... P2: ..... P(Q); P(S); ..... V(Q); V(S); ..... P2: P(Q) P1: P(S) P1: P(Q) (se suspende) P2: P(S) (se suspende)

SITR: Sincronizacin de Procesos

18

Empleo de Semforos (IV)


Inversin de Prioridad:

Es un tipo de interbloqueo entre procesos cuando se utiliza un planificador basado en prioridades fijas Supongamos que tenemos tres procesos P1, P2 y P3 con prioridades (3, 2 y 1) respectivamente. Los procesos P1 y P3 acceden a una seccin crtica mediante un semforo S siendo P3 un proceso largo
P2: P(Q)-> 0 P2: P(Q); P3: P1: P(Q)->-1 P3: P(S)-> 0 ..... P(S); ..... V(S); ..... P2: se activa expulsando a P3 por ser de mayor prioridad P2: V(Q); P1: P(S)(se suspende) ..... P2 a SITR: Sincronizacin de Procesos P1 queda bloqueado por pesar de tener menos prioridad
19

P1:

..... P(Q); P(S); ..... V(S); V(Q); .....

..... V(Q); .....

Construcciones Lingsticas

La utilizacin incorrecta de los semforos pueden provocar errores de sincronizacin Para evitar estos errores se han diseado construcciones lingsticas de alto nivel que simplifican la programacin de aplicaciones concurrentes. Construcciones tericas

Monitores: estructuras de alto nivel que facilitan la utilizacin de esquemas de sincronizacin Regiones crticas Tipos protegidos en ADA95 Objetos de sincronizacin en JAVA

Construcciones prcticas

SITR: Sincronizacin de Procesos

20