Sincronización de procesos
5.1. Antecedentes:
5.2. El problema de la sección crítica
5.3. Hardware de sincronización
5.4. Semáforos
5.5. Problemas clásicos de sincronización

5.6. Monitores
5.7. Sincronización en Java
Sincronización de Procesos
5.1. Antecedentes:

Un proceso es cooperativo si puede afectar o ser afectado por los otros procesos que
se están ejecutando en el sistema

• La cooperación entre procesos requiere: la ejecución concurrente de los mismos,
mecanismos de comunicación y mecanismos de sincronización
• Un problema clásico de procesos cooperativos es el problema del productor-
consumidor


 Productor:                                      Consumidor:
 repeat                                          repeat
      ........                                          while contador =n do nada;
      producir un elemento en sigp                      sigc:=buffer[sale];
                                                        sale:=sale+1 mod n;
      …………..
                                                        ………..
       while entra +1 mod n=sale do nada;
                                                 Consumir el elemento que esta en
       buffer[ entra]:=sigp;
                                                 sigc
       entra:=entra+1 mod n;
                                                 …….
 until false ;
                                                 until false ;
• Los códigos pueden ser modificados como sigue:
   Productor:                             Consumidor:
   repeat                                 repeat
   ........                               while contador =n do nada;
   producir un elemento en sigp           sigc:=buffer[sale];
   …………..                                 sale:=sale+1 mod n;
   while contador =n do nada;             contador:=contador -1;
   buffer[ entra]:=sigp;                  ………..
   entra:=entra+1 mod n;                  Consumir el elemento que esta en sigc
   contador:=contador +1;                 …….
   until false ;                          until false ;




• Cada rutina es correcta pero pueden no funcionar correctamente correcta,
cuando son ejecutadas concurrentemente

• La situación en la que varios procesos acceden y manipulan el mismo dato
concurrentemente, y el resultado de la ejecución depende del particular orden
en que los accesos tienen lugar, es llamada condición de competencia
• Se requiere alguna forma de sincronización para garantizar que solo un
proceso a la vez puede estar manipulando el dato.
5.2. El problema de la sección crítica
Dado un conjunto n de procesos, cada proceso tiene un segmento de código,
llamado sección crítica, en la cual los procesos pueden cambiar variables comunes,
actualizar una tabla, grabar un archivo, etc.

La característica importante del sistema es que, cuando un proceso se esta
ejecutando en su sección crítica; ningún otro proceso puede ejecutarse en su
sección crítica.

En un sistema, la ejecución de las secciones críticas de los procesos debe ser
mutuamente excluyentes en el tiempo.
El problema de la sección crítica consiste en diseñar un protocolo que los procesos
puedan usar para cooperar.

Cada proceso debe solicitar permiso para ingresar a su sección crítica.

La sección de código que implementa esta solicitud es la sección de ingreso.
La sección crítica puede ir seguida de una sección de egreso.

El código que queda es la sección restante.
Una solución al problema de la sección crítica debe satisfacer los tres requisitos si
•Mutua exclusión.
•Progreso
•Espera limitada.
Estructura general de un proceso

                                           repeat

               Sección de ingreso




                   Sección crítica

                   Sección de egreso

                Sección restante
until false;
5.3. Hardware de sincronización
En sistemas de un procesador, el problema de las secciones críticas podría
ser resuelto simplemente si pudiéramos deshabilitar las interrupciones
mientras una variable compartida está siendo actualizada.
• Esta solución no es factible para un sistema con varios procesadores
debido a la demora que implica el pasaje de mensajes.
• En muchos sistemas existen instrucciones de hardware que pueden ser
usadas para resolver el problema de las secciones críticas.
• Estas instrucciones permiten ejecutar atómicamente las operaciones de:
– chequear y modificar el contenido de una palabra, o
– intercambiar el contenido de dos palabras
Definición de la instrucción Evaluar-y-Asignar.
repeat
 function Evaluar-y-Asignar(var objetivo: boolean):boolean;
begin
           Evaluar-y-Asignar:=objetivo;
           Objetivo:=true;
End


