Problemas Clasicos de Comunicacion y Sincronizacion PDF

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 54

Sistemas Operativos I

Tema 4

Comunicacin y sincronizacin de procesos


Equipo de Sistemas Operativos DISCA / DSIC UPV

Comunicacin y sincronizacin de procesos


Objetivos Presentar dos alternativas bsicas para comunicacin entre procesos
Memoria comn Mensajes

Analizar las condiciones de carrera y estudiar el concepto de seriabilidad. Estudiar, en el caso de memoria comn, el problema de la seccin critica. Presentar los criterios de correccin al problema de la seccin critica y sus posibles soluciones de una forma estructurada:
Soluciones hardware Semforos Realizacin de semforos mediante soluciones hardware.

Adquirir destreza en la resolucin de problemas de sincronizacin a travs de problemas clsicos (productores y consumidores, lectores y escritores, cinco filsofos, etc.)
Sistemas Operativos I (00-01) Comunicacin y sincronizacin de Procesos 2

Comunicacin y sincronizacin de procesos


Contenido 1.- Introduccin 2.- Comunicacin por memoria comn 3.- El problema de la seccin crtica 4.- Soluciones hardware 5.- Semforos 6.- Problemas clsicos de programacin concurrente 7.- Construcciones lingsticas 8.- Sincronizacin en POSIX 9.- Comunicacin por mensajes Bibliografia A. Silberschatz, J. Peterson , P. Galvin. Sistemas Operativos. Conceptos Fundamentales. 5 ed. Captulo 6. A. Tanenbaum. Modern Operating Systems. Captulos 2,11 y 12

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

Comunicacin y sincronizacin de procesos


Contenido 1.- Introduccin 2.- Comunicacin por memoria comn 3.- El problema de la seccin crtica 4.- Soluciones hardware 5.- Semforos 6.- Problemas clsicos de programacin concurrente 7.- Construcciones lingsticas 8.- Sincronizacin en POSIX 9.- Comunicacin por mensajes

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

1.Introduccin
Existe la necesidad de comunicacin entre procesos. Los procesos requieren con frecuencia comunicacin entre ellos (ejemplo: tubos). La comunicacin entre procesos puede seguir dos esquemas bsicos: Comunicacin por memoria comn Comunicacin por mensajes

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

1.Introduccin
Comunicacin por memoria comn La comunicacin por memoria comn se puede dar en los siguientes casos:
Espacio de direcciones nico: es el caso de los hilos de ejecucin El s.o. crea una zona de memoria accesible a un grupo de procesos

P1

Hilo 1

Hilo 2

Problema de la seccin crtica: en un sistema con procesos concurrentes que se comunican compartiendo datos comunes es necesario sincronizar el acceso (lectura, escritura) a los datos compartidos para asegurar la consistencia de los mismos.

Datos compartidos

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

1.Introduccin
Comunicacin por mensajes La comunicacin por mensajes se da normalmente en el siguiente caso:
Espacio de direcciones independentes

Sincronizacin en la comunicacin por mensajes: Cuando dos procesos se comunican va mensajes se necesitan mecanismos para que el proceso receptor espere (se suspenda hasta) a que el proceso emisor enve el mensaje y ste est disponible. No aparece el problema de la seccin crtica.

P1
mensaje

P2

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

Comunicacin y sincronizacin de procesos


Contenido 1.- Introduccin 2.- Comunicacin por memoria comn 3.- El problema de la seccin crtica 4.- Soluciones hardware 5.- Semforos 6.- Problemas clsicos de programacin concurrente 7.- Construcciones lingsticas 8.- Sincronizacin en POSIX 9.- Comunicacin por mensajes

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

2.Comunicacin por memoria comn


El problema de los productores y consumidores con buffer acotado Productor: proceso que produce elementos (a una cierta velocidad) y los deposita en un buffer. Consumidor: proceso que toma elementos del buffer y los consume (a una velocidad probablemente diferente a la del productor) Buffer: Estructura de datos que sirve para intercambiar informacin entre los procesos productores y consumidores. Acta a modo de depsito para absorber la diferencia de velocidad entre productores y consumidores

Ejemplo: buffer de impresora.

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

2.Comunicacin por memoria comn


El problema de los productores y consumidores con buffer acotado

C1 salida

C2

Consumidores

buffer

contador entrada Productores P1 P2

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

10

2.Comunicacin por memoria comn


Productores y consumidores con buffer acotado Variables Variables compartidas: compartidas: var :: array[0..n-1] var buffer buffer array[0..n-1] of of elemento; elemento; entrada:=0, ;; entrada:=0, salida:=0 salida:=0 :: 0..n-1 0..n-1 contador:= contador:= 0 0 :: 0..n; 0..n; proceso proceso productor: productor: task productor ;; task productor var item: elemento; var item: elemento; repeat repeat item item := := producir(); producir(); while while contador= contador= n n do do no-op; no-op; buffer[entrada] buffer[entrada] := := item; item; entrada entrada := := (entrada (entrada +1) +1) mod mod n; n; contador:=contador+1; contador:=contador+1; until until false false end end productor; productor;
Sistemas Operativos I (00-01)

proceso proceso consumidor: consumidor: task ;; task consumidor consumidor var item: elemento; var item: elemento; repeat repeat while while contador= contador= 0 0 do do no-op; no-op; item item := := buffer[salida] buffer[salida] salida salida := := (salida (salida +1) +1) mod mod n; n; contador:=contador-1; contador:=contador-1; consumir(item); consumir(item); until until false false end end consumidor; consumidor;

Comunicacin y sincronizacin de Procesos

11

2.Comunicacin por memoria comn


Condiciones de carrera Correccin en programes secuenciales: el programa cumple con sus especificaciones (responde a unos invariantes o reglas de correccin). Correccin secuencial no implica correccin concurrente: Un programa que tiene una implementacin secuencialmente correcta (correcta con un slo hilo de ejecucin) puede presentar problemas cuando se intenta introducir concurrencia en forma de hilos de ejecucin. Condicin de carrera: la ejecucin de un conjunto de operaciones concurrentes sobre una variable compartida, deja la variable en un estado inconsistente con las especificaciones de correccin. Adems, el resultado de la variable depende de la velocidad relativa en que se ejecutan las operaciones. Peligro potencial: Las condiciones de carrera pueden presentarse en algn escenario, pero no tienen por qu observarse en todas las posibles trazas de la ejecucin del programa.

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

12

2.Comunicacin por memoria comn


Ejemplo de un escenario de condicin de carrera Productor: contador:= contador+1; mov movreg1, reg1,contador; contador; inc reg1; inc reg1; mov movcontador, contador,reg1; reg1;
Inicialmente: contador =5
T 0 1 2 3 4 5 Proceso Operacin Prod. Prod. Cons. Cons. Cons. Prod mov contador, reg1 inc reg1 mov contador, reg2 dec reg2 mov reg2, contador mov reg1, contador

Consumidor: contador:= contador-1; mov movreg2, reg2,contador; contador; dec reg2; dec reg2; mov movcontador, contador,reg2; reg2;
reg1 reg2 5 6 ? ? ? 6 ? ? 5 4 4 ? contador 5 5 5 5 4 6
incorrecto

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

13

2.Comunicacin por memoria comn


Criterio de correccin en programas concurrentes El criterio de correccin/consistencia ms usual para programas concurrentes es: Seriabilidad (consistencia secuencial): El resultado de la ejecucin concurrente de un conjunto de operaciones ha de ser equivalente al resultado de ejecutar secuencialmente cada una de las operaciones, en alguno de los ordenes secuenciales posibles.

Condicin de carrera = no seriabilidad: no hay ninguna posible ejecucin secuencial de un conjunto de operaciones que de el mismo resultado que la ejecucin concurrente.

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

14

2.Comunicacin por memoria comn


Ejemplo de seriabilidad La ejecucin concurrente de op1, op2 y op3 : op1 || op2 || op3 se considera correcta si el estado final de los datos compartidos es igual al estado en que quedaran despus de alguna de las siguientes ejecuciones secuenciales: op1 ; op2 ; op3 op2 ; op1 ; op3 op3 ; op1 ; op2 o o o op1 ; op3 ; op2 o op2 ; op3 ; op1 o op3 ; op2 ; op1 .

