SINCRONIZACIÓN DE PROCESOS
EL PROBLEMA DE LA SECCIÓN CRÍTICA

   Cada proceso tiene un
    segmento de código, llamado
    sección crítica, en el que el
    proceso puede modificar
    variables comunes, actualizar
    una tabla, escribir en un
    archivo, etc.

   Dos procesos no pueden
    ejecutar su sección crítica al
    mismo tiempo.
EL PROBLEMA DE LA SECCIÓN CRÍTICA
   Cualquier solución a este problema deberá tener
    3 requisitos:

       Exclusión mutua. Si el proceso P está
        ejecutándose en su sección crítica, los demás
        procesos no pueden estar ejecutando sus
        secciones críticas.
EL PROBLEMA DE LA SECCIÓN CRÍTICA

    Progreso. Si ningún proceso está ejecutando
     su sección crítica y algunos procesos desean
     entrar en sus correspondientes secciones
     críticas, sólo aquellos procesos que no estén
     ejecutando sus secciones restantes pueden
     participar en la decisión de cuál será el
     siguiente que entre en su sección crítica, y esta
     selección no se puede posponer
     indefinidamente.
EL PROBLEMA DE LA SECCIÓN CRÍTICA

    Espera limitada. Existe un límite en el
     número de veces que se permite que otros
     procesos entren en sus secciones críticas
     después de que un proceso haya hecho una
     solicitud para entrar en su sección crítica y
     antes de que la misma haya sido concedida.
EL PROBLEMA DE LA SECCIÓN CRÍTICA
   En un instante pueden estar activos varios
    procesos en modo kernel en el sistema, pudiendo
    producir posibles condiciones de carrera.

   Se usan dos métodos generales para gestionar las
    secciones críticas en los sistemas operativos,
    cuando se encuentran ejecutando en modo kernel:

       Kernels apropiativos. Un kernel apropiativo
        permite que un proceso sea desalojado mientras se
        está ejecutando. Debe ser diseñado para asegurar que
        los datos compartidos del kernel no se vean afectados
        por posibles condiciones de carrera de los procesos.
EL PROBLEMA DE LA SECCIÓN CRÍTICA

       Kernels no apropiativos. Un kernel no apropiativo
        no permite que un proceso que se esté ejecutando en
        modo kernel sea desalojado; se ejecutará hasta que
        salga de dicho modo, hasta que se bloquee o hasta
        que ceda voluntariamente el control de la CPU.


   Ejemplos:
     No apropiativos: Windows XP, 2000, UNIX
      tradicional, Linux versiones previas a 2.6
     Apropiativos: Linux a partir de 2.6, SOLARIS
SOLUCIÓN DE PETERSON
   No hay garantías de que la solución de Peterson
    funcione correctamente en arquitecturas
    informáticas modernas.

   La solución de Peterson se restringe a dos
    procesos que van alternando la ejecución de sus
    secciones críticas y de sus secciones restantes: Pi,
    Pj.

   Esta solución requiere 2 estructuras de datos:
SOLUCIÓN DE PETERSON
   La estructura del proceso Pi
SOLUCIÓN DE PETERSON
   Para demostrar que esta solución es correcta, se
    tiene que cumplir que:

     La exclusión mutua se conserva.
     El requisito de progreso se satisface.
     El requisito de espera limitada se cumple
HARDWARE DE SINCRONIZACIÓN
   Las regiones críticas deben protegerse mediante
    cerrojos.

   Un proceso debe colocar un cerrojo antes de
    entrar en sección crítica y liberarlo cuando salga
    de la misma.

   Se deben implementar funciones a nivel de
    instrucciones de máquina que cumplan con los 3
    requisitos para resolver el problema de la sección
    crítica.
SEMÁFOROS
   Son herramientas más simples de implementar que
    los cerrojos por instrucciones de hardware.

   Un semáforo es una variable entera a la que sólo se
    puede acceder por 2 operaciones: wait() y signal().




   Pueden ser semáforos binarios (cerrojos mútex) o
    semáforos contador.
