Procesos Sincronización

download Procesos Sincronización

of 62

description

resumen

Transcript of Procesos Sincronización

  • Repasando

    https://www.youtube.com/watch?v=Wy4NlEzARio

    Ver hasta el minuto 5

  • Procesos - Tipos

    Independientes

    Su estado no es compartido

    Son deterministas.

    Son reproducibles

    Pueden ser detenidos y re-arrancados sin ningn efecto negativo

    i.e.: programa que calcula nmeros primos

  • Procesos - Tipos

    Cooperantes

    Los procesos comparten su estado

    El funcionamiento es no determinista

    Su funcionamiento puede ser irreproducible

    i.e.: un proceso escribe abc en el terminal y otro cba

    Sirven para:

    Compartir informacin

    Acelerar clculos

    Proveer modularidad

    Por Conveniencia

  • Procesos

    Sincronizacin:

    Identificar las condiciones necesarias para que

    varios procesos compartan recursos sin que se

    produzcan problemas en el sistema.

    Seccin crtica:

    Es la porcin de cdigo en la que se accede aun recurso compartido (estructura de datos o

    dispositivo) que no debe ser accedido por ms

    de un proceso o hilo en ejecucin.

  • Procesos

    Una SC se termina en un tiempo determinado y elhilo, proceso o tarea tiene que esperar algn

    perodo de tiempo para entrar de nuevo a la

    Seccin crtica.

    Se necesita un mecanismo de sincronizacin en la entrada y salida de la seccin crtica para asegurar

    la utilizacin en exclusiva del recurso.

  • Procesos - Sincronizacin

    Se hace necesario algn sistema de comunicacincuando se requiere el uso de informacin (datos o

    estructuras) compartida entre dos o ms procesos.

    Hay momentos en que se accede a estructuras dedatos comunes a varios procesos, se sincroniza

    para que dos procesos no intenten acceder

    simultneamente a estas y que se realicen

    operaciones de lectura/escritura de forma

    incontrolada.

  • Procesos - Cooperantes

    El problema productor-consumidor

    Considere la siguiente situacin:

    El proceso A, es el responsable de observar y contar eventos.

    El proceso B, ocasionalmente imprime informe sobre el nmero de eventos observados y luego

    pone el contador de eventos en 0.

    Cul es la situacin?

  • Procesos - Cooperantes

    Supongamos que el reportero acaba de imprimir un 10, y antes de que pueda poner el contador a cero

    se produce la interrupcin de tiempo y se concede

    el control de la CPU al A.

    ste, incrementa el contador a 11.

    A continuacin, el B vuelve a tomar posesin delprocesador y pone, por fin, el a cero, lo cual

    significa que un evento (el 11) queda sin ser

    contabilizado

  • Procesos Cooperantes

    Program Cuenta_Eventos;

    Contador : INTEGER := 0;

    Process Observador;

    Repeat /* Este repeat . Forever es que se ejecuta siempre */

    Esperar_Evento;

    Contador := Contador + 1;

    forever;

    End Observador;

    Process Reportero;

    repeat

    Imprimir (Contador);

    Contador := o;

    forever;

    End Reportero;

    Begin

    Observador; /* En este momento se crea el proceso Observador */

    Reportero; /* En este momento se crea el proceso Reportero */

    end Cuenta_Eventos;

  • Procesos Condiciones de carrera

    Cuando el resultado de un clculo depende de las velocidades relativas de los procesos, se dice que

    hay una condicin de carrera.

    Se producen cuando procesos paraleloscomparten datos o recursos, como la variable

    contador del ejemplo.

  • Procesos Exclusin mutua

    Exclusin mutua:

    Es el mecanismo que asegura que slo una persona

    o proceso est haciendo algo en un instante

    determinado (los otros estn excluidos).

  • Procesos Exclusin mutua por SCProgram Cuenta_Eventos;

    Contador : INTEGER := 0;

    Process Observador;

    repeat

    Esperar_Evento;

    Entrar_SC;

    Contador := Contador + 1;

    Salir_SC;

    forever;

    End Observador;

    Process Reportero;

    Repeat

    Entrar_SC; /* Cuando pido entrar en una SC es que quiero que el CPU sea mo hasta que yo lo

    suelte */

    Imprimir (Contador);

    Contador := o;

    Salir_SC; /* Aqu se suelta el procesador */

    forever;

    End Reportero;

    begin

    Observador;

    Reportero;

    end Cuenta_Eventos;

  • Otro ejemplo

    Un proceso produce datos que son posteriormenteprocesados por otro proceso

    i.e.: el manejador de teclado y el programa querecoge los caracteres de un buffer

    Lo ms cmodo es emplear un buffer circular

  • Otro ejemplo Cdigo del productor

    El productor no puede escribir en el buffer si est lleno

    Comparte con el consumidor: el buffer y la variable contador

    do {

    ...

    produce un nuevo elemento (elemento_p)

    ...

    while (contador == MAX) haz_nada;

    buffer[indice_p] = elemento_p;

    indice_p = (indice_p + 1) % MAX;

    contador = contador + 1;

    } while (TRUE);

  • Otro ejemplo Cdigo del consumidor

    El consumidor no puede leer del buffer si est vaco

    Comparte con el productor : el buffer y la variable contador

    do {

    while (contador == 0) haz_nada;

    elemento_c = buffer[indice_c];

    indice_c = (indice_c + 1) % MAX;

    contador = contador - 1;

    ...

    consume el elemento (elemento_c)

    ...

    } while (TRUE);

  • Condiciones de carrera

    El cdigo anterior no funciona por existir condiciones

    de carrera al actualizar la variable contador

    Veamos:

    contador = contador + 1;

    Proceso 1 Suma Proceso 2 Resta

    load r0, A load r0, A

    add r0, 1 sub r0, 1

    store A, r0 store A, r0

    Problema: la modificacin de la variable contador

    no es atmica

  • Atomicidad

    Una operacin es atmica (en un sistema mono-procesador) cuando se ejecuta con las interrupciones

    deshabilitadas

    Las referencias y las asignaciones son atmicas enla mayora de los sistemas. Esto no es siempre cierto

    para matrices, estructuras o nmeros en coma

    flotante.

    Implica la indivisibilidad, debe realizarse en sutotalidad o no realizarse.

    Si el HW no proporciona operaciones atmicas,stas no pueden construirse por SW

  • Sincronizacin (de nuevo)

    Persona A

    3:00 Mira en la refri. No

    hay leche

    3:05 Va a la pulpera

    3:10 Llega a la pulpera

    3:15 Deja la pulpera

    3:20 Llega a casa y guarda

    la leche

    3:25

    3:30

    Persona B

    Mira en la refri. No hay leche

    Va a la pulpera.

    Llega a la pulpera.

    Deja la pulpera.

    Llega a casa y... Muchaleche!

  • Seccin crtica - Solucin

    Toda solucin debe cumplir tres condiciones

    Exclusin mutua

    Progreso

    Espera limitada

    Solucin general:

    do {

    protocolo de entrada

    seccin crtica

    protocolo de salida

    resto de la seccin

    } while (TRUE);

  • Exclusin mutua- Soluciones

    Se requieren las siguientes condiciones para obtener

    una buena solucin:

    Dos procesos no pueden estar al mismo tiempodentro de la misma regin crtica.

    No se deben hacer suposiciones sobre elhardware, es decir, sobre la velocidad o el nmero

    de procesadores que intervienen.

    No se deben hacer suposiciones sobre lasvelocidades relativas de los procesos.

  • Exclusin mutua- Soluciones

    Ningn proceso fuera de su regin crtica puede bloquear a otros procesos.

    Ningn proceso deber esperar eternamente a entrar en su regin crtica.

    No se debe posponer indefinidamente la decisin de cul es el siguiente proceso que debe entrar.

  • Interbloqueo Qu es?

    Un proceso esta interbloqueado si est esperando por un evento determinado que nunca va a ocurrir.

    Proceso A

    Proceso B

    Recurso 2Recurso 1

    tiene

    tiene necesita

    necesita

  • Interbloqueo - Definicin

    Interbloqueo entre dos procesos por el uso derecursos no compartibles (abrazo mortal)

    Postergacin indefinida (inanicin, bloqueoindefinido, aplazamiento indefinido o Lockout):

    cuando un proceso espera por un evento que

    puede ocurrir pero no se sabe cuando.

  • Veamos los conceptos

    http://www.youtube.com/watch?v=zKmvF0RASEg

  • Exclusin mutua- Soluciones

    Soluciones basadas en variables de control

    Soluciones basadas en instrucciones mquinaespecficas (test-and-set o swap)

    Soluciones basadas en primitivas del SO

    Soluciones basadas en regiones crticas ymonitores

  • Variables de control

    Vlidas para varios procesadores

    Suposicin: Instrucciones de carga y

    almacenamiento atmicas

  • Variables de control

    Algoritmo de Dekker

    Variables compartidas:

    Turno es entero;

    Turno = 1; /*Inicializa turno en 1*/

    La variable Turno obliga a que los procesos tengan que alternar turnos de acceso a la SC

  • Variables de control

    Algoritmo de Dekker

    Programa Uno;

    Proceso Uno Proceso Dos

    Repeat Repeat

    Hace_Cosas(); Hace_Algo();

    While turno = 2 Do; While turno = 1 Do;

    Seccin_Crtica(); Seccin _Crtica();

    turno = 2; turno = 1;

    Hace_mas_cosas(); Hace_algo_mas();

    Until Fin Until Fin

  • Algoritmos de Decker - Soluciones

    http://www.youtube.com/watch?v=oMSINASmhzg

    No ver!

  • Sincronizacin por hardware - Cerrojos

    Se hace que una variable acte como cerrojo oindicador de si la regin crtica est ocupada o no.

    Esto se puede hacer con una variable booleana que tome los valores 0 (libre) y 1 (ocupada).

    Se consigue una buena solucin con un poco deayuda hardware con la siguiente instruccin

    mquina (por lo tanto, ininterrumpible en su

    ejecucin)

    TAS (Cerrojo, Valor)

  • Sincronizacin por hardware

    El proceso que quiere entrar a la seccin crtica consulta el cerrojo. Si est libre (cerrojo==0), el

    proceso lo echa (cerrojo=1) y entra a la seccin

    crtica.

    Si est echado, ejecuta una espera activaconsultando su valor hasta que est libre.

    Cuando un proceso deja la seccin crtica, libera elcerrojo (cerrojo=0)

  • Sincronizacin por hardware

    Variable compartida cerrojo iniciada a FALSE

    do {

    while (test_and_set (&cerrojo))

    haz_nada;

    seccin crtica

    cerrojo = FALSE;

    resto de la seccin

    } while (TRUE);

  • Soluciones por hardware - SWAP

    Procedure intercambiar(var r:registro; var m:memoria); var temp;

    Begin

    temp:=m;

    m:=r;

    r:=temp

    End.

  • Sincronizacin por hardware - SWAP

    Variable compartida cerrojo iniciada a FALSE

    do {

    llave = TRUE;

    do { swap (cerrojo, llave);

    } while (llave != FALSE);

    seccin crtica

    cerrojo = FALSE;

    resto de la seccin

    } while (TRUE);

  • Sincronizacin por hardware - Ventajas

    Es aplicable a cualquier nmero de procesos ensistemas con memoria compartida, tanto de

    monoprocesador como de multiprocesador.

    Es simple y fcil de verificar.

    Puede usarse para disponer de varias seccionescrticas; cada seccin crtica puede definirse con

    su propia variable.

  • Interrupciones

    Es un mecanismo que permite ejecutar un bloquede instrucciones interrumpiendo la ejecucin de un

    programa, y luego restablecer la ejecucin del

    mismo sin afectarlo directamente.

    De este modo un programa puede ser interrumpidotemporalmente para atender alguna necesidad

    urgente del computador y luego continuar su

    ejecucin como si nada hubiera pasado.

  • Interrupciones

    Internas del hardware:

    No son modificables, por ejemplo el reloj.

    Externas de hardware:

    Activadas por evento en los perifricos, porejemplo teclados, impresoras, tarjetas de

    comunicacin, etc

    De software:

    Activadas invocando directamente elensamblador y el nmero de interrupcin.

    De excepcin: i.e. Divisin por cero

  • Sincronizacin por hardware -Interrupciones

    Un proceso se mantiene ejecutndose hasta que se solicite un

    servicio al S.O. o hasta que sea interrumpido.

    Para garantizar la exclusin mutua, es suficiente con impedir

    que un proceso sea interrumpido.

    Se utiliza el S.O. para habilitar o inhabilitar las interrupciones.

    While (cierto){/*inhabilitar interrupciones */;/* seccin critica */;/* habilitar interrupciones */;/* resto */;}

  • Interrupciones Ventajas - Desventajas

    Ventaja:

    Si se desactivan las interrupciones no sepresenta el problema de la exclusin mutua

    porque al hacerlo impedimos que ningn otro

    proceso pueda parar al que se est ejecutando.

    Desventaja:

    Si a un proceso se le olvida volver a habilitar lasinterrupciones, se hace propietario de la

    mquina y puede botar el sistema.

  • Soluciones - Semforos

    Introducidos por Dijkstra en los aos 60

    Es un tipo especial de variable que slo puede ser accedida por dos primitivas P y V

    P (semforo): operacin atmica que espera hasta

    que la variable semforo sea positiva, en este

    momento la decrementa en 1 (espera activa)

    V (semforo): operacin atmica que incrementa la variable semforo en 1

  • Semforos

    Son independientes de la mquina

    Son simples

    Pueden trabajar con varios procesos

    Pueden permitir que varios procesos entren en laseccin crtica al mismo tiempo en caso de

    necesitarse esta posibilidad

    Doble uso de los semforos:

    Exclusin mutua

    Planificacin

  • Semforos

    Restricciones:

    El consumidor espera a que haya datos en el buffer

    El productor espera a que haya buffers vacos

    Slo un nico proceso puede manipular el buffer a la vez

    Semforos:

    smf_llenos, smf_vacos y exmut

    Inicializacin:

    smf_llenos = 0

    smf_vacos = nmero_de_buffers

    exmut = 1

  • Semforos

    Productor

    do {

    P (smf_vacos);

    P (exmut);

    Produce_dato,

    V (exmut);

    V (smf_llenos);

    } while (TRUE);

    Consumidor

    do {

    P(smf_llenos);

    P (exmut);

    Consume_dato;

    V (exmut);

    V (smf_vacos);

    } while (TRUE);

    Por qu el productor hace P(smf_vacos) y V(smf_llenos)?Es importante el orden en que se ejecutan las primitivas P y V?

    Cmo podemos extender el problema si hay dos consumidores?

  • El problema de los filsofos pensadores

    El modelaje de este problema dentro del sistemaoperativo, va orientado a resolver problemas de

    recursos de entrada y salida del sistema.

    Fue propuesto pos Edsger Dijkstra pararepresentar el problema de la sincronizacin de

    procesos en un SO.

    La interpretacin est basada en pensadoreschinos, quienes coman con dos palillos, donde se

    necesita el del comensal que se siente al lado para

    poder comer.

  • La cena de los filsofos pensadores -Enunciado

    Cinco filsofos se sientan alrededor de una mesa y pasan su vida cenando ypensando. Cada filsofo tiene un plato de fideos y un palillo a la izquierda desu plato.Para comer los fideos son necesarios dos palillos y cada filsofo slo puedetomar los que estn a su izquierda y derecha. Si cualquier filsofo coge unpalillo y el otro est ocupado, se quedar esperando, con el palillo en lamano, hasta que pueda coger el otro palillo, para luego empezar a comer.Si dos filsofos adyacentes intentan tomar el mismo palillo a una vez, seproduce una condicin de carrera: ambos compiten por tomar el mismopalillo, y uno de ellos se queda sin comer.

  • Los filsofos - Analicemos

    Qu ocurre si todos los filsofos toman a la vez el palillo de la derecha?

    Todos se quedarn esperando eternamente,porque alguien debe liberar el palillo que le falta.

    Nadie lo har porque todos se encuentran en lamisma situacin (esperando que alguno deje sus

    palillos). Entonces los filsofos se morirn de

    hambre.

    Cmo denominaran esta situacin?

  • Los filsofos - Estados

    Un filsofo solo puede tener tres estados:

    Pensando

    Comiendo

    Con hambre

    Debera haber un vector de estados y otro desemforos (palillos) por el nmero de filsofos que

    hay en la mesa.

    Debera haber una variable de exclusin mutuapara entrar y salir de la seccin crtica.

    La seccin crtica del problema es?

  • Los filsofos El problema

    Ofrecer una solucin que permita a todos losfilsofos comer y pensar sin morirse de hambre.

    Un filsofo en una posicin i, en la mesa, hace losiguiente:

    while (TRUE) {

    piensa();

    tomar_tenedores(i);

    come();

    poner_tenedores(i);

    }

  • Simbologa de ifs

    == si es igual

    && significa .and. Que se cumplan ambas condiciones

    Cuando se pone (i-1) %N, es el mdulo, que es lo que me sobra de dividir un nmero entre otro, i.e.

    5%2 = 1 (es el sobrante, no el resultado)

    Cuando se usa ++, estamos sumando 1

    Cuando se usa --, estamos restando 1

  • Solucin

    Tomar-Tenedores (i) Poner-Tenedores (i) Comprobar (i)

    toma_tenedores(i

    nt i) {

    poner_tenedores(

    int i) {

    comprobar(int i)

    {

    P(exmut); P(exmut); if (estado[i] ==

    HAMBRIENTO

    &&

    estado[i] = HAMBRIENTO; estado[i] = PENSANDO; estado[(i-1)%N] !=

    COMIENDO

    &&

    comprobar(i); comprobar((i-1)%N); estado[(i+1)%N] != COMIENDO)

    {

    V(exmut); comprobar((i+1)%N); estado[i] = COMIENDO;

    P(pallillo[i]); V(exmut); V(palillo[i]);

    }

    } /* Fin de

    tomar_tenedores */

    }/* Fin de

    poner_tenedores */

    } /* Fin de

    comprobar */

  • Preguntas a responder

    Cul debera ser el valor inicial de las posicionesdel vector que contiene el semforos de los

    palillos?

    Por qu se comprueba siempre desde la SeccinCrtica.

  • Problema: En una barbera, hay M barberos y N sillas de

    espera, si un cliente entra y no hay sillas, se va.

    Por el contrario, si no hay clientes, el/los barbero/s

    duermen hasta que llegue al menos un cliente.

    Semforos:clientes: nmero de clientes en espera sin contar el queest en la silla del peluquero

    barberos: nmero de barberos inactivos

    exmut: exclusin mutua

    Variable compartida:esperando: nmero de clientes esperando

    Inicio: clientes=0 barberos=0 exmut=1

    esperando=0

    Problema del barbero dormiln

  • Proceso barbero

    do {

    P(clientes);

    P(exmut);

    esperando=esperando-1;

    V(barberos);

    V(exmut);

    /* Corta el pelo */

    } while (TRUE);

    Proceso clientes

    do {

    P(exmut);

    if (esperando < SILLAS){

    esperando=esperando+1;

    V(clientes);

    V(exmut);

    P(barberos);

    /* Se corta el pelo */

    } else {

    V(exmut);

    }

    } while (PELOLARGO);

    Problema del barbero dormiln

  • Problema: Por un puente slo pueden pasar o autos que

    suben o autos que bajan.

    Solucin:

    Variables compartidas:

    int contadorsubida = 0;

    int contadorbajada = 0;

    semaforo exmut_s, exmut_b, puente;

    Inicializacin:

    Los semforos inicialmente deben valer 1

    No se tratan los problemas de inanicin

    Problema del puente estrecho

  • Cdigo subida Cdigo bajada

    P(exmut_s);

    contadorsubida++; /*Suma

    1 */

    if (contadorsubida==1)

    P(puente);

    V(exmut_s);

    .. Se sube el puente ..

    P(exmut_s);

    contadorsubida--;

    if (contadorsubida==0)

    V(puente);

    V(exmut_s);

    P(exmut_b);

    contadorbajada++;/*Suma

    uno */

    if (contadorbajada==1)

    P(puente);

    V(exmut_b);

    .. Se baja el puente ..

    P(exmut_b);

    contadorbajada--;

    if (contadorbajada==0)

    V(puente);

    V(exmut_b);

  • Comunicacin con mensajes

    Vlido para comunicacin intermquina

    Definicin:

    Mensaje: parte de informacin que es pasada de un

    proceso a otro

    Buzn: lugar donde se depositan los mensajes desde el

    envo a la recepcin

    Operaciones sobre mensajes:

    Enviar

    Recibir

  • Comunicacin en un nico sentido: los mensajes

    fluyen en un nico sentido

    Ejemplos: Tuberas de UNIX, productor-consumidor y

    streams

    Mtodos de Comunicacin con mensajes

  • Comunicacin bidireccional: los mensajes fluyen en

    ambos sentidos

    Ejemplos: Llamadas a procedimientos remotos (RPCs), el

    modelo cliente-servidor o el de peticin-respuesta

    Mtodos de Comunicacin con mensajes

  • Comunicacin con mensajes

    Los procesos utilizan una pareja de servicios delsistema operativo para comunicarse. Estos

    servicios son conocidos habitualmente como Send

    y Receive.

    Para llevar a cabo la comunicacin un procesoejecuta la funcin Send y el otro Receive,

    intercambiando de esta forma un bloque de

    informacin que recibe el nombre de mensaje.

  • Productor:

    int mensaje1[1000];

    while (1) {

    --Preparamos el mensaje1--

    enviar(mensaje1, buzn);

    }

    Cliente:

    char resp[1000];

    envia("leer vax", buzon1);

    recibir (resp, buzon2);

    Consumidor:

    int mensaje2[1000];

    while (1) {

    recibir(mensaje2, buzn);

    --Procesamos el mensaje2--

    }

    Servidor:

    char orden[1000;

    char resp[1000];

    recibir (orden, buzon1);

    enviar (resp, buzon2);

    Ejemplos

  • Muchas aplicaciones responden a este esquema

    Las partes que se comunican pueden ser completamente

    independientes.

    Ventajas:

    Es ms difcil que se produzcan errores

    Permite que los procesos no confen entre s

    Las aplicaciones pueden ser escritas por programadores y en

    tiempos diferentes

    Los procesos pueden correr en diferentes procesadores,

    conectados a travs de una red

    Porqu utilizar mensajes