Ejemplo numrico: sea una variable x con valor inicial 3 sobre la que se pueden realizar dos operaciones:
op1: incremento de 8 op2: multiplicacin por 5

Resultados correctos de op1 || op2 : 55 y 23


Sistemas Operativos I (00-01) Comunicacin y sincronizacin de Procesos 15

Comunicacin y sincronizacin de procesos


Contenido 1.- Introduccin 2.- Comunicacin por memoria comn 3.- El problema de la seccin crtica 4.- Soluciones hardware 5.- Semforos 6.- Problemas clsicos de programacin concurrente 7.- Construcciones lingsticas 8.- Sincronizacin en POSIX 9.- Comunicacin por mensajes

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

16

3.El problema de la seccin crtica


Concepto de seccin crtica Una seccin crtica es una zona de cdigo en la que se accede a variables compartidas por varios procesos. Problemas potenciales: puede introducir condiciones de carrera si no se adoptan las medidas adecuadas. Posible solucin: sincronizar el acceso a los datos de manera que mientras un proceso ejecuta su seccin crtica ningn otro proceso ejecuta la suya (exclusin mtua).

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

17

3. El problema de la seccin crtica


Formulacin del problema de la seccin crtica Sean n procesos compitiendo para acceder a datos compartidos Cada proceso tiene una zona de cdigo, denominada seccin crtica, en la que accede a los datos compartidos. Problema: encontrar un protocolo del tipo: protocolo protocolode deentrada entrada seccin CRTICA seccin CRTICA protocolo protocolode desalida salida seccin RESTANTE seccin RESTANTE Que satisfaga las tres condiciones siguientes :

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

18

3. El problema de la seccin crtica


Solucin al problema de la seccin crtica
Cualquier solucin al problema de la seccin crtica ha de cumplir tres requisitos:

Exclusin mtua: si un proceso est ejecutando su seccin crtica ningn otro proceso puede estar ejecutando la suya. Progreso: si ningn proceso est ejecutando su seccin crtica y hay otros que desean entrar a las suyas, entonces la decisin de qu proceso entrar a la seccin crtica se toma en un tiempo finito y slo puede ser seleccionado uno de los procesos que desean entrar. Espera limitada: Despus de que un proceso haya solicitado entrar en su seccin crtica, existe un lmite en el nmero de veces que se permite que otros procesos entren a sus secciones crticas.

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

19

3. El problema de la seccin crtica


Solucin al problema de la seccin crtica Supuestos: Los procesos se ejecutan a velocidad no nula. La correccin no ha de depender de hacer suposiciones sobre la velocidad relativa de ejecucin de los procesos.

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

20

10

3. El problema de la seccin crtica


Ejemplo: Algoritmo que soluciona el caso para dos procesos Variables compartidas: var ;; varturno turno::0..1 0..1 task Pi;
while turno <> i do no-op; seccin CRTICA turno := j; seccin RESTANTE end Pi;

task Pj;
while turno <> j do no-op; seccin CRTICA turno := i; seccin RESTANTE end Pj;

No satisface el requisito del progreso


Comunicacin y sincronizacin de Procesos 21

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de procesos


Contenido 1.- Introduccin 2.- Comunicacin por memoria comn 3.- El problema de la seccin crtica 4.- Soluciones hardware 5.- Semforos 6.- Problemas clsicos de programacin concurrente 7.- Construcciones lingsticas 8.- Sincronizacin en POSIX 9.- Comunicacin por mensajes

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

22

11

4. Soluciones hardware
Soluciones hardware al problema de la seccin crtica Las soluciones hardware son soluciones a nivel de instrucciones del lenguaje mquina: Deshabilitacin de interrupciones Instruccin test_and_set atmica (indivisible). Instruccin swap atmica.

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

23

4. Soluciones hardware
Deshabilitacin de interrupciones La deshabilitacin de interrupciones se realiza utilizando las instrucciones:
DI : Deshabilitar interrupciones EI : Habilitar interrupciones

Se consigue la exclusin mtua inhibiendo los cambios de contexto durante la seccin crtica, obligando as a que los procesos se ejecuten de manera atmica. Solucin nicamente viable al nivel del ncleo del sistema operativo: puesto que no es deseable dejar el control de las interrupciones en manos de los procesos de usuario. Las instrucciones DI y EI slo se pueden ejecutar en modo privilegiado. DI DI seccin seccinCRTICA CRTICA EI EI seccin seccinRESTANTE RESTANTE
Sistemas Operativos I (00-01) Comunicacin y sincronizacin de Procesos 24

12

4. Soluciones hardware
Operacin test and set atmica
La operacin test_and_set permite evaluar y modificar una variable atmicamente en una sola operacin de ensamblador. La especificacin funcional de esta operacin es:

function var functiontestAndSet( testAndSet( varobjetivo: objetivo:boolean): boolean):boolean; boolean; begin begin testAndSet testAndSet:= :=objetivo; objetivo; objetivo := TRUE; objetivo := TRUE; end end atmicamente!

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

25

4. Soluciones hardware
Solucin al problema de la s.c. con test_and_set Variables compartidas: var ;; varllave llave:= :=FALSE FALSE::boolean boolean task taskPi; Pi;

while whiletestAndSet(llave) testAndSet(llave)do dono-op; no-op;


Espera activa: el proceso no se suspende por esperar la entrada a la SC seccin seccinCRTICA CRTICA llave := FALSE; llave := FALSE; seccin seccinRESTANTE RESTANTE end endPi; Pi;

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

26

13

4. Soluciones hardware
Solucin a la s.c. con test and set y espera limitada La solucin anterior no satisface el requisito de la espera limitada. Variables compartidas: var [0..n-1] varesperando esperando:= :=FALSE FALSE::array array [0..n-1]of ofboolean; boolean; cerradura cerradura:= :=FALSE FALSE::boolean; boolean;

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

27

4. Soluciones hardware
Solucin a la s.c. con test and set y espera limitada task Algoritmo del proceso i: taskPi; Pi; var j: 0..n-1; var j: 0..n-1; llave: llave:boolean; boolean; ... ... esperando[i]:= esperando[i]:=TRUE; TRUE; llave llave:= :=TRUE; TRUE; while whileesperando[i] esperando[i]and andllave llavedo dollave:=testAndSet(cerradura); llave:=testAndSet(cerradura); esperando[i] esperando[i]:= :=FALSE; FALSE; seccin seccinCRTICA CRTICA j:=i+1 mod n; j:=i+1 mod n; while not while(j<>i) (j<>i)and and(( notesperando[j]) esperando[j])do doj:=j+1 j:=j+1mod modn; n; if j=i then cerradura := FALSE else esperando[j] if j=i then cerradura := FALSE else esperando[j]:= :=FALSE; FALSE; seccin seccinRESTANTE RESTANTE end endPi; Pi;

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

28

14

4. Soluciones hardware
Solucin a la s.c. con test and set y espera limitada
Proceso 0 (i=0)
esperando[i]:= TRUE; llave := TRUE; while esperando[i] and llave do llave:=testAndSet(cerradura); esperando[i] := FALSE;

cerradura

esperando

j:=i+1 mod n; while (j<>i) and (not esperando[j]) do j:=j+1 mod n; if j=i then cerradura := FALSE else esperando[j] := FALSE;

....... Proceso 4 (i=4)

F F F F F F F F

0 1 2 3 4 5 6 7 ...

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

29

4. Soluciones hardware
Solucin a la s.c. con test and set y espera limitada
Proceso 0 (i=0)
esperando[i]:= TRUE; llave := TRUE; while esperando[i] and llave do llave:=testAndSet(cerradura); esperando[i] := FALSE;

cerradura

esperando

j:=i+1 mod n; while (j<>i) and (not esperando[j]) do j:=j+1 mod n; if j=i then cerradura := FALSE else esperando[j] := FALSE;

....... Proceso 4 (i=4)

V F F F F F F F

0 1 2 3 4 5 6 7 ...

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

30

15

