Diferencia entre revisiones de «Mecanismos de sincronización»

De Wiki de Sistemas Operativos
Saltar a: navegación, buscar
Línea 1: Línea 1:
Existen dos tipos de mecanismos de sincronización:
+
=Mecanismos de sincronización=
<pre>
+
'''Tipos de mecanismos de sincronización :'''
- Optimista: se considera que la frecuencia de acceso a un recurso compartido es baja.
+
== Optimista==
</pre>
+
Se considera que la frecuencia de acceso a un recurso compartido es baja, es decir, suponemos que la probabilidad de acceso simultanea a un recurso compartido es baja.
<pre>
+
Ejemplo de control optimista suponiendo 2 hilos, hx y hy.
Ejemplo de control optimista suponiendo 2 hilos, hx y hy.
 
 
        
 
        
 
             int compartida = 1, tmp;
 
             int compartida = 1, tmp;
Línea 12: Línea 11:
 
             if(compartida+1 != tmp)
 
             if(compartida+1 != tmp)
 
                 goto retry;          /* compruebo si la variable compartida ha sido modificada mientras operaba con el temporal */
 
                 goto retry;          /* compruebo si la variable compartida ha sido modificada mientras operaba con el temporal */
</pre>
+
==Pesimista==
 
+
Se considera que la frecuencia de acceso al recurso compartido es alta.
<pre>
+
En este mecanismo disponemos de tres partes :
- Pesimista: se considera que la frecuencia de acceso al recurso compartido es alta.
+
*Un protocolo de entrada : en el cual se restringe el permiso de acceso para las variables compartidas.
</pre>
+
*Una sección crítica : donde se realizan todas las operaciones con las variables compartidas.
<pre>
+
*Un protocolo de salida : en el cual se restablece el permiso de acceso para las variables compartidas.
Ejemplo de control pesimista suponiendo 2 hilos, hx y hy.
 
  
 +
(Toda operación con una variable compartida necesita un protocolo de entrada y otro de salida)
 +
Ejemplo de control pesimista suponiendo 2 hilos, hx y hy.
 +
     
 
             int compartida = 1;
 
             int compartida = 1;
 
       no_permito_acceso_variable_compartida();  /* protocolo de entrada */
 
       no_permito_acceso_variable_compartida();  /* protocolo de entrada */
 
             compartida++;                      /* sección crítica */
 
             compartida++;                      /* sección crítica */
 
       permito_acceso_a_variable_compartida();  /* protocolo de salida */
 
       permito_acceso_a_variable_compartida();  /* protocolo de salida */
</pre>
+
'''¿Cómo implementamos el protocolo de E/S en el control de concurrencia pesimista?'''
 +
 
 +
Interrumpiendo la conmutación, desactivando las interrupciones, seguidamente ejecutando la sección crítica y finalmente permitiendo el acceso a las variables compartidas y activando las interrupciones.
 +
 
 +
'''¿Cómo implementar el control de concurrencia pesimista?'''
 +
 
 +
*Espera ocupada/activa : cerrojos. Se comprueba continuamente la condición que permite franquear el protocolo de entrada
 +
*Espera no ocupada/no activa : semáforos, monitores y mensajes. Se pasa a estado bloqueado cuando no se puede franquear el protocolo de entrada.

Revisión del 16:23 28 mar 2011

Mecanismos de sincronización

Tipos de mecanismos de sincronización :

Optimista

Se considera que la frecuencia de acceso a un recurso compartido es baja, es decir, suponemos que la probabilidad de acceso simultanea a un recurso compartido es baja.

Ejemplo de control optimista suponiendo 2 hilos, hx y hy.
      
           int compartida = 1, tmp;
     retry:
           tmp = compartida;         /* anoto */
           tmp++;                    /* actualizo temporal */
           if(compartida+1 != tmp)
               goto retry;           /* compruebo si la variable compartida ha sido modificada mientras operaba con el temporal */

Pesimista

Se considera que la frecuencia de acceso al recurso compartido es alta. En este mecanismo disponemos de tres partes :

  • Un protocolo de entrada : en el cual se restringe el permiso de acceso para las variables compartidas.
  • Una sección crítica : donde se realizan todas las operaciones con las variables compartidas.
  • Un protocolo de salida : en el cual se restablece el permiso de acceso para las variables compartidas.

(Toda operación con una variable compartida necesita un protocolo de entrada y otro de salida)

Ejemplo de control pesimista suponiendo 2 hilos, hx y hy.
      
           int compartida = 1;
     no_permito_acceso_variable_compartida();  /* protocolo de entrada */
           compartida++;                       /* sección crítica */
     permito_acceso_a_variable_compartida();   /* protocolo de salida */

¿Cómo implementamos el protocolo de E/S en el control de concurrencia pesimista?

Interrumpiendo la conmutación, desactivando las interrupciones, seguidamente ejecutando la sección crítica y finalmente permitiendo el acceso a las variables compartidas y activando las interrupciones.

¿Cómo implementar el control de concurrencia pesimista?

  • Espera ocupada/activa : cerrojos. Se comprueba continuamente la condición que permite franquear el protocolo de entrada
  • Espera no ocupada/no activa : semáforos, monitores y mensajes. Se pasa a estado bloqueado cuando no se puede franquear el protocolo de entrada.