SEMÁFOROS
   Se puede usar semáforos binarios para abordar el
    problema de la sección crítica en el caso de
    múltiples procesos, usando un semáforo mútex,
    inicializado con el valor 1 y cada proceso Pi se
    organiza de esta forma:
SEMÁFOROS

   Los semáforos contadores se pueden usar para
    controlar el acceso a un recurso formado por un
    número finito de instancias.

   El semáforo se inicializa con el número de
    recursos disponibles.

   Cada proceso que desee usar el recurso ejecuta
    una operación wait () en el semáforo
    (decrementando la cuenta).
SEMÁFOROS

   Cuando un proceso libera el recurso, ejecuta una
    operación signal () (incrementando la cuenta).

   Cuando la cuenta del semáforo llega a 0, todos las
    instancias del recurso estarán en uso. Los
    procesos que deseen usar una instancia del
    recurso se bloquearán hasta que la cuenta sea
    mayor que 0.
PRINCIPALES PROBLEMAS DE
SINCRONIZACIÓN

   Problema del buffer limitado

   Problema de los lectores – escritores
       Los procesos escritores tengan acceso exclusivo a la
        base de datos compartida.

       El primer problema de los lectores-escritores,
        requiere que ningún lector se mantenga en espera a
        menos que un escritor haya obtenido ya permiso.
PRINCIPALES PROBLEMAS DE
SINCRONIZACIÓN

       El segundo problema de los lectores-escritores
        requiere que, una vez que un escritor está preparado,
        dicho escritor realice la escritura tan pronto como sea
        posible


   Problema de la cena de los filósofos

       Considere cinco filósofos que gastan sus vidas en
        pensar y comer. Los filósofos comparten una mesa
        redonda con cinco sillas, una para cada filósofo. En el
        centro de la mesa hay una fuente de arroz y la mesa
        se ha puesto con sólo cinco palillos
   Cuando un filósofo piensa, no se relaciona con sus colegas.
    De vez en cuando, un filósofo siente hambre v trata de
    tomar los palillos más próximos a él (los palillos que se
    encuentran entre él y sus vecinos de la izquierda y la
    derecha).
   Un filósofo sólo puede coger un palillo cada vez.
    Obviamente, no puede coger un palillo que esté en manos
    de un vecino de mesa.
   Cuando un filósofo hambriento ha conseguido dos palillos,
    come sin soltar sus palillos. Cuando termina de comer, los
    coloca de nuevo sobre la mesa y vuelve a pensar
PRINCIPALES PROBLEMAS DE
SINCRONIZACIÓN
   Formas de corregir los problemas de sincronización.

       Los monitores proporcionan mecanismos de sincronización
        para compartir tipos abstractos de datos.

       Las variables de condición proporcionan un método
        mediante el que un procedimiento de un monitor puede
        bloquear su ejecución hasta recibir la señal de que puede
        continuar.

       Solaris, Windows XP y Linux proporcionan mecanismos
        como semáforos, mútex, bloqueos mediante bucles sin fin y
        variables de condición para controlar el acceso a datos
        compartidos.
PRINCIPALES PROBLEMAS DE
SINCRONIZACIÓN

    Transacciones atómicas

        Una transacción es una unidad de programa que se debe
         ejecutar atómicamente; es decir, todas las operaciones
         asociadas con ella se ejecutan hasta completarse, o no se
         ejecuta ninguna de las operaciones.

        Para asegurar la atomicidad a pesar de los fallos del
         sistema, podemos usar un registro de escritura anticipada.
PRINCIPALES PROBLEMAS DE
SINCRONIZACIÓN

      Todas las actualizaciones se escriben en el registro, que se
       almacena en un medio de almacenamiento estable.

      Si se produce un fallo catastrófico del sistema, la informa-
       ción contenida en el registro se usa para restaurar el estado
       de los elementos de datos actualizados (undo y redo).

      Para disminuir el trabajo de buscar en el registro después
       de haberse producido un fallo del sistema, podemos usar un
       mecanismo de puntos de comprobación (checkpoint).
