title: Lock manager
text: # 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.
  
  