Upload
erick-dagoberto-gonzales
View
233
Download
0
Embed Size (px)
8/6/2019 3 Sincronizacion Comm
1/95
mas
El Problema de la SeccinCrtica.
Soluciones con:Espera ocupada.Soporte hardware a lasincronizacinSoluciones conbloqueo: Semforos.
Paso de mensajes.
3
3 Sincronizacin
y comunicacin
Sincronizacin
y comunicacin
8/6/2019 3 Sincronizacion Comm
2/95
mas
Procesosindependientes
Procesosindependientes
Hasta ahora hemos hablado de procesoscomo entidades independientes:
No comparten estado (unos aislados de
los otros)Su ejecucin es determinista = laejecucin del mismo programa con los
mismos datos produce los mismosresultados.
Cada proceso puede avanzar a un ritmo
arbitrario.
8/6/2019 3 Sincronizacion Comm
3/95
mas
Procesos cooperantesProcesos cooperantes
En este tema hablaremos deprocesos/hebras que cooperan:
Comparten estado, normalmentemediante variables compartidasentre los diferentes
procesos/hebras.Ejecucin no determinista o difcilde reproducir, dado que esta
sometida a condiciones de carrera.
8/6/2019 3 Sincronizacion Comm
4/95
mas
Uso de procesoscooperantes
Uso de procesoscooperantes
Los procesos que cooperan se puedenutilizar para:
Ganar velocidad, solapando actividadeso realizando trabajo en paralelo.
Compartir informacin entre trabajos.
Estructurar mejor una aplicacin(recordar Argumento de la simplicidadvisto en Tema 1).
8/6/2019 3 Sincronizacion Comm
5/95
mas
Concurrencia yparalelismo
Concurrencia yparalelismo
El paralelismo de una aplicacin multi-procesador es el grado real de ejecucinparalela alcanzado.
Est limitado por el n de procesadoresdisponibles para la aplicacin.
La concurrencia de una aplicacin es elmximo grado de paralelismo alcanzablecon un nmero ilimitado de procesadores.
Depende de como est escrita la aplicacin y delnmero de hebras de control que puedenejecutarse simultneamente.
8/6/2019 3 Sincronizacion Comm
6/95
mas
Memoria compartidaMemoria compartida
En el tema, nos moveremos en elparadigma de memoria compartida dos ms procesos comparten memoria.
Procesos independientes
Espacio dedirecciones
delProceso 1
Espacio dedirecciones
delProceso 2
Espacio de direcciones
comn a P1 y P2 Aplicacin multihebrada
8/6/2019 3 Sincronizacion Comm
7/95mas
Cmo se puede compartirCmo se puede compartir
Procesos independientes El SO suministramedios para compartir memoria:
Unix IPC shared memory (shmget(), ...)Windows y Unix archivos proyectadosen memoria.
Aplicaciones multihebradas las hebras de
una aplicacin comparten memoria deforma natural, pues comparten el mismoespacio de direcciones.
8/6/2019 3 Sincronizacion Comm
8/95mas
Condicin de carreraCondicin de carrera
Se produce una condicin de carrera (racecondition) cuando el resultado de la
ejecucin de dos o ms procesos, quecomparten variables comunes, depende dela velocidad relativa a la que cada procesose ejecuta, es decir, del orden en el que se
ejecutan las instrucciones.
Para muestra, un botn ...
8/6/2019 3 Sincronizacion Comm
9/95mas
La carrera del 10La carrera del 10
void decremento(int i)
{
while(i > -10) {
i= i - 1;
};
printf("Hebra 2 ha
ganado\n");
}
Dos hebras ejecutan los cdigo que semuestra abajo y comparten la variablei=0 (inicialemente) Cul de ellas gana?
void incremento(int i)
{
while(i< 10) {
i= i + 1;
};
printf("Hebra 1 ha
ganado\n");
}
8/6/2019 3 Sincronizacion Comm
10/95mas
Cdigo real del ejemploCdigo real del ejemplo
#include #include
volatile INT i=0; /* eliminar optimizacin compilador*/
void Incremento(void *) {
while(i < 10) {i= i + 1;printf("Hebra 1 ha ganado\n");}
void Decremento(void *) {while (i > -10) {
i= i- 1;
printf("Hebra 2 ha gandado\n"); }
voidmain(void) {HANDLE Hebras[2]; /*ejecucin aqu*/
Hebras[0]=CreateThread(0,0,Incremento,NULL,0, NULL);Hebras[1]=CreateThread(0,0,Decremento,NULL,0, NULL);
WaitForMultipleObjects(2, handles, TRUE, INFINITE);
} /* El valor de la variable depende de la ejecucin*/
8/6/2019 3 Sincronizacion Comm
11/95mas
El productor-consumidor
Paradigma de los procesos cooperantes: elproceso productor genera informacin(bloque de disco, mensaje de red, carac-teres de teclado, etc.) que es utilizada por
el proceso consumidor (aplicacin o SO)-o a la inversa.
Productor Consumidor
bfer(finito o infinito)
8/6/2019 3 Sincronizacion Comm
12/95mas
Solucin en memoria comnSolucin en memoria comn
Vamos a dar la solucin al problema delproductor-consumidor con bfer acotado.
Datos compartidos:int n; /*tamao del bufer */
struct item {...} ;
typedef bufer {0..n-1} item;
int ent, sal: 0..n-1;ent = 0; /*inicialmente*/
sal = 0; /*inicialmente*/
8/6/2019 3 Sincronizacion Comm
13/95mas
Solucin (cont.)Solucin (cont.)
Proceso productorwhile (true) {
...produce itemp;...
while (ent+1 % n==sal) {/*nada*/};
bufer[ent]=itemP;
ent = ent+1 % n;
};
Proceso consumidorwhile (true) {
while (ent ==sal){/*nada*/};
itemC=bufer[sal];
sal = sal+1 % n;
...consume itemC;
...
};
8/6/2019 3 Sincronizacion Comm
14/95
2 i d l
8/6/2019 3 Sincronizacion Comm
15/95mas
2 versin delproductor-consumidor2 versin delproductor-consumidor
Datos compartidos:
int n; /*tamao del bufer */
struct item {...} ;
typedef bufer {0..n-1} item;
int ent, sal: 0..n-1;
ent = 0; /*inicialmente*/
sal = 0; /*inicialmente*/cont: 0..n; /*lleva la cuenta del numero
de items que hay en el bufer*/
cont := 0; /*inicialmente*/
8/6/2019 3 Sincronizacion Comm
16/95mas
Nuevo cdigoNuevo cdigo
Proceso productorwhile (true) }
...
produce itemP;...
while (cont == n){/*nada*/;
bufer[ent]=itemP;
ent=ent+1 % n;
cont= cont+1;
};
Proceso consumidorwhile (true) {
while (cont = 0)
{/nada*/};itemC=bufer[sal];
sal=sal+1 % n;
cont = cont-1;
...
consume itemC;
...
};
I l dI t l d
8/6/2019 3 Sincronizacion Comm
17/95mas
Intercalados yvariables compartidasIntercalados yvariables compartidas
Operacin n:=n+1en seudoensamblador:I11: load M into R1
I12: add 1 to R1I13: store R1 in M
Operacin n:=n-1en seudoensamblador:
I21: load M into R2I22: sub 1 to R2I23: store R2 in M
Sea inicialmente n=5:El intercalado:I11, I12 , I13 ,I21 ,I22 ,I23
dara el valor final n=Otro intercalado:I11, I21 , I12 ,I13 ,I22 ,I23dara finalmente n=4.
Otro intercalado:I21, I21 , I22 ,I23 ,I12 ,I13dara finalmente n=6. Hay condicin de
carrera !
C l i d lC l i d l
8/6/2019 3 Sincronizacion Comm
18/95mas
Conclusin de lanueva versinConclusin de lanueva versin
La correccin de la solucin depende de quetodas las declaraciones donde se manipulanvariables compartidas se ejecuten de forma
atmica (o indivisible). En este ejemplo,cont==?, cont:=cont+1 y cont:=cont-1).Conclusin: el acceso concurrente a los datoscompartidos provoca inconsistencias, salvoque dispongamos de un mecanismo paraasegurar la ejecucin ordenada de losprocesos cooperantes; esto es, que slopermita los intercalados correctos.
8/6/2019 3 Sincronizacion Comm
19/95
mas
Otro ejemploOtro ejemplo
Tendemos a pensar que solo las operaciones de ++ - producen problemas, pero stos se dan encualquier manipulacin de variables compartidas.
Un fragmento de cdigo errneo que solemos usaren los primeros ejercicios es el siguiente:
Qu intercalados se pueden producir?
var: variable compartida;
if (var > 0)
else;
x= sin(5);
y = cos(3)var = 3*x + 2*y;
Hebra_1 Hebra_2
El bl d lEl bl d l
8/6/2019 3 Sincronizacion Comm
20/95
mas
El problema de laSeccin CrticaEl problema de laSeccin Crtica
Sean n procesos compitiendo todos parausar algunos datos compartidos.Cada proceso tiene un segmento decdigo, denominado Seccin Crtica (SC),en el que accede a los datos compartidos.Problema: asegurar que cuando un procesoest ejecutando su SC, ningn otro proceso
puede ejecutarse en la suya, es decir,asegurar que mltiples instrucciones, lasSCs, parezcan una nica instruccin.
8/6/2019 3 Sincronizacion Comm
21/95
mas
Seccin crticaSeccin crtica
Hebras
Seccin crtica
8/6/2019 3 Sincronizacion Comm
22/95
mas
Estructura de la solucin
Estructura de Pi:
while (true){
entrada a seccin
seccin crtica
salida de seccin
resto de cdigo
};
Construiremos unasolucin que de la forma :
Protocolo de entrada a SC controla el acceso delos procesos a las SCs.
Protocolo de salida de la
SC notifica salida de unproceso de su SC.
Y cumpla las propiedades
1 i it d1 i it d
8/6/2019 3 Sincronizacion Comm
23/95
mas
1 requisito de unasolucin al p.s.c.1 requisito de unasolucin al p.s.c.
Exclusin mutua - Si Pi se est ejecutandoen su SC, entonces ningn Pj (con j i)
puede ejecutarse en su SC.
Secciones
crticas
Pk Pj Pi
2 i i d2 i it d
8/6/2019 3 Sincronizacion Comm
24/95
mas
2 requisito de unasolucin al p.s.c.
2 requisito de unasolucin al p.s.c.
Progreso (o libre de interbloqueo) - Si nohay Pjs en sus SCs y existe Pi que deseaentrar en su SC, entonces la seleccin de
Pi no debe posponerse indefinidamente.
Secciones
crticas
Pk Pj Pi
3 i it d3 i it d
8/6/2019 3 Sincronizacion Comm
25/95
mas
3 requisito de unasolucin al p.s.c.
3 requisito de unasolucin al p.s.c.
Espera limitada (o libre inanicin) - Debeexistir un lmite al nmero de veces quese les permite a los Pjs entrar en sus SCs
despus de que un Pi haya realizado unpeticin de entrar en la suya y antes deque peticin se satisfaga.
Seccin
crtica
Pk Pj Pi Limitada !!
Condiciones de entornoCondiciones de entorno
8/6/2019 3 Sincronizacion Comm
26/95
mas
Condiciones de entornoy propiedadesCondiciones de entornoy propiedades
Una solucin correcta al problema de la SC:No debe suponer nada a cerca de lasvelocidades relativas de los n procesos.
Supone que ningn proceso se ejecuta avelocidad cero.
+Propiedades deseables de la solucin:Imparcialidad: no hacer esperar ms a
unos que a otros.Eficiencia: no gastar ms recursos delos necesarios.Ah s!, y que sea lo ms simple posible.
Soluciones para laoluciones para la
8/6/2019 3 Sincronizacion Comm
27/95
mas
Soluciones para laExclusin Mutua
oluciones para laExclusin Mutua
Exclusin frente al hardware - Deshabilitarlas interrupciones para proteger nuestra SCde la rutina de servicio de interrupcin.
Exclusin frente a otros procesos:Espera ocupada-los procesos compruebanconstantemente si es seguro entrar a la SCBloqueo -los procesos se bloquean alintentar entrar en su SC si ya existe otroproceso dentro de la suya. Cuando elproceso deja la SC desbloquea a uno delos que esperan para entrar.
Proteccin frente alrotecc n rente a
8/6/2019 3 Sincronizacion Comm
28/95
mas
Proteccin frente alhardware
rotecc n rente ahardware
Un proceso en su SC puede verse interrum-pido por una RSI con la que comparte datos.Para proteger el acceso concurrente a las
estructuras de datos del kernel por parte delas RSIs y el propio cdigo del SO, debemosbloquear las interrupciones:
Deshabilitar_interrupciones();seccin crtica;
Habilitar_interrupciones_previas();
es a tares a tar
8/6/2019 3 Sincronizacion Comm
29/95
mas
es a tarinterrupciones
es a tarinterrupciones
Consideraciones:Las interrupciones necesitan un servicio
rpido
no interferirlas demasiado: la SCanterior debe ser lo ms breve posible.Slo bloquear las interrupciones cuyosmanejadores acceden a la seccin crtica.
Esto no suele ser siempre viable enmultiprocesadores: el coste de deshabilitar lainterrupciones en todos los procesadores esmuy elevado.
8/6/2019 3 Sincronizacion Comm
30/95
mas
Esperar o bloquear ? Esperar o bloquear ?
La respuesta depende de cuanto se va atardar
Si la SC es corta, mejor esperarSi la SC es larga, mejor bloquear
Duracin de SC medida respecto al costecambio de contexto y manejo de colas.
La mayora de los sistemas reales ofrecenambos mecanismos, y se elige uno u otroen funcin del caso.
Exclusin mutuaExclusin mutua
8/6/2019 3 Sincronizacion Comm
31/95
mas
Exclusin mutuacon espera ocupadaExclusin mutuacon espera ocupada
Soluciones software: Algoritmo de laPanadera de L. Lamport (otros algoritmos:
Dekker, Peterson, etc.). Estas solucionesno dependen de la exclusin mutua a nivelde acceso a memoria.
Soluciones con apoyo hardware: el
repertorio de instrucciones de la mquinasuministra una operacin del tipoTestAndSet.
8/6/2019 3 Sincronizacion Comm
32/95
mas
Propuesta de solucinPropuesta de solucin
Vamos a establecer diferentes soluciones alproblema de la seccin crtica con laestructura que anteriormente hemosindicado, es decir, vamos a construir losprotocolos de entrada y de salida de la SC.
Por el momento, y para simplificar, slo
vamos a suponer dos procesos, Pi y Pj.Estos procesos pueden compartir algunasvariables comunes para sincronizar susacciones.
8/6/2019 3 Sincronizacion Comm
33/95
mas
Algoritmo 1Algoritmo 1
Variables compartidas
int turno:(0..1);
turno := 0;
turno = i Pipuede entrar en su
SC.Satisface la exclusinmutua pero noprogresa.
while (true) {
while turno != i{ /*nada*/};
SeccionCritica;
turno = j;
RestoSeccion;};
Pi:
8/6/2019 3 Sincronizacion Comm
34/95
mas
Algoritmo 2Algoritmo 2
Variables compartidas
int seal[2];
seal[i] = true Pi preparado paraentrar en su SC.
Satisface la exclusinmutua pero noprogresa.
while (true) {
seal[i]= true;while seal[j]
{/*nada*/};
SeccionCritica;
seal[i]= false;RestoSeccion;
};
Pi:
8/6/2019 3 Sincronizacion Comm
35/95
mas
Problemas planteadosProblemas planteados
Algoritmo 1 - el problema se debe a que unproceso no retiene suficiente informacinsobre el estado del otro proceso.
Algoritmo 2 - la ejecucin dependecrucialmente de la exacta temporizacin delos dos procesos.
Vamos a dar una solucin que combina lasdos variables compartidas de los algoritmosanteriores.
Al i
8/6/2019 3 Sincronizacion Comm
36/95
mas
while (true) {
seal[i]= true;
turno = j;while (seal[j]
and turno=j){ /*nada*/};
SeccionCritica;seal[i]= false;
RestoSeccion;
};
Algoritmo 3Algoritmo 3
Variables compartidas:
int seal[2];
int turno=(0..1);Satisface los tres re-quisitos; resuelve el
problema de la SC parados procesos.
Pi:
Algoritmo de LamportAlgoritmo de Lamport
8/6/2019 3 Sincronizacion Comm
37/95
mas
Algoritmo de Lamport(para 2 procesos)
Algoritmo de Lamport(para 2 procesos)
a while (true) {
b seal[1]=true;
c turno=0;
d while (seal[0]and turno=0){/*nada*/};
e SC;
f seal[1]=false;g RS;
};
1 while (true) {
2 seal[0]=true;
3 turno=1;
4 while (seal[1]and turno=1){/*nada*/};
5 SC;
6 seal[0]=false;7 RS;
};
Alg Lamport Cdigo deAlg Lamport: Cdigo de
8/6/2019 3 Sincronizacion Comm
38/95
mas
Alg. Lamport: Cdigo dela Hebra i-simaAlg. Lamport: Cdigo dela Hebra i-sima
void CountThread(int i){int k, x, int j = 1 - i;senal[i] = true;turno = j;
while ( senal[j] & (turno == j))cout
8/6/2019 3 Sincronizacion Comm
39/95
mas
Algoritmo de Lamport:Programa principalAlgoritmo de Lamport:Programa principal
volatile INT count;bool senal[2];int turno;void main (void){handles[0]=CreateThread(0, 0, CountThread,
(void *) 0, 0, NULL);handles[1]=CreateThread(0, 0, CountThread,
(void *) 1, 0, &threadID);
WaitForMultipleObjects(2, handles,TRUE,INFINITE);cout
8/6/2019 3 Sincronizacion Comm
40/95
mas
gor tmo e aPanadera: n procesos
gor tmo e aPanadera: n procesos
Antes de entrar en su SC, el proceso recibeun nmero de tique. Entra en la SC elproceso con menor nmero de tique.
Si Pi y Pj , con i
8/6/2019 3 Sincronizacion Comm
41/95
mas
Algoritmo (cont.)Algoritmo (cont.)
Notacin: < orden lexicogrfico (#tique, #pid)(a,b) < (c,d) si a
8/6/2019 3 Sincronizacion Comm
42/95
mas
Cdigo para Pi (cont.)Cdigo para Pi (cont.)
repeatelec[i]:=true;num[i]:=max(num[0],...,num[n-1])+1;elec[i]:=false;
for j:=0 to n-1 do beginwhile elec[j] do no-op;while num[j]0 and
(num[j],j)
8/6/2019 3 Sincronizacion Comm
43/95
mas
Sincronizacin hardwareSincronizacin hardware
Se simplifica la solucin con una funcinhardware que compruebe y modifique elcontenido de una palabra de memoriaatmicamente (el hardware garantiza laatomicidad de las dos asignaciones).
function TestAndSet(var objetivo:
boolean):boolean;beginTestAndSet := objetivo;objetivo:= true;
end;
Exclusin mutuaExclusin mutua
8/6/2019 3 Sincronizacion Comm
44/95
mas
Exclusin mutuacon TestAndSetExclusin mutuacon TestAndSet
Datos compartidos:int cerrojo: boolean
cerrojo := falso
Proceso Pi:while (true) {
while TestAndSet(cerrojo) {/*nada*/};
SeccionCritica;
cerrojo = falso;};
Cerrojo de esperaCerrojo de espera
8/6/2019 3 Sincronizacion Comm
45/95
mas
Cerrojo de esperaocupada
Cerrojo de esperaocupada
Con TestAndSet podemos construir unmecanismo de sincronizacin denominadocerrojo de espera ocupada (spin lock).
Cuando un proceso no puede entrar en suSC espera en un bucle.El problema del mecanismo es que la
espera no esta acotada.En monoprocesadores, un proceso con uncerrojo de espera ocupada no puede cederla CPU,por qu?
S i l kS i l k
8/6/2019 3 Sincronizacion Comm
46/95
mas
Spin lockSpin lock
Las primitivas para el cerrojo son:void spin_lock (spinlock_t *s) {
while (test_and_set (s) != 0);
}void spin_unlock (spinlock_t *s) { *s =0 }
Re-escribimos la solucin de la SC como:
spinlock_t s;spin_lock (&s);seccin crtica;
spin_unlock (&s);
S
8/6/2019 3 Sincronizacion Comm
47/95
mas
Soluciones con bloqueoSoluciones con bloqueo
Existen multitud de primitivas desincronizacin que implican algntipo de bloqueo, como son:
Regiones crticasMonitoresTransacciones atmicas, etc.
Nosotros estudiaremos con detalle:SemforosPaso de mensajes
8/6/2019 3 Sincronizacion Comm
48/95
mas
SemforosSemforos
Definicin e implementacin
Solucin a problema de laexclusin mutua
Problemas clsicos desincronizacin y sus
soluciones con semforos.
SS f
8/6/2019 3 Sincronizacion Comm
49/95
mas
SemforosSemforos
Semforo =variable entera accesible slo atravs de las operaciones atmicas:
wait(S): s := s - 1;
if s
8/6/2019 3 Sincronizacion Comm
50/95
mas
Semforos (cont.)Semforos (cont.)
suspende(S) -operacin del SO que bloqueaal proceso que la invoca. El proceso seencola en una cola asociada al semforo S.
reanuda(S) -reanuda la ejecucin de unnico proceso que invoc a suspende(S).Observaciones:
La nica forma de manipular la variable
semforo es a travs de las operacioneswait y signal ! Slo podemos asignar el valor de S(positivo) en su creacin !
Seccin crticaSeccin crtica
8/6/2019 3 Sincronizacion Comm
51/95
mas
Seccin crticapara n procesosSeccin crticapara n procesos
Cdigo del proceso Pi:
semaforo_t mutex=1;
/*Asignar valor solo en declaracin*/while (true) {
wait(mutex);
SeccionCritica;
signal(mutex);
RestoSeccion;
};
Ejemplo de contador:Ejemplo de contador:
8/6/2019 3 Sincronizacion Comm
52/95
mas
Ejemplo de contador:main
Ejemplo de contador:main
void main(void) {
HANDLE handles[2], semaforo;
DWORD threadID;
semaforo = CreateSemaphore(0,1,1,0);
handles[0]=CreateThread(0, 0, CountThread,
(void *) 250000, 0, &threadID);
handles[1]=CreateThread(0, 0, CountThread,
(void *) 250000, 0, &threadID);
WaitForMultipleObjects(2, handles, TRUE, INFINITE);
cout
8/6/2019 3 Sincronizacion Comm
53/95
mas
Ejemplo de contador:hebra
Ejemplo de contador:hebra
void CountThread(int i) {
int k, x;
LONG ContadorSemaforo;
WaitForSingleObject(semaforo, INFINITE);
for (k=0; k
8/6/2019 3 Sincronizacion Comm
54/95
mas
Implementacin dewaity signalImplementacin dewaity signal
wait y signal deben ser atmicas.
Monoprocesadores, habilitar/ deshabilitarlas interrupciones al principio/fin delcdigo que implementa las operaciones.
Multiprocesadores:Sin apoyo hardware -solucin software
al problema de la SC (SCs=wait y signal)Con apoyo hardware - TestAndSet osimilar.
Ejemplo: implementacinEjemplo: implementacin
8/6/2019 3 Sincronizacion Comm
55/95
mas
Ejemplo: implementacinde wait con TestAndSetEjemplo: implementacinde wait con TestAndSet
Implementacin de wait utilizandoTestAndSet:int cerrojo = false;
while TestAndSet(cerrojo) {/*nada*/};S=S-1;if (S < 0) {
cerrojo = false;bloquea(S);
} elsecerrojo = falso;
Existe condicin de carrera!!
Sincronizacin conncron zac n con
8/6/2019 3 Sincronizacion Comm
56/95
mas
Sincronizacin consemforos
ncron zac n consemforos
Los semforos pueden usarse comoherramienta general de sincronizacin: siqueremos ejecutar SeccionB en Pj slodespus de que se ejecute SeccionA en P
inecesitamos un semforo, bandera=0 :
Cdigo de Pi Cdigo de Pj... ...
SeccionA wait(bandera)signal(bandera) SeccionB1 2
I t bl
8/6/2019 3 Sincronizacion Comm
57/95
mas
Interbloqueo
Se produce interbloqueo (deadlock) cuandodos o ms procesos esperan indefinida-mente por un suceso que debe ser
provocado por uno de los procesos queesperan.
Proceso A ProcesoB
Recurso2Recurso1
Posee
Solicita
Volveremos sobre esto en SOII
8/6/2019 3 Sincronizacion Comm
58/95
mas
Interbloqueo y semforosInterbloqueo y semforos
Con ellos es fcil producir interbloqueosSean los semforos S y Q inicializados a 1.
P0 P1wait(S) wait(Q)wait(Q) wait(S)... ...signal(S) signal(Q)
signal(Q) signal(S)Solucin: usar siempre el mismo orden paralos semforos en todos los procesos.Problema: no siempre es posible hacerlo.
I i iI i i
8/6/2019 3 Sincronizacion Comm
59/95
mas
InanicinInanicin
Inanicin -un proceso nunca ser eliminadode la cola del semforo en el cual estasuspendido.
Diferencia entre inanicin e interbloqueo:En la inanicin, no es cierto que el procesono obtendr nunca el recurso (el procesoespera por algo que siempre que est
disponible no le es asignado, p. ej., por subaja prioridad); en el interbloqueo, si.En la inanicin, el recurso bajo contencinesta en uso continuo; en el interbloqueo,
no.
Ti d fTi d f
8/6/2019 3 Sincronizacion Comm
60/95
mas
Tipos de semforosTipos de semforos
Semforo contador -valor entero quepuede variar en un dominio no restringido uso: existen varias instancias de un
recurso.Semforo binario -valor entero que slopuede variar entre 0 y 1 (seguridad!)
wait(Sbin): if (S==1) S = 0;
else suspende(S);signal(Sbin): if (cola_vacia) S= 1;
else reanudar(S);
mp emen ac n e unf d
mp emen ac n e unf d
8/6/2019 3 Sincronizacion Comm
61/95
mas
mp emen ac n e unsemforo contador consemforos binarios (i)
mp emen ac n e unsemforo contador consemforos binarios (i)
Se puede implementar un semforocontador (S) a travs de semforosbinarios, Si.
Para ello necesitamos tres semforosbinarios.semaforo_binarios S1, S2, S3;
int C;
Valores iniciales:S1 = S3 = 1; S2 = 0;
C = valor inicial del semforo S.
f t df t d
8/6/2019 3 Sincronizacion Comm
62/95
mas
semforo contador consemforos binarios (ii)
semforo contador consemforos binarios (ii)
Operacin wait (S):
wait(S3);
wait(S1);
C = C - 1;if C < 0 {
signal(S1);
wait(S2);
}else signal(S1);signal(S3);
Op. signal(S):
wait(S1);
C = C + 1;if C 0 {signal(S2) };
signal(S1);
;
Limitaciones de losm tac ones e os
8/6/2019 3 Sincronizacion Comm
63/95
mas
Limitaciones de lossemforos
m tac ones e ossemforos
Uso no forzado, slo por convencin.No son un mecanismo de comunicacin.No esta limitado el tiempo que un proceso
puede estar bloqueado en un semforo.Normalmente, no poseen una operacinpara saber el estado sin exponernos a un
bloqueo....En general, son mecanismo de bajo nivel.
Problemas clsicos deProblemas clsicos de
8/6/2019 3 Sincronizacion Comm
64/95
mas
Problemas clsicos desincronizacinProblemas clsicos desincronizacin
Problema del productor-consumidor -modela la relacin de un proceso queconsume la informacin generada por otro.
Problema de los lectores y escritores -modela la manipulacin de datoscompartidos por procesos con diferentespatrones de acceso: unos que los leen
(lectores) y otros los escriben (escritores)Problema de los filsofos comensales -modela la comparticin simultnea devarios recursos por varios procesos.
Condiciones delCondiciones del
8/6/2019 3 Sincronizacion Comm
65/95
mas
Condiciones delProductor-consumidorCondiciones delProductor-consumidor
1. El productor no debe poner un tem en elbfer cuando esta totalmente llenosincronizacin - semforo vacio
cuenta los items vacos. Inicializado a N.2. El consumidor no puede eliminar un temdel bfer si este no tiene elementos. Sincronizacin - semforo lleno cuenta
los items llenos. Inicializado a 0.3. Productor y consumidor no debe escribir leer en/de el mismo item a la vez.Exclusin mutua -> semforomutex=1.
Productor-consumidor:Productor-consumidor:
8/6/2019 3 Sincronizacion Comm
66/95
mas
Productor consumidor:cdigoProductor consumidor:cdigo
Productorwhile (true) {
produce itemP;
wait(vacio);wait(mutex);
bufer[i]=itemP;
i=i+1;
signal(mutex);signal(lleno);
};
Consumidorwhile (true) {
wait(lleno);
wait(mutex);itemC=bufer[i];
i=i-1;
signal(mutex);
signal(vacio);consume itemC;
};
Ejemplo: productor-Ejemplo: productor-
8/6/2019 3 Sincronizacion Comm
67/95
mas
Ejemplo: productorconsumidorEjemplo: productorconsumidor
voidpush(int valor){
NODO *temp;
temp = new NODO;
temp->dato = valor;
temp->siguiente =
cima;
cima = temp;}
typedef struct _NODO
{
int dato;
_NODO *siguiente;
} NODO;
intpop() {
NODO *temp;
int valor;
if (cima==0){
return 0;
}
temp = cima;
valor = cima->dato;
cima = cima->siguiente;
delete temp;
return valor;}
Ejemplo: cdigo delEjemplo: cdigo del
8/6/2019 3 Sincronizacion Comm
68/95
mas
Ejemplo: cdigo delconsumidorEjemplo: cdigo delconsumidor
VOID Consumidor(VOID) {int x, p;LONG contador;for (x=0; x
8/6/2019 3 Sincronizacion Comm
69/95
mas
Ejemplo: cdigo delproductorEjemplo: cdigo delproductor
VOID Productor(VOID) {int x;LONG contador;for (x=0; x
8/6/2019 3 Sincronizacion Comm
70/95
mas
Ejemplo: programaprincipal
emp o: programaprincipal
void main(void) {HANDLE des[numH];DWORD hebraID;//Creamos los semaforosMutexEscritura = CreateSemaphore (0,1, 1, 0);
MutexNodo = CreateSemaphore (0,1, 1, 0);Lleno = CreateSemaphore(0, 0, MAX_BUFERS, 0);Vacio = CreateSemaphore(0,MAX_BUFERS, MAX_BUFERS,0);des[0]=CreateThread(0, 0,Consumidor, 0, 0, 0);des[1]=CreateThread(0, 0,Productor, 0, 0, 0);WaitForMultipleObjects(numH, des, TRUE,INFINITE);
// Destruimos los semaforosCloseHandle(Lleno);CloseHandle(Vacio);CloseHandle(MutexNodo);CloseHandle(MutexEscritura);} //Aqu para ejecutar.
Problema de los lectores-
8/6/2019 3 Sincronizacion Comm
71/95
mas
Problema de los lectoresescritores
Los escritores necesitan un acceso exclusivoa los datos compartidos. La lectura noplantea problemas.
Cualquier solucin involucra primar a untipo de proceso frente al otro:No hacer esperar a los lectores salvo que
un escritor haya obtenido permiso para
usar el objeto compartido.-Si un escritor espera para acceder a unobjeto no se permiten nuevas lecturas.
Cualquier solucin puede provocar
inanicin.
o uc n a pr mero uc n a pr mer
8/6/2019 3 Sincronizacion Comm
72/95
mas
o uc a p eproblema
o uc a p eproblema
int mutex:semaforo:=1 /*mutex var clec*/wrt:semaforo:=1 /*mutex escritores*/
clec:integer:=0 /*#lectores actual*/
u Escritorwait(wrt);
escribir;signal(wrt);
u Lectorwait(mutex);clec:=clec+1;if (clec=1) wait(wrt);
signal(mutex);
leer;wait(mutex);clec:=clec-1;if (clec=0) signal(wrt);signal(mutex);
Ejemplo: cdigo deEjemplo: cdigo de
8/6/2019 3 Sincronizacion Comm
73/95
mas
Ejemplo: cdigo deescritores
je p o cd go deescritores
void HebraEscritora(INT id) {while (1) {
// Simular el procesamiento de escritura
Sleep(GetTickCount() % 1000);
// El escritor necesita escribir
cout
8/6/2019 3 Sincronizacion Comm
74/95
mas
Ejemplo: cdigo lectoresEjemplo: cdigo lectores
void HebraLectora(INT id) {while (1)Sleep(GetTickCount() % 100);WaitForSingleObject(mutex, INFINITE);
ContadorLectores++;if (ContadorLectores==1)WaitForSingleObject(write, INFINITE);
ReleaseMutex(mutex);cout
8/6/2019 3 Sincronizacion Comm
75/95
Los filsofos comensalesLos filsofos comensales
8/6/2019 3 Sincronizacion Comm
76/95
mas
Los filsofos comensalesLos filsofos comensales
5 filsofos se pasaban lavida pensando y comiendo.La comida la hacan en una
mesa con cinco platos yslo cinco tenedores. Paracomer se necesitaban dostenedores a la vez.
Usamos los datoscompartidos:int tenedor[4]:semaforos;
t0
F1
F2F3
F4
t1
t4
t3
t2
F0
1 solucin1 solucin
8/6/2019 3 Sincronizacion Comm
77/95
mas
1 solucin1 solucin
Filsofo Fiwhile (true) {
wait(tenedor[i]);
wait(tenedor[i+1 % 5]);
comer;
signal(tenedor[i]);
signal(tendor[i+1 % 5]);
pensar;
};
Solucin potencialmente interbloqueante.
Ejemplo de los filsofosEjemplo de los filsofos
8/6/2019 3 Sincronizacion Comm
78/95
mas
Ejemplo de los filsofosEjemplo de los filsofos
VOID Filosofo(LPVOID id) {int izqdo = (int) id;int dercho = (izqdo + 1) % NFILOSOFOS;while(1){
WaitForSingleObject(hMutexTenedor[izqdo],INFINITE);printf("Filosofo #%d:coge tenedor izquierdo\n",(int)id);WaitForSingleObject(hMutexTenedor[dercho],INFINITE);printf("Filosofo #%d:coge tenedor derecho y comienza
a comer\n",(int) id);
ReleaseMutex(hMutexTenedor[izquierdo]);ReleaseMutex(hMutexTenedor[derecho]);printf("Filosofo #%d: libera tenedores y comienza apensar\n",(int) id);
}}
Programa principalPrograma principal
8/6/2019 3 Sincronizacion Comm
79/95
mas
Programa principalPrograma principal
#define NFILOSOFOS 5
HANDLE hMutexTenedor[NFILOSOFOS];
//Aqu ejecutarvoidmain() {
HANDLE hVectorHebras[NFILOSOFOS];DWORD IDHebra;int i;for (i=0; i
8/6/2019 3 Sincronizacion Comm
80/95
mas
Ejemplo de interbloqueoEjemplo de interbloqueo
Ejecucinnormal
nterbloqueo
Soluciones libres deo uc ones res e
8/6/2019 3 Sincronizacion Comm
81/95
mas
bloqueobloqueo
Permitir que solo cuatro filsofos estnsentados simultneamente.Permitir a un filsofo coger su tenedorslo si ambos estn libres (=coger
tenedor es una seccin crtica).Solucin asimtrica: filsofo par cogetenedores izquierdo-derecho, filsofoimpar coge tenedores derecho-izquierdo.
Una solucin libre de bloqueo no eliminanecesariamente la posibilidad deinanicin.
Paso de mensajesPaso de mensajes
8/6/2019 3 Sincronizacion Comm
82/95
mas
Paso de mensajesPaso de mensajes
Red
SO
P2 P3 P4P1
La comunicacin entre procesos (IPC-Inter-Process Comunication) mediante paso demensajes es necesaria cuando los procesos
no comparten memoria comn (nocomparten variables comunes).
Paso de mensajes yi id
Paso de mensajes yi tid
8/6/2019 3 Sincronizacion Comm
83/95
mas
j ymemoria compartida
j ymemoria compartida
Los sistemas de mensajes y de memoriacompartida no son mutuamenteexclusivos. Estos pueden utilizarsesimultneamente dentro de un SO o unnico proceso.El paso de mensajes entre procesos en lamisma mquina puede implementarse con
memoria compartida.La memoria compartida puede tambinimplementarse con mensajes.
Primitivas de paso dej
Primitivas de paso dej
8/6/2019 3 Sincronizacion Comm
84/95
mas
pmensajes
pmensajes
send(mensaje)-enva un mensaje.
receive(mensaje)-recibe un mensaje. Si nohay mensajes disponibles se bloquea.
Si los procesos P y Q desean comunicarse:1.Establecer un enlace de comunicacin.
2. Intercambiar mensajes va send/receive.
Un enlace de comunicacin tiene una:implementacin fsica: bus, memoria, etc.implementacin lgica: propiedades
lgicas
Cuestiones dei l iCuestiones dei l t i
8/6/2019 3 Sincronizacion Comm
85/95
mas
implementacinimplementacin
Cmo se establecen los enlaces?
Puede un enlace asociarse con ms de dosprocesos?
Cuantos enlaces pueden existir entre cadapar de procesos comunicantes?
Cul es la capacidad del enlace?
El tamao del mensaje que el enlace puedeacomodar es fijo o variable?
Es un enlace unidireccional o bidireccional?
Tipos de comunicacinTipos de comunicacin
8/6/2019 3 Sincronizacion Comm
86/95
mas
Tipos de comunicacinTipos de comunicacin
Podemos establecer dos categoras en laforma en que los procesos se comunican:
Comunicacin directa -los procesos
comunicantes se nombran explcita-mente uno a otro en las operaciones depaso de mensajes. Ej. enviar carta.
Comunicacin indirecta -los procesos
intercambian mensajes a travs de unbuzn. Ej. enviar carta a un apartadode correos.
Comunicacin directaComunicacin directa
8/6/2019 3 Sincronizacion Comm
87/95
mas
Comunicacin directaComunicacin directa
Los procesos utilizan las primitivas:
send(P,mensaje)- enva mensaje a P
receive(Q,mensaje)-recibe mensaje de Q
Propiedades del enlace:
se establece automticamente.
asociado a un par de procesos.
exactamente un enlace por par deprocesos.
Unidireccional o bidireccional.
El productor-consumidord j
El productor-consumidord j
8/6/2019 3 Sincronizacion Comm
88/95
mas
pcon paso de mensajes
pcon paso de mensajes
Productor:repeat
produce item en nextp;
send(consumidor, nextp);until false;
Consumidor:
repeat
receive(productor, nextp);
consume item de nextp;
until false;
Comunicacin indirectaComunicacin indirecta
8/6/2019 3 Sincronizacion Comm
89/95
mas
Comunicacin indirectaComunicacin indirecta
Los mensajes se dirigen/se reciben de unbuzn (o tambin denominado puerto).
Cada buzn tiene un identificador nico.
P y Q deben compartir el buznPropiedades del enlace:
Asociado con muchos procesos.
Varios enlaces por par de procesos.Unidireccional o bidireccional.
Varios procesos comparten enlace quinlee un mensaje?
BferingBfering
8/6/2019 3 Sincronizacion Comm
90/95
mas
BferingBfering
Bfering -cola de mensajes ligada alenlace.
Tres formas de implementarlo:
Capacidad cero -- emisor espera alreceptor (cita o rendezvous).
Capacidad limitada -el emisor espera si
el enlace esta lleno.Capacidad ilimitada -el emisor nuncaespera.
Condiciones dei
on c ones ei
8/6/2019 3 Sincronizacion Comm
91/95
mas
excepcinexcepcin
El paso de mensajes puede producir fallos son necesarios mecanismos pararecuperarnos de ellos, denominados gestin
de condiciones de excepcin.Terminacin de procesos -Qu ocurre siproceso termina antes de procesar mensaje?
Perdida de mensajes por falta de fiabilidadde la red Se pueden establecer un plazo.
Mensajes corruptos -Deteccin: suma decomprobacin; solucin: retransmisin.
Terminacin de procesosTerminacin de procesos
8/6/2019 3 Sincronizacion Comm
92/95
mas
Terminacin de procesosTerminacin de procesos
El emisor P termina y el receptor Q espera(se bloquea) para siempre. Soluciones:
El sistema operativo termina a Q.
El SO notifica a Q de la terminacin de P.Q tiene un mecanismo interno(cronmetro) que determina cuanto debeesperar por mensaje de P.
P enva mensaje y Q termina. Soluciones:El sistema notifica a P.El sistema termina a P.P y Q utilizan reconocimiento con plazos.
Perdida de mensajesPerdida de mensajes
8/6/2019 3 Sincronizacion Comm
93/95
mas
Perdida de mensajesPerdida de mensajes
Frente a la perdida de mensajes tenemosvarias alternativas:
El SO garantiza la retransmisin.
El emisor es responsable de detectarlautilizando plazos.
El emisor obtiene una excepcin.
Mensajes corruptosMensajes corruptos
8/6/2019 3 Sincronizacion Comm
94/95
mas
Mensajes corruptosMensajes corruptos
Los mensajes que llegan al receptor desdeel emisor pueden estar mezclados odeteriorados debido al ruido de canal de
comunicacin.Soluciones:
Necesidad de un mecanismo de deteccin
de errores, como checksum, para detectarcualquier error.
Necesidad de mecanismo de recuperacinde errores, p. ej. retransmisin.
El prximo temaEl prximo tema
8/6/2019 3 Sincronizacion Comm
95/95
El prximo tema ...El prximo tema ...
... podemos ir vindolo en en:
Stallings: Temas 7 y 8.
Tambin en Silberschatz: Temas 8 y 9