4. Soluciones hardware
Solucin a la s.c. con test and set y espera limitada
Proceso 0 (i=0)
esperando[i]:= TRUE; llave := TRUE; while esperando[i] and llave do llave:=testAndSet(cerradura); esperando[i] := FALSE;

cerradura

esperando

j:=i+1 mod n; while (j<>i) and (not esperando[j]) do j:=j+1 mod n; if j=i then cerradura := FALSE else esperando[j] := FALSE;

....... Proceso 4 (i=4)

V F F F F F F F

0 1 2 3 4 5 6 7 ...

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

31

4. Soluciones hardware
Solucin a la s.c. con test and set y espera limitada
Proceso 0 (i=0)
esperando[i]:= TRUE; llave := TRUE; while esperando[i] and llave do llave:=testAndSet(cerradura); esperando[i] := FALSE;

cerradura

esperando

j:=i+1 mod n; while (j<>i) and (not esperando[j]) do j:=j+1 mod n; if j=i then cerradura := FALSE else esperando[j] := FALSE;

....... Proceso 4 (i=4)

F F F F F F F F

0 1 2 3 4 5 6 7 ...

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

32

16

4. Soluciones hardware
Solucin a la s.c. con test and set y espera limitada
Proceso 0 (i=0)
esperando[i]:= TRUE; llave := TRUE; while esperando[i] and llave do llave:=testAndSet(cerradura); esperando[i] := FALSE;

cerradura

esperando

j:=i+1 mod n; while (j<>i) and (not esperando[j]) do j:=j+1 mod n; if j=i then cerradura := FALSE else esperando[j] := FALSE;

....... Proceso 4 (i=4)

F F F F V F F F

0 1 2 3 4 5 6 7 ...

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

33

4. Soluciones hardware
Solucin a la s.c. con test and set y espera limitada
Proceso 0 (i=0)
esperando[i]:= TRUE; llave := TRUE; while esperando[i] and llave do llave:=testAndSet(cerradura); esperando[i] := FALSE;

cerradura

esperando

j:=i+1 mod n; while (j<>i) and (not esperando[j]) do j:=j+1 mod n; if j=i then cerradura := FALSE else esperando[j] := FALSE;

....... Proceso 4 (i=4)

F F F F V F F F

0 1 2 3 4 5 6 7 ...

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

34

17

4. Soluciones hardware
Solucin a la s.c. con test and set y espera limitada
Proceso 0 (i=0)
esperando[i]:= TRUE; llave := TRUE; while esperando[i] and llave do llave:=testAndSet(cerradura); esperando[i] := FALSE;

cerradura

esperando

j:=i+1 mod n; while (j<>i) and (not esperando[j]) do j:=j+1 mod n; if j=i then cerradura := FALSE else esperando[j] := FALSE;

....... Proceso 4 (i=4)

F F F F V F F F

0 1 2 3 4 5 6 7 ...

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

35

4. Soluciones hardware
Solucin a la s.c. con test and set y espera limitada
Proceso 0 (i=0)
esperando[i]:= TRUE; llave := TRUE; while esperando[i] and llave do llave:=testAndSet(cerradura); esperando[i] := FALSE;

cerradura

esperando

j:=i+1 mod n; while (j<>i) and (not esperando[j]) do j:=j+1 mod n; if j=i then cerradura := FALSE else esperando[j] := FALSE;

....... Proceso 4 (i=4)

F F F F F F F F

0 1 2 3 4 5 6 7 ...

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

36

18

4. Soluciones hardware
Solucin a la s.c. con test and set y espera limitada
Proceso 0 (i=0)
esperando[i]:= TRUE; llave := TRUE; while esperando[i] and llave do llave:=testAndSet(cerradura); esperando[i] := FALSE;

cerradura

esperando

j:=i+1 mod n; while (j<>i) and (not esperando[j]) do j:=j+1 mod n; if j=i then cerradura := FALSE else esperando[j] := FALSE;

....... Proceso 4 (i=4)

F F F F F F F F

0 1 2 3 4 5 6 7 ...

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

37

4. Soluciones hardware
Solucin a la s.c. con test and set y espera limitada
Proceso 0 (i=0)
esperando[i]:= TRUE; llave := TRUE; while esperando[i] and llave do llave:=testAndSet(cerradura); esperando[i] := FALSE;

cerradura

esperando

j:=i+1 mod n; while (j<>i) and (not esperando[j]) do j:=j+1 mod n; if j=i then cerradura := FALSE else esperando[j] := FALSE;

....... Proceso 4 (i=4)

F F F F F F F F

0 1 2 3 4 5 6 7 ...

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

38

19

4. Soluciones hardware
Operacin swap atmica
La operacin swap permite intercambiar atmicamente dos variables en una sola operacin de ensamblador. La especificacin funcional de esta operacin es:

function var functionswap( swap( vara,b: a,b:boolean); boolean); var temp : boolean; var temp : boolean; begin begin temp:= temp:=a; a; a:=b; a:=b; b b:= :=temp; temp; end end atmicamente!

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

39

4. Soluciones hardware
Solucin a la s.c con swap Variables compartidas:
var ;; varcerradura cerradura:= :=FALSE FALSE::boolean boolean

Espera activa

task taskPi; Pi; var varllave: llave:boolean; boolean; llave llave:= :=TRUE TRUE while whileswap(cerradura, swap(cerradura,llave) llave)until untilllave llave= =FALSE; FALSE; seccin seccinCRTICA CRTICA cerradura cerradura:= :=FALSE; FALSE; seccin seccinRESTANTE RESTANTE end endPi; Pi;

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

40

20

Comunicacin y sincronizacin de procesos


Contenido 1.- Introduccin 2.- Comunicacin por memoria comn 3.- El problema de la seccin crtica 4.- Soluciones hardware 5.- Semforos 6.- Problemas clsicos de programacin concurrente 7.- Construcciones lingsticas 8.- Sincronizacin en POSIX 9.- Comunicacin por mensajes

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

41

5. Semforos
Definicin de semforo Tipo de datos que toma valores enteros y sobre el que se definen las siguientes operaciones atmicas: S: semaforo(N); P(S) S:=S-1; if S<0 then esperar(S); V(S) S:=S+1; if S<=0 then despertar(S); La operacin esperar(S) suspende al proceso que ha invocado P() y lo introduce en una cola de espera asociada a S. La operacin despertar(S) extrae un proceso de la cola de espera asociada a S y lo activa.
Sistemas Operativos I (00-01) Comunicacin y sincronizacin de Procesos

(* semforo S con valor inicial N >=0 *) atmicamente!

atmicamente!
Semforo

P V

contador cola

42

21

5. Semforos
Solucin al problema de la seccin crtica con semforos
Los semforos son un mecanismo de sincronizacin que no requiere espera activa

Variables compartidas: var varmutex: mutex:semaforo(1); semaforo(1); task taskPi; Pi; (* (*valor valorinicial inicial1 1*) *)

... ... P (mutex); P (mutex); seccin seccinCRTICA CRTICA V (mutex); V(mutex); seccin seccinRESTANTE RESTANTE ... ...
end endPi; Pi;

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

43

5. Semforos
Implementacin de semforos
ESTRUCTURAS DE CONTROL DEL SISTEMA : Vector de semforos

Tabla de procesos
Semforo-i
Contador Cola de procesos esperando en el semforo i

P. primero

PCB 8

P. ltimo

Estado: SUSP Evento: Sem-i ... P. siguiente

PCB 4

PCB 2

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

44

22

Flujo de Control del S.O.


semaforo(valor)
Llamadas al Sistema relacionadas con semforos

P(S)

V(S)

Activacin del Sistema Operativo

Guardar parte del contexto de usuario, para realizar cambio de modo de ejecucin (usuario->ncleo)

Reservar un semforo S; S.contador:= valor;

S.contador:= S.contador-1; Si S. contador < 0 entonces Pasar a suspendido al proceso en ejecucin; Si S.contador Insertarlo en S.cola; Si no

S.contador:= S.contador+1; Si S.contador <= 0 entonces p:=extraer proceso de S.cola; Pasar p a preparado

Planificador: seleccin del prximo proceso

Si no

Realizar cambio de modo de ejecucin (ncleo -> usuario). Recuperar contexto de usuario.

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

