Lock manager
# Lock manager

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

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

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

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

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

### Acquisizione dei lock

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

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.

