Diferencia entre revisiones de «Mecanismos de sincronización»
Línea 1: | Línea 1: | ||
− | + | =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. | |
− | 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 */ | ||
− | + | ==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; | 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 */ | ||
− | + | '''¿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.