45

5. Semforos
Semforos versus espera activa
Espera activa:
El proceso que espera entrar en la seccin crtica desaprovecha el tiempo de CPU comprobando cuando puede entrar (ejecutando las instrucciones del protocolo de entrada).

Semforos:
La espera se realiza en la cola del semforo, que es una cola de procesos suspendidos. El proceso que espera entrar en la seccin crtica no utiliza CPU; est suspendido.

Proceso:
EntrdaSC; SeccinCrtica; SalidaSC; P1,P2,P2:Proceso; Duracin se la seccin crtica 2q

Espera activa

Espera activa

P1 P2 P3 P1 P2 P3 P2 P3 P3 q

Espera pasiva

P1 P1 P2 P2 P3 P3
46

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

23

5. Semforos
Semforos: ejemplos de utilizacin Un semforo es un mecanismo de sincronizacin de uso general: Para conseguir exclusin mtua. Para forzar relaciones de precedencia, como por ejemplo: El proceso Pj debe ejecutar B despus de que el proceso Pi haya ejecutado A. var sinc: semaforo(0); task Pi; ... A; V(sinc); ... task Pj; ... P(sinc) B; ...

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

47

5. Semforos
Semforos: problemas derivados de una utilizacin incorrecta Interbloqueos: Hay un conjunto de procesos en el que todos esperan (indefinidamente) un evento que slo otro proceso del conjunto puede producir. Ejemplo:

var s1: semaforo(1); s2: semaforo(1); task P1; ... P(s1); P(s2); V(s1); V(s2); task P2; ... P(s2); P(s1); V(s1); V(s2);

Escenario: Escenario: P1 P1 P(s1); P(s1); P2 P(s2); P2 P(s2); P2 P2 P(s1); P(s1); P1 P(s2); P1 P(s2); Sistema Sistemaen ensituacin situacin de interbloqueo de interbloqueo

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

48

24

Comunicacin y sincronizacin de procesos


Contenido 1.- Introduccin 2.- Comunicacin por memoria comn 3.- El problema de la seccin crtica 4.- Soluciones hardware 5.- Semforos 6.- Problemas clsicos de programacin concurrente 7.- Construcciones lingsticas 8.- Sincronizacin en POSIX 9.- Comunicacin por mensajes

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

49

6. Problemas clsicos de concurrencia


Problemas clsicos de programacin concurrente Existe una serie de problemas clsicos que se utilizan como banco de pruebas de los diferentes mecanismos de sincronizacin entre procesos: Los productores y los consumidores Los lectores y los escritores Los cinco filsofos El barbero dormiln ...

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

50

25

6. Problemas clsicos de concurrencia


El problema de los productores y consumidores con buffer acotado

C1 salida

C2

Consumidores

buffer

contador entrada Productores P1 P2

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

51

6. Problemas clsicos de concurrencia


Los productores y consumidores Variables compartidas

var ::array[0..n-1] varbuffer buffer array[0..n-1]of ofelemento; elemento; entrada:=0, ;; entrada:=0,salida:=0, salida:=0,contador:= contador:=0 0::0..n-1 0..n-1 lleno: ::semaforo(1); lleno:semaforo(0); semaforo(0); vacio: vacio:semaforo(n), semaforo(n), mutex mutex semaforo(1);

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

52

26

6. Problemas clsicos de concurrencia


Los productores y consumidores
task taskproductor; productor; var item: var item:elemento; elemento; task taskconsumidor; consumidor; var varitem: item:elemento; elemento; repeat repeat P (lleno); P (lleno);

repeat repeat item item:= :=producir(); producir(); P (vacio); P (vacio); P (mutex); P (mutex);

until untilfalse false end endproductor; productor;

contador:=contador+1; contador:=contador+1; V (mutex); V(mutex); V (lleno); V (lleno);

buffer[entrada] buffer[entrada]:= :=item; item; entrada := (entrada entrada := (entrada+1) +1)mod modn; n;

salida salida:= :=(salida (salida+1) +1)mod modn; n; contador:=contador-1; contador:=contador-1; V (mutex); V (mutex); V (vacio); V (vacio); consumir(item); consumir(item);

P (mutex); P (mutex); item item:= :=buffer[salida] buffer[salida]

until untilfalse false end endproductor; productor;

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

53

6. Problemas clsicos de concurrencia


Los lectores y los escritores Problema de los lectores y los escritores Hay un conjunto de datos comunes (un fichero, una base de datos, etc.) Los procesos lectores, acceden a los datos en modo de slo lectura Los procesos escritores, acceden a los datos en modo lectura-escritura Especificacin del protocolo: reglas de correccin Diversos lectores pueden leer concurrentemente. Los escritores se excluyen mtuamente entre ellos Los escritores se excluyen mtuamente con los lectores.

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

54

27

6. Problemas clsicos de concurrencia


Los lectores y los escritores Especificacin del protocolo: reglas de correccin

L L

L L

STOP

STOP

E L

E L

E
STOP

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

55

6. Problemas clsicos de concurrencia


Loslectores y escritores Especificacin del protocolo: reglas de prioridad Primera variante de los Lectores-Escritores: (Prioridad a los lectores) Si hay lectores leyendo y escritores esperando, entonces un nuevo lector tiene preferencia sobre el escritor que espera. Hay inanicin para los escritores, si no paran de llegar lectores Segunda variante de los Lectores-Escritores: (Prioridad a los escritores) Si hay escritores esperando, stos siempre tienen preferencia sobre nuevos lectores que lleguen Hay inanicin para los lectores, si no paran de llegar escritores Tercera variante, sin inanicin para ningn tipo de proceso

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

56

28

6. Problemas clsicos de concurrencia


Los lectores y los escritores Especificacin del protocolo: reglas de prioridad

STOP

E L

E
1 variante

2 variante

STOP

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

57

6. Problemas clsicos de concurrencia


Los lectores y los escritores (semforos) Solucin a la primera variante: Inanicin para los escritores

Variables compartidas:
var varmutex: mutex:semaforo(1); semaforo(1); esc escsemaforo(1); semaforo(1); nlectores:=0 nlectores:=0::integer; integer;

task taskescritor; escritor; P (esc); P (esc); escribir(); escribir(); V (esc); V(esc); end endescritor; escritor;

task tasklector; lector; P (mutex); P (mutex); nlectores nlectores:= :=nlectores nlectores+ +1; 1; if nlectores = 1 then P (esc); if nlectores = 1 then P (esc); V (mutex); V (mutex); leer(); leer(); P (mutex); P(mutex); nlectores nlectores:= :=nlectores nlectores--1; 1; if nlectores = (esc); if nlectores =0 0then thenV V (esc); V (mutex); V (mutex); end endlector; lector;

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

58

29

Comunicacin y sincronizacin de procesos


Contenido 1.- Introduccin 2.- Comunicacin por memoria comn 3.- El problema de la seccin crtica 4.- Soluciones hardware 5.- Semforos 6.- Problemas clsicos de programacin concurrente 7.- Construcciones lingsticas 8.- Sincronizacin en POSIX 9.- Comunicacin por mensajes

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

59

7. Construcciones lingsticas
Con el fin de simplificar la programacin de aplicaciones concurrentes, algunos lenguajes de programacin proporcionan herramientas (construcciones lingsticas) que facilitan la sincronizacin entre las tareas y proporcionan un modelo de programacin uniforme. Monitores Tipos protegidos en ADA Mtodos synchronized en Java
Soluciones a nivel de lenguaje de programacin Soluciones a nivel de sistema operativo Soluciones hardware

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

60

30

7.1 Monitores
Concepto Un monitor es un tipo de datos que encapsula datos y operaciones. Proporciona: Exclusin mtua. Sincronizacin.

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

61

7.1 Monitores
Sintaxis:
type nombre_monitor = monitor

Variables :: Variablesinternas internasal almonitor monitor Variables compartidas Variables compartidas Variables Variablescondicin condicin Mtodos Mtodosde deacceso: acceso: Unica Unicava vade deacceso accesoaalas las variables variablescompartidas compartidas Exclusin Exclusinmutua mutua

.... declaracin de variables.