Implementación de la mutua exclusión con Evaluar-y-Asignar

                                                             repeat
                while Evaluar-y-Asignar(cerradura) do nada




                            Sección crítica
                   Cerradura:= false
                             Sección restante
 until false;
5.4. Semáforos
Las soluciones por hardware presentadas no son fáciles de generalizar a
problemas más complejos.
• Esta dificultad se puede superar usando una herramienta de sincronización
llamada semáforo.
• Un semáforo S es una variable entera que solo es accedida a través de dos
operaciones atómicas: esperar(wait) y señal(signal)
Las definiciones de estas operaciones son:
          espera(S): while S<= 0 do nada;
                        S:=S-1;
            señal(S):    S:= S+1;


-Podemos usar semáforos para resolver el problema de la sección crítica
con n procesos.
- Todos los procesos comparten un semáforo, mutex (de mutual exclusión,
mutua exclusión ) que recibe el valor inicial a 1.
- También podemos usar semáforos para resolver problemas de
sincronización.
Implementación de la mutua exclusión con SEMÁFOROS


repeat
               espera(mutex)

                 Sección crítica
                   Señal(mutex);



                    Sección restante
until false;
5.5. Problemas clásicos de sincronización
- El problema de buffer limitado
ºSe le utiliza con frecuencia para ilustrar la potencia de las primitivas de
sincronización.
ºSupondremos que la reserva consiste en n buffers, cada uno de los cuales
puede contener un elemento.
ºEl semáforo mutex asegura la mutua exclusión de los accesos a la reserva de
buffers e inicialmente tiene el valor 1.
º los semáforos vacios y llenos cuentan el numero de buffers vacios y llenos,
respectivamente.
ºEl semáfor vacios asume el valor inical n; llenos de inicia con el valor 0.
- El problema de los lectores y escritores
-Un objeto de datos(como un archivo o registro) se va a compartir
entre varios procesos concurrentes.
-Algunos de esos procesos quizá sólo deseen leer el contenido del
objeto compartido, pero otros podrían querer actualizarlo.
- Distinguimos entre estos dos tipos de procesos llamados
lectores(solo están interesados en leer) y escritores a los demás.
- El problema de los filósofos comensales

