Protocolos para Control de Concurrencia
Protocolos para Control de Concurrencia
La mayoría de los protocolos utilizan técnicas de bloqueo (locking) de los ítems de datos para prevenir que múltiples transacciones accedan a los ítems concurrentemente. Un bloqueo es una variable asociada con un ítem utilizada para almacenar el estado de ese ítem con respecto a posibles operaciones que le puedan ser aplicadas.
Bloqueo Binario
Tipos de bloqueos:
Bloqueos Binarios.
Bloqueos de modo Múltiple.
Bloqueo Binario
Un bloqueo puede tener estados o valores: bloqueado, desbloqueado (0 y 1).
Si el bloqueo sobre X es 1, ninguna operación de la base de datos que solicite el elemento podrá tener acceso si es 0, se podrá tener acceso al elemento cuando se solicite.
Bloqueo Binario
Se debe incluir en las transacciones dos operaciones, bloquear_elemento y desbloquear_elemento.
Se deben implementar como unidades indivisibles (conocidas como secciones críticas en los sistemas operativos)
Impone una exclusión mutua sobre el elemento de datos.
Bloqueo Binario
En la forma más simple cada bloqueo puede ser un registro con tres campos: nombre de elemento de datos, bloqueo, transacción que bloquea además de una cola para las transacciones que están esperando acceder al elemento.
Bloqueo Binario Reglas: 1. Una transacción T debe realizar una operación Bloquear_ítem(X) antes que un Leer_Ítem(X) o Escribir_ítem(X).
2. Una transacción T debe realizar una operación Desbloquear_ítem(X) después de que todos los Leer_ítem(X) y Escribir_ítem(X) en T se han completado.
Bloqueo Binario 3. Una transacción T no realizará un Bloquear_ítem(X) si ya posee el bloqueo de X. 4. Una transacción T no realizará un Desbloquear_ítem(X) salvo que posea el bloqueo de X.
Bloqueos de modo Múltiple
Son una ampliación de los bloqueos binarios.
Tres operaciones de bloqueo diferentes: Bloquear_para_lectura(X) Bloquear_para_escritura(X) Desbloquear_ítem(X).
Bloqueos de modo Múltiple
Tres estados posibles: 'bloqueado para lectura' 'bloqueado para escritura‘ 'desbloqueado'.
Alcance de los candados
Exclusivo: prohíbe el compartir un recurso. La primera transacción que asigna esta llave puede accederlo, mientras que la segunda debe esperar hasta que este sea liberado. Compartidos: dependiendo de las operaciones involucradas permite que los recursos sean compartidos por varios usuarios. Detección de situaciones de abrazo mortal (deadlock).
Ejemplos-Bloquear Bloquear_elemento B: si CANDADO(X)=0 (el elemento esta desbloqueado) entonces CANDADO(X) 1 (bloquear elemento) de otro modo comenzar esperar(hasta que CANDADO(X)=0 y el gestor de bloqueo despierte la transaccion); ir a B fin;
Ejemplos-Desbloquear desbloquear_elemento(X) CANDADO(X)0 (desbloquear el elemento) si alguna transacción esta esperando entonces despertar una de las transacciones que esperan;