procedure entry P1(....); begin ... end; function entry F2(....); begin ... end; ...... begin ..... Cdigo de inicializacin end;

Se Seinvoca invocaautomticamente automticamenteal al instanciar el instanciar elmonitor monitoryyantes antes de deser seraccedido accedidopor porningn ningn proceso proceso Se Seutiliza utilizapara parala lainicializacin inicializacin de las variables de las variablesdel delmonitor monitor
62

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

31

7.1 Monitores
Variables de tipo condicin: Para definir esquemas complejos de sincronizacin, se pueden definir las variables del tipo condition. var x: condition; Sobre las variables condition se pueden realizar las siguientes operaciones: x.wait; Causa la suspensin (en una cola asociada a x) del proceso que invoc la operacin. x.signal; Se reanuda (si existe) un proceso suspendido en la cola asociada a x. x.awaited; Indica el nmero de procesos suspendidos en la cola asociada a x.

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

63

7.1 Monitores
Productores-consumidores con monitores

Monitor

PROGRAMA PRINCIPAL

B:buffer_limitado ;; B:buffer_limitado taskProductor; Productor; task var : elemento:item; var: elemento:item; repeat repeat ....Producirun unelemento elemento ....Producir B.insertar(elemento); B.insertar(elemento); untilfalse; false; until end Productor; end Productor;

taskConsumidor; Consumidor; task var elemento:item; var ::elemento:item; repeat repeat B.extraer(elemento); B.extraer(elemento); ....Procesarelemento elemento ....Procesar untilfalse; false; until endConsumidor; Consumidor; end

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

64

32

Productores-consumidores con monitores


MONITOR type typebuffer_limitado buffer_limitado= =monitor monitor const constn=100; n=100; cont, cont,entrada, entrada,salida:integer; salida:integer; lleno , ,vacio : :condition ;; lleno vacio condition buffer: buffer:array[0..n-1] array[0..n-1]of ofitem; item; procedureentry entryinsertar insertar(elem:item); (elem:item); procedure procedure entry insertar (elem:item); begin begin begin ..... ..... ..... end end ;; ; end procedureentry entryextraer extraer(var (varelem:item); elem:item); procedure procedure entry extraer (var elem:item); begin begin begin ..... ..... ..... end end ;; ; end begin begin entrada:=0; entrada:=0;salida:=0;cont:=0; salida:=0;cont:=0; end ;; end
Sistemas Operativos I (00-01)

procedure entry insertar (elem:item); begin if cont=n then lleno.wait; cont:=cont+1; buffer[entrada]:=item; entrada:=(entrada + 1) mod n; vacio.signal; end;

procedure entry extraer(var elem:item); begin if cont=0 then vacio.wait; cont:=cont-1; item:=buffer[salida]; salida :=(salida + 1) mod n; lleno.signal; end;

Comunicacin y sincronizacin de Procesos

65

7.1Monitores
Variantes Existen diferentes variantes en la definicin de un monitor segn resuelvan el siguiente problema: Un proceso P ejecuta x.signal y activa a otro proceso Q, Potencialmente P y Q pueden continuar su ejecucin dentro del monitor. Cmo se garantiza la ejecucin en exclusin mutua en el monitor? Modelo de Hoare: El proceso que invoca la operacin x.signal (P) se suspende (en una cola de urgencia) de forma que el proceso reanudado por la operacin x.signal (Q) pasa a ejecutarse dentro del monitor. Modelo de Lampson y Redell: El proceso P contina ejecutndose y Q se ejecutar cuando el monitor quede libre. Modelo de Brinch-Hansen: La operacin x.signal ha de ser la ltima operacin que un proceso invoca antes de salir del monitor.

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

66

33

7.1 Monitores
Modelo de colas
Cola de entrada

MONITOR
Variable condicin c1 Zona de espera del monitor (procesos suspendidos)
c1.wait c1.signal c2.wait c2.signal

Variable condicin c2

Datos

Procedimientos y funciones

Cola urgente (Hoare)

Salida

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

67

7.1 Monitores
Implementacin de monitores con semforos Variables globales, por cada monitor se definen: var ::semaforo (1); varmutex mutex semaforo (1); urgente : semaforo (0); urgente: semaforo (0);(*cola (*colade deurgencia*) urgencia*) cont_urg : integer:=0; cont_urg: integer:=0;

Para cada procedimiento o funcion F, se genera: P(mutex); P(mutex); ..... .....Cuerpo Cuerpode deF; F; if cont_urg > if cont_urg >0 0 then thenV(urgente) V(urgente) else elseV(mutex); V(mutex);

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

68

34

7.1 Monitores
Implementacin de monitores con semforos Para cada variable condicin X, se define: var ::semaforo (0); var x_sem x_sem semaforo (0); x_cont ::integer:=0; x_cont integer:=0;

Operacin X.wait
x_cont:= x_cont:=x_cont+1; x_cont+1; if ifcont_urg cont_urg> >0 0 then V(urgente) then V(urgente) else elseV(mutex); V(mutex); P(x_sem); P(x_sem); x_cont:= x_cont:=x_cont-1; x_cont-1;

Operacin X.signal
if ifx_cont x_cont> >0 0 then begin then begin cont_urg:= cont_urg:=cont_urg cont_urg+ +1; 1; V(x_sem); V(x_sem); P(urgente); P(urgente); cont_urg:= cont_urg:=cont_urg cont_urg--1; 1; end ; end;

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

69

7.1 Monitores
Lectores-escritores con monitores

Monitor

PROGRAMA PRINCIPAL

varle:le-control; le:le-control; var var varle:le-control; le:le-control; tasklector(); lector(); task begin begin repeat repeat le.pre-leer(); le.pre-leer(); leer(); leer(); le.post-leer(); le.post-leer(); untilfalse; false; until endlector; lector; end

taskescritor(); escritor(); task begin begin repeat repeat le.pre-escribir(); le.pre-escribir(); escribir(); escribir(); le.post-escribir(); le.post-escribir(); until false; until false; end escritor; end escritor;

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

70

35

7.1 Monitores
Lectores-escritores con monitores
MONITOR type ;; typele-control le-control= =monitor monitor var lectores, escritores :Integer; var lectores, escritores :Integer; leer , ,escribir ;; leer escribir: :condition condition procedure procedureentry entrypre-leer(); pre-leer(); if ;; if escritores escritores> >0 0then thenleer.wait leer.wait lectores lectores:= :=lectores+1; lectores+1; leer.signal ; ;(* leer.signal (*despertar despertaral alsiguiente siguiente*) *) end ;; end procedure procedureentry entrypost-leer(); post-leer(); lectores := lectores-1; lectores := lectores-1; if ;; iflectores lectores= =0 0then thenescribir.signal escribir.signal end ; end; Inanicin Inanicinpara paraescritores escritores procedure entry pre-escribir(); procedure entry pre-escribir(); if if escritores escritores> >0 0or orlectores lectores> >0 0 then ;; thenescribir.wait escribir.wait escritores escritores:= :=escritores+1; escritores+1; end ; end; procedure procedureentry entrypost-escribir(); post-escribir(); escritores := escritores :=escritores-1; escritores-1; if ifleer.awaited leer.awaited> >0 0 then ;; thenleer.signal leer.signal else ;; elseescribir.signal escribir.signal end ; end; begin begin lectores:=0; lectores:=0;escritores:=0; escritores:=0; end .. end
71

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

7.1 Monitores
Lectores-escritores con monitores
MONITOR type ;; typele-control le-control= =monitor monitor var varlectores, lectores,escritores escritores:Integer; :Integer; leer , ,escribir ;; leer escribir: :condition condition procedure procedureentry entrypre-leer(); pre-leer(); if escritores if escritores> >0 0or orescribir.awaited escribir.awaited> >0 0 then leer.wait ; then leer.wait; lectores lectores:= :=lectores+1; lectores+1; leer.signal ; ;(* leer.signal (*despertar despertaral alsiguiente siguiente*) *) end ; end; procedure procedureentry entrypost-leer(); post-leer(); lectores := lectores-1; lectores := lectores-1; if ;; iflectores lectores= =0 0then thenescribir.signal escribir.signal end ;; end Inanicin Inanicinpara paralectores lectores procedure entry pre-escribir(); procedure entry pre-escribir(); if if escritores escritores> >0 0or orlectores lectores> >0 0 then ;; thenescribir.wait escribir.wait escritores escritores:= :=escritores+1; escritores+1; end ; end; procedure procedureentry entrypost-escribir(); post-escribir(); escritores := escritores :=escritores-1; escritores-1; if ifescribir.awaited escribir.awaited> >0 0 then ;; thenescribir.signal escribir.signal else ;; elseleer.signal leer.signal end ; end; begin begin lectores:=0; lectores:=0;escritores:=0; escritores:=0; end .. end
72

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