PRINCIPALES PROBLEMAS DE
SINCRONIZACIÓN

    Los métodos más utilizados para el control de
     transacciones concurrentes son:

        Protocolos de bloqueo (uso de cerrojos)

        Esquemas de ordenación mediante marcas temporales
         (timestamp).

6 sincronizacion de_procesos

  • 1.
  • 2.
    EL PROBLEMA DELA SECCIÓN CRÍTICA  Cada proceso tiene un segmento de código, llamado sección crítica, en el que el proceso puede modificar variables comunes, actualizar una tabla, escribir en un archivo, etc.  Dos procesos no pueden ejecutar su sección crítica al mismo tiempo.
  • 3.
    EL PROBLEMA DELA SECCIÓN CRÍTICA  Cualquier solución a este problema deberá tener 3 requisitos:  Exclusión mutua. Si el proceso P está ejecutándose en su sección crítica, los demás procesos no pueden estar ejecutando sus secciones críticas.
  • 4.
    EL PROBLEMA DELA SECCIÓN CRÍTICA  Progreso. Si ningún proceso está ejecutando su sección crítica y algunos procesos desean entrar en sus correspondientes secciones críticas, sólo aquellos procesos que no estén ejecutando sus secciones restantes pueden participar en la decisión de cuál será el siguiente que entre en su sección crítica, y esta selección no se puede posponer indefinidamente.
  • 5.
    EL PROBLEMA DELA SECCIÓN CRÍTICA  Espera limitada. Existe un límite en el número de veces que se permite que otros procesos entren en sus secciones críticas después de que un proceso haya hecho una solicitud para entrar en su sección crítica y antes de que la misma haya sido concedida.
  • 6.
    EL PROBLEMA DELA SECCIÓN CRÍTICA  En un instante pueden estar activos varios procesos en modo kernel en el sistema, pudiendo producir posibles condiciones de carrera.  Se usan dos métodos generales para gestionar las secciones críticas en los sistemas operativos, cuando se encuentran ejecutando en modo kernel:  Kernels apropiativos. Un kernel apropiativo permite que un proceso sea desalojado mientras se está ejecutando. Debe ser diseñado para asegurar que los datos compartidos del kernel no se vean afectados por posibles condiciones de carrera de los procesos.
  • 7.
    EL PROBLEMA DELA SECCIÓN CRÍTICA  Kernels no apropiativos. Un kernel no apropiativo no permite que un proceso que se esté ejecutando en modo kernel sea desalojado; se ejecutará hasta que salga de dicho modo, hasta que se bloquee o hasta que ceda voluntariamente el control de la CPU.  Ejemplos:  No apropiativos: Windows XP, 2000, UNIX tradicional, Linux versiones previas a 2.6  Apropiativos: Linux a partir de 2.6, SOLARIS
  • 8.
    SOLUCIÓN DE PETERSON  No hay garantías de que la solución de Peterson funcione correctamente en arquitecturas informáticas modernas.  La solución de Peterson se restringe a dos procesos que van alternando la ejecución de sus secciones críticas y de sus secciones restantes: Pi, Pj.  Esta solución requiere 2 estructuras de datos:
  • 9.
    SOLUCIÓN DE PETERSON  La estructura del proceso Pi
  • 10.
    SOLUCIÓN DE PETERSON  Para demostrar que esta solución es correcta, se tiene que cumplir que:  La exclusión mutua se conserva.  El requisito de progreso se satisface.  El requisito de espera limitada se cumple
  • 11.
    HARDWARE DE SINCRONIZACIÓN  Las regiones críticas deben protegerse mediante cerrojos.  Un proceso debe colocar un cerrojo antes de entrar en sección crítica y liberarlo cuando salga de la misma.  Se deben implementar funciones a nivel de instrucciones de máquina que cumplan con los 3 requisitos para resolver el problema de la sección crítica.
  • 12.
    SEMÁFOROS  Son herramientas más simples de implementar que los cerrojos por instrucciones de hardware.  Un semáforo es una variable entera a la que sólo se puede acceder por 2 operaciones: wait() y signal().  Pueden ser semáforos binarios (cerrojos mútex) o semáforos contador.
  • 13.
    SEMÁFOROS  Se puede usar semáforos binarios para abordar el problema de la sección crítica en el caso de múltiples procesos, usando un semáforo mútex, inicializado con el valor 1 y cada proceso Pi se organiza de esta forma:
  • 14.
    SEMÁFOROS  Los semáforos contadores se pueden usar para controlar el acceso a un recurso formado por un número finito de instancias.  El semáforo se inicializa con el número de recursos disponibles.  Cada proceso que desee usar el recurso ejecuta una operación wait () en el semáforo (decrementando la cuenta).
  • 15.
    SEMÁFOROS  Cuando un proceso libera el recurso, ejecuta una operación signal () (incrementando la cuenta).  Cuando la cuenta del semáforo llega a 0, todos las instancias del recurso estarán en uso. Los procesos que deseen usar una instancia del recurso se bloquearán hasta que la cuenta sea mayor que 0.
  • 16.
    PRINCIPALES PROBLEMAS DE SINCRONIZACIÓN  Problema del buffer limitado  Problema de los lectores – escritores  Los procesos escritores tengan acceso exclusivo a la base de datos compartida.  El primer problema de los lectores-escritores, requiere que ningún lector se mantenga en espera a menos que un escritor haya obtenido ya permiso.
  • 17.
    PRINCIPALES PROBLEMAS DE SINCRONIZACIÓN  El segundo problema de los lectores-escritores requiere que, una vez que un escritor está preparado, dicho escritor realice la escritura tan pronto como sea posible  Problema de la cena de los filósofos  Considere cinco filósofos que gastan sus vidas en pensar y comer. Los filósofos comparten una mesa redonda con cinco sillas, una para cada filósofo. En el centro de la mesa hay una fuente de arroz y la mesa se ha puesto con sólo cinco palillos
  • 18.
    Cuando un filósofo piensa, no se relaciona con sus colegas. De vez en cuando, un filósofo siente hambre v trata de tomar los palillos más próximos a él (los palillos que se encuentran entre él y sus vecinos de la izquierda y la derecha).  Un filósofo sólo puede coger un palillo cada vez. Obviamente, no puede coger un palillo que esté en manos de un vecino de mesa.  Cuando un filósofo hambriento ha conseguido dos palillos, come sin soltar sus palillos. Cuando termina de comer, los coloca de nuevo sobre la mesa y vuelve a pensar
  • 19.
    PRINCIPALES PROBLEMAS DE SINCRONIZACIÓN  Formas de corregir los problemas de sincronización.  Los monitores proporcionan mecanismos de sincronización para compartir tipos abstractos de datos.  Las variables de condición proporcionan un método mediante el que un procedimiento de un monitor puede bloquear su ejecución hasta recibir la señal de que puede continuar.  Solaris, Windows XP y Linux proporcionan mecanismos como semáforos, mútex, bloqueos mediante bucles sin fin y variables de condición para controlar el acceso a datos compartidos.
  • 20.
    PRINCIPALES PROBLEMAS DE SINCRONIZACIÓN  Transacciones atómicas  Una transacción es una unidad de programa que se debe ejecutar atómicamente; es decir, todas las operaciones asociadas con ella se ejecutan hasta completarse, o no se ejecuta ninguna de las operaciones.  Para asegurar la atomicidad a pesar de los fallos del sistema, podemos usar un registro de escritura anticipada.
  • 21.
    PRINCIPALES PROBLEMAS DE SINCRONIZACIÓN  Todas las actualizaciones se escriben en el registro, que se almacena en un medio de almacenamiento estable.  Si se produce un fallo catastrófico del sistema, la informa- ción contenida en el registro se usa para restaurar el estado de los elementos de datos actualizados (undo y redo).  Para disminuir el trabajo de buscar en el registro después de haberse producido un fallo del sistema, podemos usar un mecanismo de puntos de comprobación (checkpoint).
  • 22.
    PRINCIPALES PROBLEMAS DE SINCRONIZACIÓN  Los métodos más utilizados para el control de transacciones concurrentes son:  Protocolos de bloqueo (uso de cerrojos)  Esquemas de ordenación mediante marcas temporales (timestamp).