Livelock: cos'è, esempio, differenza con Deadlock

Cos'è LiveLock?

A livelock è una situazione in cui una richiesta per un lock esclusivo viene negata ripetutamente, poiché molti lock condivisi sovrapposti continuano a interferire a vicenda. I processi continuano a cambiare il loro stato, il che impedisce loro ulteriormente di completare l'attività. Ciò impedisce loro ulteriormente di completare l'attività.

Esempi di Livelock

Esempio 1:

Un esempio più semplice di Livelock sarebbe quello di due persone che si incontrano faccia a faccia in un corridoio ed entrambe si spostano di lato per lasciare passare l'altro. Finiscono per spostarsi da un lato all'altro senza fare alcun progresso poiché si muovono nello stesso modo in quel momento. Qui non si incrociano mai.

Esempio 2:

Esempi di Livelock

Come puoi vedere nell'immagine sopra, ciascuno dei due processi indicati necessita di due risorse e utilizzano il polling primitivo di immissione del registro per provare ad acquisire i blocchi necessari per loro. Se il tentativo fallisce, il metodo funziona di nuovo.

  1. Processo Una risorsa Hold Y
  2. Il processo B detiene la risorsa X
  3. Il processo A richiede X risorse
  4. Il processo B richiede la risorsa Y

Supponendo che il processo A venga eseguito per primo e acquisisca la risorsa dati X, quindi il processo B venga eseguito e acquisisca la risorsa Y, indipendentemente da quale processo venga eseguito per primo, nessuno di essi avanzerà ulteriormente.

Tuttavia nessuno dei due processi viene bloccato. Utilizzano ripetutamente le risorse della CPU senza che venga fatto alcun progresso, ma bloccano anche qualsiasi blocco di elaborazione.

Pertanto, questa situazione non è quella di a punto morto perché non c'è un singolo processo bloccato, ma ci troviamo di fronte a una situazione equivalente a un deadlock, ovvero LIVELOCK.

Cosa porta a Livelock?

Livelock si verifica quando il numero totale di processi consentiti in un sistema specifico deve essere definito dal numero totale di voci nella tabella dei processi. Pertanto, gli slot della tabella dei processi dovrebbero essere definiti risorse finite.

Che cosa è Deadlock?

Un deadlock è una situazione che si verifica nel sistema operativo quando un processo entra in stato di attesa perché un altro processo in attesa detiene la risorsa richiesta. Il deadlock è un problema comune nel multi-processing in cui diversi processi condividono uno specifico tipo di risorsa mutuamente esclusiva nota come soft lock o software.

Esempio di stallo

  • Un esempio reale potrebbe essere il traffico, che va solo in una direzione.
  • Qui un ponte è considerato una risorsa.
  • Quindi, quando si verifica un deadlock, è possibile risolverlo facilmente se un'auto fa retromarcia (prelievo delle risorse e rollback).
  • In caso di stallo, potrebbe essere necessario far retromarcia su più auto.
  • Quindi morire di fame è possibile.
Esempio di stallo
Esempio di stallo

Cos'è la fame?

La fame è una situazione in cui tutti i processi a bassa priorità vengono bloccati e i processi ad alta priorità procedono. In qualsiasi sistema, le richieste di risorse ad alta/bassa priorità continuano ad avvenire in modo dinamico. Pertanto, sono necessarie alcune politiche per decidere chi riceve il sostegno e quando.

Utilizzando alcuni algoritmi, alcuni processi potrebbero non ottenere il servizio desiderato anche se non sono in stallo. La starvation si verifica quando alcuni thread rendono le risorse condivise non disponibili per un lungo periodo di tempo.

Esempio di fame

Ad esempio, un oggetto offre un metodo sincronizzato che probabilmente richiederà molto tempo per tornare. Se un thread utilizza questo metodo frequentemente, altri thread che necessitano anch'essi di un accesso sincronizzato frequente allo stesso oggetto saranno spesso bloccati.

Differenza tra deadlock, starvation e livelock

  • Un deadlock è una situazione che si verifica nel sistema operativo quando un processo entra in uno stato di attesa perché la risorsa richiesta è trattenuta da un altro processo in attesa.
  • Un livelock, d'altro canto, è quasi simile a un deadlock, tranne per il fatto che gli stati dei processi coinvolti in un livelock continuano a cambiare l'uno nell'altro, senza che nessuno progredisca.
  • Quindi, Livelock è un caso unico di carenza di risorse.

Sintesi

  • Definizione: un Livelock è una situazione in cui una richiesta per un blocco esclusivo viene negata ripetutamente, poiché molti blocchi condivisi sovrapposti continuano a interferire a vicenda.
  • Livelock si verifica quando il numero totale di processi consentiti in un sistema specifico deve essere definito dal numero totale di voci nella tabella dei processi
  • Un deadlock è una situazione che si verifica nel sistema operativo quando un processo entra in uno stato di attesa perché un altro processo in attesa detiene la risorsa richiesta.
  • Un esempio reale potrebbe essere il traffico, che va solo in una direzione.
  • Un esempio di Livelock potrebbe essere quello di due persone che si incontrano faccia a faccia in un corridoio ed entrambe si spostano di lato per lasciare passare l'altro.
  • La fame è una situazione in cui tutti i processi a bassa priorità vengono bloccati e i processi ad alta priorità procedono.