36

7.1 Monitores
Lectores-escritores con monitores
MONITOR type ;; typele-control le-control= =monitor monitor var varlectores, lectores,escritores escritores:Integer; :Integer; leer , ,escribir ;; leer escribir: :condition condition procedure procedureentry entrypre-leer(); pre-leer(); if if escritores escritores> >0 0or orescribir.awaited escribir.awaited> >0 0 then leer.wait ; then leer.wait; lectores lectores:= :=lectores+1; lectores+1; leer.signal ; ;(* leer.signal (*despertar despertaral alsiguiente siguiente*) *) end ;; end procedure procedureentry entrypost-leer(); post-leer(); lectores lectores:= :=lectores-1; lectores-1; if ;; iflectores lectores= =0 0then thenescribir.signal escribir.signal end ;; end Sin SinInanicin Inanicin procedure entry procedure entrypre-escribir(); pre-escribir(); if if escritores escritores> >0 0or orlectores lectores> >0 0 then ;; thenescribir.wait escribir.wait escritores escritores:= :=escritores+1; escritores+1; end ; end; procedure procedureentry entrypost-escribir(); post-escribir(); escritores := escritores :=escritores-1; escritores-1; if ifleer.awaited leer.awaited> >0 0 then ;; thenleer.signal leer.signal else ;; elseescribir.signal escribir.signal end ; end; begin begin lectores:=0; lectores:=0;escritores:=0; escritores:=0; end .. end
73

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

7.1 Monitores
Monitores: espera condicional Cuando se produce una llamada a x.signal, qu proceso se activa? El monitor permite una variante de la operacin wait sobre una variable condicin para que, cuando se produzca la operacin signal, se active a los procesos suspendidos por orden de prioridad. Se define la siguiente construccin: x.wait(c) donde:
c es una expresin entera que se evala cuando se realiza la operacin wait. El valor de c se almacena junto al proceso suspendido. Al invocar la operacin signal, se activa el proceso que tenga mayor prioridad (menor valor numrico de c).

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

74

37

7.1 Monitores
Monitores espera condicional type typeasignacion-recurso asignacion-recurso= =monitor monitor var ocupado: boolean; var ocupado: boolean; x ::condition ;; x condition procedure entry procedure entryadquirir(tiempo: adquirir(tiempo:integer); integer); begin begin if ifocupado ocupadothen thenx.wait(tiempo); x.wait(tiempo); ocupado:= true; ocupado:= true; end ;; end procedure procedureentry entryliberar; liberar; begin begin ocupado:= ocupado:=false; false; x.signal; x.signal; end ;; end begin begin ocupado:= ocupado:=false; false; end .. end
Comunicacin y sincronizacin de Procesos 75

Asignacin de recursos basada en tiempo de uso. De aquellos procesos que se encuentren esperando por el recurso ocupado, se reanudar aquel que lo vaya a usar durante menos tiempo.

Sistemas Operativos I (00-01)

7.2 Objetos protegidos


Objetos protegidos de ADA : declaracin Un objeto protegido encapsula datos que son accedidos simultneamente por varias tareas. Las tareas acceden a los datos del objeto utilizando operaciones protegidas, las cuales pueden ser funciones, procedimientos y entradas.
protected protected [type] [type] Nombre [ (Discriminantes) ] Nombre [ (Discriminantes) ] is is procedure Pnombre(Params) ; procedurePnombre(Params) Pnombre(Params) ; procedure ; procedure Pnombre(Params) ; function Fnombre(Params) return Un_Tipo; function Fnombre(Params) returnUn_Tipo; Un_Tipo; function Fnombre(Params) return function Fnombre(Params) return Un_Tipo; entry Enombre(Params); entry Enombre(Params); entry Enombre(Params); entry Enombre(Params); private private Datos_Protegidos Datos_Protegidos : : Su_Tipo; Su_Tipo; end end Nombre; Nombre;

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

76

38

7.2 Objetos protegidos


Objetos protegidos de ADA La especificacin tiene dos partes: Una pblica, donde se declaran las operaciones protegidas. Una privada donde se declaran los datos protegidos. La parte privada no es visible por los clientes del objeto protegido.
especificacin especificacin protected protected [type] [type] Nombre [ (Discriminantes) ] Nombre [ (Discriminantes) ] is is procedure ; procedure Pnombre(Params) Pnombre(Params) ; function Fnombre(Params) function Fnombre(Params) return return Un_Tipo; Un_Tipo; entry Enombre(Params); entry Enombre(Params); private private Datos_Protegidos Datos_Protegidos : : Su_Tipo; Su_Tipo; end end Nombre; Nombre;

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

77

7.2 Objetos protegidos


Objetos protegidos de ADA: declaracin En el cuerpo del objeto se implementan las operaciones protegidas.
protected protected body body Nombre Nombre is is --cuerpo --cuerpo end end Nombre; Nombre;

especificacin especificacin protected protected [type] [type] Nombre [ (Discriminantes) ] Nombre [ (Discriminantes) ] is is procedure ; procedure Pnombre(Params) Pnombre(Params) ; function function Fnombre(Params) Fnombre(Params) return return Un_Tipo; Un_Tipo; entry entry Enombre(Params); Enombre(Params); private private Datos_Protegidos Datos_Protegidos : : Su_Tipo; Su_Tipo; end end Nombre; Nombre;

ADA permite declarar tipos protegidos o instancias individuales.


Objeto_1: Objeto_1: Nombre; Nombre; Objeto_2: Objeto_2: Nombre; Nombre;

instanciacin instanciacin
Comunicacin y sincronizacin de Procesos 78

Sistemas Operativos I (00-01)

39

7.2 Objetos protegidos


Objetos protegidos de ADA: control de concurrencia
Las funciones permiten consultar el objeto protegido y, por tanto, pueden ejecutarse simultneamente varias funciones. Cuando una tarea est ejecutando un procedimiento o una entrada del objeto protegido, otra tarea interesada en acceder al objeto protegido queda detenida hasta que ste queda libre. Las entradas tienen asociadas una condicin lgica denominada barrera (o guarda). Si en el momento de llamar al objeto la barrera es cierta, la tarea ejecuta la entrada. En caso contrario, la tarea queda detenida en dicha entrada. entry entry Una_Entrada Una_Entrada (Params) (Params) when when Alguna_Condicin Alguna_Condicin is is var_locales; var_locales; begin begin ... ... end end Una_Entrada; Una_Entrada;

La Laexpresin expresinde deuna unabarrera barrerano nopuede puede contener parmetros de la entrada. contener parmetros de la entrada.

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

79

7.2 Objetos protegidos


Objetos protegidos de ADA: control de concurrencia Las barreras se revaluan cuando finaliza la ejecucin de una entrada o un procedimiento. Si alguna barrera es ahora cierta se elige una tarea detenida por dicha barrera y reanuda su ejecucin. Las tareas detenidas en barreras tienen prioridad cuando son despertadas frente a aquellas que estn esperando fuera del objeto protegido.

E1 E2

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

80

40

7.2 Objetos protegidos


Construccin de semforos con objetos protegidos de ADA
especificacin especificacin cuerpo cuerpo

protected protectedtype typeSemaforo Semaforo(Inicial:integer:=1) (Inicial:integer:=1) is is entry entryP; P; procedure procedureV; V; private private contador :Integer:=Inicial; contador :Integer:=Inicial; end Semaforo; end Semaforo;
utilizacin utilizacin

