3 Sincronizacion Comm

Embed Size (px)

Citation preview

  • 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