Lock manager

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

In informatica, il lock manager, o gestore dei lock, è un modulo del DBMS che si occupa della gestione dei lock.

Nella maggior parte dei sistemi reali, il Lock Manager estende il transaction manager.

Modalità operativa[modifica | modifica wikitesto]

All'arrivo di una richiesta di read o write al transaction manager, quest'ultimo invia al lock manager un'appropriata richiesta di lock.

In seguito all'avvenuta attribuzione del lock, il transaction manager inoltra la richiesta al data manager.

Richieste[modifica | modifica wikitesto]

Il Lock Manager risponde a richieste del seguente tipo:

  • Lock(transaction_id, data_item, mode)
  • Unlock(transaction_id, data_item)

In questo modo per ogni lock vengono salvati l'ID della transazione richiedente, i dati che devono essere messi in lock e la modalità di lock.

Modalità di lock[modifica | modifica wikitesto]

Le modalità di lock dei dati sono principalmente due:

  • Shared (S-lock), utilizzata per leggere dati
  • Exclusive (X-lock), utilizzata per scrivere dati

Date queste due modalità di lock possiamo creare una matrice di compatibilità di esecuzione.

Nella seguente tabella vediamo quando c'è conflitto o compatibilità delle operazioni:

X-Lock S-Lock
X-Lock Conflitto Conflitto
S-Lock Conflitto Compatibile

Lock table[modifica | modifica wikitesto]

Il lock manager gestisce una tabella dei lock (lock table) realizzata tramite tecnica di hash con il dato come chiave, al fine di velocizzarne la ricerca. Ogni entry nella tabella corrisponde ad un dato. L'entry contiene un puntatore alla lista dei lock assegnati per quello stesso dato e un puntatore alla lista delle richieste in attesa per quel dato. Per facilitare il rilascio dei lock, tutte le entry relativa alla stessa transazione vengono collegate tra loro. La granuralità del lock può essere un record del database piuttosto che una pagina. In tal caso il buffer manager non fornirà una copia privata della pagina alle transazioni ma garantirà l'accesso esclusivo tramite semafori alla singola copia della pagina presente nel buffer pool.

Funzionamento[modifica | modifica wikitesto]

Acquisizione dei lock[modifica | modifica wikitesto]

Al fine di garantire l'atomicità delle operazioni di lock e unlock, la lock table viene divisa in porzioni regolate da semafori.

Se una richiesta di lock può essere soddisfatta, si inserisce una nuova entry nella lock table; in caso contrario la richiesta viene accodata.

Rilascio dei lock[modifica | modifica wikitesto]

Vi sono due tipi di modalità per il rilascio dei lock:

  • Rilascio immediato
  • Rilascio posticipato

Nel primo caso, l'unlock viene eseguito subito dopo l'esecuzione dell'operazione corrispondente, al fine di aumentare il livello di concorrenza del sistema.

Nel secondo caso, l'unlock viene posticipato fino al termine della transazione, riducendo il livello di concorrenza a fronte di un maggiore livello di isolamento.

Bibliografia[modifica | modifica wikitesto]

  • Paolo Ciaccia, Dario Mario, Lezioni di basi di dati, 2013, Editrice Esculapio, ISBN 978-8874887187

Voci correlate[modifica | modifica wikitesto]