SICRONIZACION DE PROCESOS

  • 1.
    Sincronización de procesos 5.1.Antecedentes: 5.2. El problema de la sección crítica 5.3. Hardware de sincronización 5.4. Semáforos 5.5. Problemas clásicos de sincronización 5.6. Monitores 5.7. Sincronización en Java
  • 2.
    Sincronización de Procesos 5.1.Antecedentes: Un proceso es cooperativo si puede afectar o ser afectado por los otros procesos que se están ejecutando en el sistema • La cooperación entre procesos requiere: la ejecución concurrente de los mismos, mecanismos de comunicación y mecanismos de sincronización • Un problema clásico de procesos cooperativos es el problema del productor- consumidor Productor: Consumidor: repeat repeat ........ while contador =n do nada; producir un elemento en sigp sigc:=buffer[sale]; sale:=sale+1 mod n; ………….. ……….. while entra +1 mod n=sale do nada; Consumir el elemento que esta en buffer[ entra]:=sigp; sigc entra:=entra+1 mod n; ……. until false ; until false ;
  • 3.
    • Los códigospueden ser modificados como sigue: Productor: Consumidor: repeat repeat ........ while contador =n do nada; producir un elemento en sigp sigc:=buffer[sale]; ………….. sale:=sale+1 mod n; while contador =n do nada; contador:=contador -1; buffer[ entra]:=sigp; ……….. entra:=entra+1 mod n; Consumir el elemento que esta en sigc contador:=contador +1; ……. until false ; until false ; • Cada rutina es correcta pero pueden no funcionar correctamente correcta, cuando son ejecutadas concurrentemente • La situación en la que varios procesos acceden y manipulan el mismo dato concurrentemente, y el resultado de la ejecución depende del particular orden en que los accesos tienen lugar, es llamada condición de competencia • Se requiere alguna forma de sincronización para garantizar que solo un proceso a la vez puede estar manipulando el dato.
  • 4.
    5.2. El problemade la sección crítica Dado un conjunto n de procesos, cada proceso tiene un segmento de código, llamado sección crítica, en la cual los procesos pueden cambiar variables comunes, actualizar una tabla, grabar un archivo, etc. La característica importante del sistema es que, cuando un proceso se esta ejecutando en su sección crítica; ningún otro proceso puede ejecutarse en su sección crítica. En un sistema, la ejecución de las secciones críticas de los procesos debe ser mutuamente excluyentes en el tiempo. El problema de la sección crítica consiste en diseñar un protocolo que los procesos puedan usar para cooperar. Cada proceso debe solicitar permiso para ingresar a su sección crítica. La sección de código que implementa esta solicitud es la sección de ingreso. La sección crítica puede ir seguida de una sección de egreso. El código que queda es la sección restante.
  • 5.
    Una solución alproblema de la sección crítica debe satisfacer los tres requisitos si •Mutua exclusión. •Progreso •Espera limitada. Estructura general de un proceso repeat Sección de ingreso Sección crítica Sección de egreso Sección restante until false;
  • 6.
    5.3. Hardware desincronización En sistemas de un procesador, el problema de las secciones críticas podría ser resuelto simplemente si pudiéramos deshabilitar las interrupciones mientras una variable compartida está siendo actualizada. • Esta solución no es factible para un sistema con varios procesadores debido a la demora que implica el pasaje de mensajes. • En muchos sistemas existen instrucciones de hardware que pueden ser usadas para resolver el problema de las secciones críticas. • Estas instrucciones permiten ejecutar atómicamente las operaciones de: – chequear y modificar el contenido de una palabra, o – intercambiar el contenido de dos palabras
  • 7.
    Definición de lainstrucción Evaluar-y-Asignar. repeat function Evaluar-y-Asignar(var objetivo: boolean):boolean; begin Evaluar-y-Asignar:=objetivo; Objetivo:=true; End Implementación de la mutua exclusión con Evaluar-y-Asignar repeat while Evaluar-y-Asignar(cerradura) do nada Sección crítica Cerradura:= false Sección restante until false;
  • 8.
    5.4. Semáforos Las solucionespor hardware presentadas no son fáciles de generalizar a problemas más complejos. • Esta dificultad se puede superar usando una herramienta de sincronización llamada semáforo. • Un semáforo S es una variable entera que solo es accedida a través de dos operaciones atómicas: esperar(wait) y señal(signal) Las definiciones de estas operaciones son: espera(S): while S<= 0 do nada; S:=S-1; señal(S): S:= S+1; -Podemos usar semáforos para resolver el problema de la sección crítica con n procesos. - Todos los procesos comparten un semáforo, mutex (de mutual exclusión, mutua exclusión ) que recibe el valor inicial a 1. - También podemos usar semáforos para resolver problemas de sincronización.
  • 9.
    Implementación de lamutua exclusión con SEMÁFOROS repeat espera(mutex) Sección crítica Señal(mutex); Sección restante until false;
  • 10.
    5.5. Problemas clásicosde sincronización - El problema de buffer limitado ºSe le utiliza con frecuencia para ilustrar la potencia de las primitivas de sincronización. ºSupondremos que la reserva consiste en n buffers, cada uno de los cuales puede contener un elemento. ºEl semáforo mutex asegura la mutua exclusión de los accesos a la reserva de buffers e inicialmente tiene el valor 1. º los semáforos vacios y llenos cuentan el numero de buffers vacios y llenos, respectivamente. ºEl semáfor vacios asume el valor inical n; llenos de inicia con el valor 0.
  • 11.
    - El problemade los lectores y escritores -Un objeto de datos(como un archivo o registro) se va a compartir entre varios procesos concurrentes. -Algunos de esos procesos quizá sólo deseen leer el contenido del objeto compartido, pero otros podrían querer actualizarlo. - Distinguimos entre estos dos tipos de procesos llamados lectores(solo están interesados en leer) y escritores a los demás.
  • 12.
    - El problemade los filósofos comensales