protected protectedbody bodySemaforo Semaforois is entry P when contador>0 entry P when contador>0is is begin begin contador:=contador-1; contador:=contador-1; end endP; P; procedure procedureV Vis is begin begin contador:=contador+1; contador:=contador+1; end endV; V; end endSemaforo; Semaforo;

Un_semaforo: Un_semaforo:Semaforo(5); Semaforo(5); .... .... Un_semaforo.P; Un_semaforo.P; .... .... Un_semaforo.V; Un_semaforo.V;
Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

81

7.2 Objetos protegidos


Ejemplo en ADA: el buffer acotado

procedure Prodcons is
n : constant Integer := 10; subtype Indice is Integer range 0..n-1; subtype Cantidad is Integer range 0..n; subtype Item is Integer ; type Buffers is array (Indice) of Item; task tasktype typeProductor; Productor; task tasktype typeConsumidor; Consumidor; Un_Buffer ::Buffer; Un_Buffer Buffer; Prod_1: Productor; Prod_1: Productor; Prod_2: Prod_2:Productor; Productor; Cons Cons ::Consumidor; Consumidor;
Sistemas Operativos I (00-01)

protected protectedtype typeBuffer Bufferis is entry Poner Poner (x (x::in inITEM); ITEM); entry Quitar Quitar(x (x::out outITEM); ITEM); private private Buf: ;; Buf:Buffers Buffers Entrada Entrada::Indice Indice:= :=0; 0; Salida Salida ::Indice Indice:= :=0; 0; Contador: Contador:Cantidad Cantidad:= :=0; 0; end endBuffer Buffer;;

Comunicacin y sincronizacin de Procesos

82

41

7.2 Objetos protegidos


Ejemplo en ADA: el buffer acotado protected body Buffer is entry Poner (x : in Item) when Contador < n is begin Buf(entrada) := x; Entrada := (Entrada + 1) mod n; Contador := Contador + 1; end Poner; entry Quitar (x : out Item) when Contador > 0 is begin x:= Buf(Salida); Salida := (Salida + 1) mod n; Contador := Contador - 1; end Quitar; end Buffer ;
Sistemas Operativos I (00-01) Comunicacin y sincronizacin de Procesos 83

7.2 Objetos protegidos


Ejemplo en ADA: el buffer acotado

task taskbody bodyProductor Productoris is xx::ITEM; ITEM; begin begin loop loop xx:= :=...; ...; Un_Buffer.Poner(x); Un_Buffer.Poner(x); ---otras otrasacciones acciones end endloop; loop; end endProductor Productor;; begin null; end ProdCons;

task taskbody bodyConsumidor Consumidoris is xx::ITEM; ITEM; begin begin loop loop Un_Buffer.Quitar(x); Un_Buffer.Quitar(x); ---otras otrasacciones acciones end endloop; loop; end endConsumidor; Consumidor;

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

84

42

Comunicacin y sincronizacin de procesos


Contenido 1.- Introduccin 2.- Comunicacin por memoria comn 3.- El problema de la seccin crtica 4.- Soluciones hardware 5.- Semforos 6.- Problemas clsicos de programacin concurrente 7.- Construcciones lingsticas 8.- Sincronizacin en POSIX 9.- Comunicacin por mensajes

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

85

8. Sincronizacin en POSIX
POSIX ofrece dos primitivas de sincronizacin de hilos: los mutex (o cerrojos) y las variables condicin. Mutex (cerrojos) Tienen dos estados posibles:
Abierto ningn hilo es el propietario Cerrado el hilo que lo cierra es el propietario. Un mutex no puede tener dos hilos propietarios simultneamente.

Cuando un hilo intenta cerrar un mutex que ya ha sido cerrado, se suspende hasta que el hilo propietario lo abra. Slo el hilo propietario puede abrir el mutex. Creacin e inicializacin de los mutex:
p_thread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

86

43

8. Sincronizacin en POSIX
Llamada
pthread_mutex_lock (mut)

pthread_mutex_unlock (mut) pthread_mutex_trylock(mut)

Descripcin Si el mutex mut estaba abierto, lo cierra y el hilo que lo cierra es el propietario del mutex. Si estaba cerrado, suspende(*) al hilo hasta que se abra el mutex. Abre el mutex mut. Solo el hilo propietario del mutex puede abrirlo (**). Igual que pthread_mutex_lock pero en lugar de suspender al hilo si el semforo estaba cerrado, retorna immediatamente con un cdigo de error.

(*) Hay tipos de mutex, que le permiten al propietario cerrarlo varias veces sin bloquearse. Con este tipo de mutex, el propietario debe abrirlo tantas veces como lo hubiera cerrado para dejarlo finalmente abierto. (**) Hay sistemas, como Redhat 5.1, que permiten que otros hilos abran el mutex, sin embargo este funcionamiento no es portable.
Sistemas Operativos I (00-01) Comunicacin y sincronizacin de Procesos 87

8. Sincronizacin en POSIX
Variables condicin en POSIX Las variables condicin son un tipo abstracto de datos con tres operaciones bsicas: wait: suspende al proceso que la invoca en la condicin. signal: activa un proceso suspendido en la condicin broadcast: activa a todos los procesos suspendidos en la condicin Las variables condicin siempre deben estar asociadas a un mutex. Adems existen mtodos para limitar el tiempo que un hilo est bloqueado en una variable condicin. Creacin e inicializacin de atributos:
p_thread_cond_t c1 = PTHREAD_COND_INITIALIZER;

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

88

44

8. Sincronizacin en POSIX
Variables condicin en POSIX
Llamada
pthread_cond_wait(cond, mut)

pthread_cond_signal(cond)

pthread_cond_broadcast(cond) pthread_cond_timedwait (cond, mut,duracion)

Descripcin De forma atmica, realiza la operacin p_thread_mutex_unlock sobre mut, y bloquea al hilo en la variable condicin cond. Cuando es despertado, el hilo cierra nuevamente el mutex mut (realizando la operacin p_thread_mutex_lock. Despierta a uno de los hilos que estn bloqueados en la variable condicin. Si no hay hilos bloqueados, no sucede nada. Despierta todos los hilos bloqueados sobre cond. Igual que pthread_cond_wait pero si antes de duracion no se ha despertado al hilo, la llamada finalizar con un cdigo de error. Al despertar, el hilo que invoca la llamada, vuelve a cerrar el mutex mut.

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

89

8. Sincronizacin en POSIX
El productor consumidor en POSIX (i)

Variables globales: #define #definen n10 10 int intentrada, entrada,salida, salida,contador; contador; int int buffer[n]; buffer[n]; pthread_mutex_t pthread_mutex_t mutex mutex= =PTHREAD_MUTEX_INITIALIZER; PTHREAD_MUTEX_INITIALIZER; pthread_cond_t lleno = pthread_cond_t lleno =PTHREAD_COND_INITIALIZER; PTHREAD_COND_INITIALIZER; pthread_cond_t pthread_cond_t vacio vacio= =PTHREAD_COND_INITIALIZER; PTHREAD_COND_INITIALIZER;

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

90

45

8. Sincronizacin en POSIX
El productor consumidor en POSIX (i)
void void*productor(void *productor(void* *arg){ arg){ int inti; i; for for(i=0; (i=0;i<100; i<100;i++) i++)Insertar(i); Insertar(i); pthread_exit (0); pthread_exit (0); }} void void*consumidor(void *consumidor(void* *arg){ arg){ int inti; i; for for(i=0; (i=0;i<100; i<100;i++) i++) printf(%d printf(%d, ,Extraer()); Extraer()); pthread_exit (0); pthread_exit(0); }}

main( main()){{ pthread_t pthread_tth_a, th_a,th_b; th_b; entrada entrada= =salida salida= =contador contador= =0; 0; pthread_create (&th_a, pthread_create (&th_a,NULL,productor,NULL); NULL,productor,NULL); pthread_create (&th_b, pthread_create(&th_b,NULL,consumidor,NULL); NULL,consumidor,NULL); pthread_join (th_a, pthread_join (th_a,NULL); NULL); pthread_join (th_b, pthread_join (th_b,NULL); NULL);exit(0); exit(0);

}}

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

91

8. Sincronizacin en POSIX
El productor consumidor en POSIX (i)
Insertar Insertar(int (intdato) dato){{ pthread_mutex_lock(&mutex); while (contador >=n) pthread_cond_wait(&lleno, &mutex); buffer[entrada]= buffer[entrada]=dato; dato;entrada= entrada=(entrada+1) (entrada+1)% %n; n; contador= contador+1; contador= contador+1; pthread_cond_broadcast(&vacio); pthread_mutex_unlock(&mutex); }} int intExtraer Extraer(()){{ int intdato; dato; pthread_mutex_lock(&mutex); while (contador == 0) pthread_cond_wait(&vacio, &mutex); dato dato= =buffer[salida]; buffer[salida];salida= salida=(salida+1) (salida+1)% %n; n; contador=contador 1; contador=contador - 1; pthread_cond_broadcast(&lleno); pthread_mutex_unlock(&mutex); return returndato; dato; }}
Sistemas Operativos I (00-01) Comunicacin y sincronizacin de Procesos 92

46

Comunicacin y sincronizacin de procesos


Contenido 1.- Introduccin 2.- Comunicacin por memoria comn 3.- El problema de la seccin crtica 4.- Soluciones hardware 5.- Semforos 6.- Problemas clsicos de programacin concurrente 7.- Construcciones lingsticas 8.- Sincronizacin en POSIX 9.- Comunicacin por mensajes

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

93

9. Comunicacin por mensajes


Sistemas de mensajes Los sistemas de mensajes permiten la comunicacin entre procesos con espacios de direcciones distintos, bien sean locales o remotos. Operaciones bsicas (proporcionadas por el Sistema Operativo):
send(dst,mensaje): enviar un mensaje a un destino. receive(org,mensaje): recibir un mensaje de un origen.

P1
mensaje

P2

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

94

47

9. Comunicacin por mensajes


Variantes Segn el modo de nombrar origen y destino:
Comunicacin directa: proceso a proceso. Comunicacin indirecta: basada en puertos o buzones.

Segn la capacidad del enlace:


Comunicacin sncrona: el enlace tiene capacidad = 0. Comunicacin asncrona: el enlace tiene capacidad > 0.

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

95

9. Comunicacin por mensajes


Comunicacin directa Los mensajes se direccionan a procesos. Los procesos necesitan conocer sus identificadores: las direcciones dst y org son identificadores de procesos. org puede ser un comodn, ANY. En este caso se recibe de cualquier proceso y ANY toma el valor del proceso emisor.
Recibir de 20

P1
A: proceso 15

P15

De: proceso 20

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

96

48

9. Comunicacin por mensajes


Comunicacin indirecta: puertos o buzones Los mensajes se envan a puertos: las direcciones dst y org son identificadores de puertos. Un puerto tiene un identificador nico en el sistema. El protocolo TCP/IP utiliza puertos bien conocidos que sirven para invocar servicios de red.
ftp: port 20 y 21 www: port 80 ntp: port 123

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

97

9. Comunicacin por mensajes


Comunicacin indirecta: puertos Nodo xaloc
A: Servicio ftp Puerto 20

Nodo garbi

P2
Puerto 21 Puerto 55

P1
Puerto 90 Puerto 80

P3

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

98

49

9. Comunicacin por mensajes


Comunicacin indirecta: puertos y buzones Puertos: permiten que varios procesos enven, pero slo puede haber un proceso asociado para recibir. Buzones: permiten que varios procesos se asocien para recibir. El sistema operativo selecciona qu proceso recibe el mensaje.

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

99

9. Comunicacin por mensajes


Operaciones sobre puertos
Qu proceso puede recibir del puerto? Alternativas:

a) El propietario: El proceso que lo crea es el propietario del puerto y es el nico que puede recibir o destruir el puerto. Cuando el proceso propietario finaliza, se destruyen todos los puertos que posee. Son necesarias las siguientes operaciones:
create(port): crea un puerto. destroy(port): destruye un puerto.

b) El que se vincula al puerto: El puerto pertenece al S.O. y su existencia es independiente de los procesos que lo utilizan. Cuando un proceso se vincula a un puerto, es el nico que puede recibir de l.
bind(puerto): vincula un proceso con un puerto.

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

100

50

9. Comunicacin por mensajes


Comunicacin sncrona La capacidad del enlace es cero: El enlace no almacena mensajes; no pueden existir mensajes enviados y pendientes de entrega. Cita o rendez-vous: La comunicacin slo tiene lugar cuando emisor y receptor han invocado sus operaciones respectivas send y receive. Implementacin de la cita o rendez-vous: El primer proceso que llega a la cita se suspende esperando a que el otro llegue.

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

101

9. Comunicacin por mensajes


Mensajes: Comunicacin sncrona P1
Escenario 1: send antes que receive send

P2
suspendido recv

P1
send suspendido

P2

recv Escenario 2: receive antes que send

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

102

51

9. Comunicacin por mensajes


Comunicacin asncrona
La capacidad del enlace es N: pueden haber mensajes enviados y pendientes de entrega

Variantes:
Capacidad limitada: N est acotado. Capacidad ilimitada: N no est acotado.

Sincronizacin:
Receive de enlace vaco: Opcin bloqueante: suspender al proceso que la invoca. Opcin no bloqueante : devolver un error al proceso que la invoca. Send a un enlace lleno: Opcin bloqueante: suspender al proceso que la invoca. Opcin no bloqueante : devolver un error al proceso que la invoca o perder el mensaje.

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

103

9. Comunicacin por mensajes


El problema de los Productores y Consumidores con mensajes:

Los espacios de direcciones son separados. No hay variables comunes. Versin con: Comunicacin directa. Comunicacin sncrona o asncrona (send y receive bloqueantes)

task productor; var item : elemento; repeat item := producir(); send( consumidor, item ); until false; end productor;

task consumidor; var item : elemento; repeat receive( productor, item ); consumir(item); until false; end consumidor;

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

104

52

9. Comunicacin por mensajes


El problema de los Productores y Consumidores con mensajes: Versin con:
Comunicacin directa. Comunicacin asncrona, con enlace de capacidad N (receive bloqueante, send no bloqueante)

task taskproductor; productor; var varitem item::elemento; elemento; m m::mensaje; mensaje; repeat repeat item item:= :=producir(); producir(); receive( ;; receive(consumidor, consumidor,m m)) construir_msj(m, construir_msj(m,item); item); send( consumidor, ;; send( consumidor,m m)) until false; until false; end endproductor; productor;

task taskconsumidor; consumidor; var varitem item::elemento; elemento; m m::mensaje; mensaje; i: i:integer; integer; for i:=1 ;; for i:=1to toN Ndo do send( send(productor, productor,m m)) repeat repeat receive( ;; receive(productor, productor,m m)) item item:= :=extraer_msj(m); extraer_msj(m); consumir(item); consumir(item); until untilfalse; false; end endconsumidor; consumidor;
105

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

9. Comunicacin por mensajes


Mensajes: el modelo cliente-servidor Modelo de comunicacin especialmente adecuado para sistemas distribuidos, basado en asociar un proceso servidor al recurso que se desa compartir. Existen dos patrones de comportamiento diferenciados:
Servidores: Gestionan un recurso y ofrecen servicios relacionados con el recurso. Reciben peticiones de los clientes, las ejecutan en su nombre y responden a los clientes. Clientes: Envan mensajes de peticin a los servidores y esperan respuesta.

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

106

53

9. Comunicacin por mensajes


Mensajes: el modelo cliente-servidor Nodo C peticin Nodo S

C
respuesta

WWW

CLIENT CLIENT send (serv, ;; send (serv,peticin) peticin) recv (rem, ;; recv (rem,respuesta) respuesta) ... ...

SERVIDOR SERVIDOR repeat repeat recv (serv, ;; recv (serv,peticin, peticin,) ) respuesta= respuesta=trabajar(peticin); trabajar(peticin); rem=remite(peticion); rem=remite(peticion); send (rem, send (rem,respuesta, respuesta,); ); until untilfalse; false;

Sistemas Operativos I (00-01)

Comunicacin y sincronizacin de Procesos

107

54

También podría gustarte