Mutex vs Semaphore

Come da terminologia del sistema operativo, mutex e semaphore sono risorse del kernel che forniscono servizi di sincronizzazione, chiamati anche primitive di sincronizzazione. La sincronizzazione dei processi svolge un ruolo importante nel mantenere la coerenza dei dati condivisi. Sia le soluzioni software che hardware sono presenti per la gestione di problemi di sezione critici. Ma le soluzioni hardware per problemi di sezione critici sono piuttosto difficili da implementare. Mutex e semaphore forniscono entrambi servizi di sincronizzazione, ma non sono gli stessi.

Che cos’è Mutex?

Mutex è un oggetto di esclusione reciproca che sincronizza l’accesso a una risorsa. Viene creato con un nome univoco all’inizio di un programma. Il meccanismo di blocco mutex assicura che solo un thread possa acquisire il mutex ed entrare nella sezione critica. Questo thread rilascia il mutex solo quando esce nella sezione critica.

Mutex vs Semaphore

È un tipo speciale di semaforo binario utilizzato per controllare l’accesso alla risorsa condivisa. Include un meccanismo di ereditarietà della priorità per evitare problemi di inversione della priorità estesa. Consente di mantenere le attività attuali con priorità più elevata nello stato bloccato per il minor tempo possibile. Tuttavia, l’ereditarietà della priorità non corregge l’inversione della priorità ma minimizza solo il suo effetto.

Esempio

Questo viene mostrato con l’aiuto del seguente esempio,

Uso di Mutex

Un mutex fornisce l’esclusione reciproca, sia produttore o consumatore che può avere la chiave (mutex) e procedere con il loro lavoro. Finché il produttore riempie il buffer, l’utente deve attendere e viceversa. Nel blocco Mutex, per tutto il tempo, solo un singolo thread può funzionare con l’intero buffer.

All’avvio di un programma, richiede al sistema di creare un oggetto mutex per una determinata risorsa. Il sistema crea l’oggetto mutex con un nome o un ID univoco. Ogni volta che il thread del programma desidera utilizzare la risorsa, occupa il blocco sull’oggetto mutex, utilizza la risorsa e dopo l’uso, rilascia il blocco sull’oggetto mutex. Quindi il processo successivo è autorizzato ad acquisire il blocco sull’oggetto mutex.

Nel frattempo, un processo ha acquisito il blocco sull’oggetto mutex e nessun altro thread o processo può accedere a tale risorsa. Se l’oggetto mutex è già bloccato, il processo che desidera acquisire il blocco sull’oggetto mutex deve attendere e viene accodato dal sistema fino a quando l’oggetto mutex non viene sbloccato.

Vantaggi di Mutex

Ecco i seguenti vantaggi del mutex, come ad esempio:

  • Mutex è solo semplici blocchi ottenuti prima di entrare nella sua sezione critica e quindi rilasciarlo.
  • Poiché un solo thread è nella sua sezione critica in un dato momento, non ci sono condizioni di gara e i dati rimangono sempre coerenti.

Svantaggi di Mutex

Mutex ha anche alcuni svantaggi, come ad esempio:

  • Se un thread ottiene un blocco e va a dormire o viene anticipato, l’altro thread potrebbe non andare avanti. Questo può portare alla fame.
  • Non può essere bloccato o sbloccato da un contesto diverso da quello che lo ha acquisito.
  • Solo un thread dovrebbe essere consentito nella sezione critica alla volta.
  • La normale implementazione può portare a uno stato di attesa occupato, che spreca il tempo della CPU.

Che cos’è il semaforo?

Il semaforo è semplicemente una variabile non negativa e condivisa tra i thread. Un semaforo è un meccanismo di segnalazione e un altro thread può segnalare un thread che è in attesa su un semaforo.

Mutex vs Semaphore

Un semaforo utilizza due operazioni atomiche,

1. Wait: L’operazione wait decrementa il valore del suo argomento S se è positivo. Se S è negativo o zero, non viene eseguita alcuna operazione.

2. Segnale per la sincronizzazione del processo: L’operazione signal incrementa il valore del suo argomento S.

Un semaforo consente o rifiuta l’accesso alla risorsa, a seconda di come è impostata.

Uso del semaforo

Nel caso di un singolo buffer, possiamo separare il buffer da 4 KB in quattro buffer da 1 KB. Il semaforo può essere associato a questi quattro buffer, consentendo agli utenti e ai produttori di lavorare su diversi buffer contemporaneamente.

Tipi di semaforo

Il semaforo si distingue per il sistema operativo in due categorie Contando il semaforo e il semaforo binario.

1. Conteggio del semaforo: il valore del semaforo S viene inizializzato al numero di risorse presenti nel sistema. Ogni volta che un processo desidera accedere alla risorsa, esegue l’operazione wait () sul semaforo e decrementa il valore del semaforo di uno. Quando rilascia la risorsa, esegue l’operazione signal () sul semaforo e incrementa il valore del semaforo di uno.

Quando il conteggio del semaforo va a 0, significa che i processi occupano tutte le risorse. Un processo deve utilizzare una risorsa quando il conteggio del semaforo è 0. Esegue l’operazione wait () e viene bloccata fino a quando il valore del semaforo diventa maggiore di 0.

Mutex vs Semaforo

2. Binario semaforo: Il valore di un semaforo varia tra 0 e 1. È simile al blocco mutex, ma mutex è un meccanismo di blocco, mentre il semaforo è un meccanismo di segnalazione. Nel semaforo binario, se un processo desidera accedere alla risorsa, esegue l’operazione wait () sul semaforo e decrementa il valore del semaforo da 1 a 0. Quando rilascia la risorsa, esegue un’operazione signal () sul semaforo e ne incrementa il valore a 1. Supponiamo che il valore del semaforo sia 0 e che un processo desideri accedere alla risorsa. In tal caso, esegue l’operazione wait() e si blocca fino a quando il processo corrente che utilizza le risorse rilascia la risorsa.

Mutex vs Semaphore

Vantaggi di Semaphore

Ecco i seguenti vantaggi di semaphore, come ad esempio:

  • Consente a più thread di accedere alla sezione critica.
  • I semafori sono indipendenti dalla macchina.
  • I semafori sono implementati nel codice indipendente dalla macchina del microkernel.
  • Non consentono a più processi di accedere alla sezione critica.
  • Poiché il semaforo è occupato e in attesa, non vi è mai spreco di tempo e risorse di processo.
  • Sono indipendenti dalla macchina, che dovrebbero essere eseguiti nel codice indipendente dalla macchina del microkernel.
  • Consentono una gestione flessibile delle risorse.

Svantaggio dei semafori

I semafori presentano anche alcuni svantaggi, come ad esempio:

  • Uno dei maggiori limiti di un semaforo è l’inversione di priorità.
  • Il sistema operativo deve tenere traccia di tutte le chiamate per attendere e segnalare il semaforo.
  • Il loro uso non viene mai applicato, ma è solo per convenzione.
  • Le operazioni di attesa e segnale devono essere eseguite nell’ordine corretto per evitare deadlock in semaforo.
  • La programmazione del semaforo è un metodo complesso, quindi ci sono possibilità di non raggiungere l’esclusione reciproca.
  • Non è nemmeno un metodo pratico per l’uso su larga scala in quanto il loro uso porta alla perdita di modularità.
  • Il semaforo è più soggetto all’errore del programmatore
  • e può causare deadlock o violazione dell’esclusione reciproca a causa di un errore del programmatore.

Differenza tra Mutex e Semaphore

La differenza fondamentale tra semaphore e mutex è che semaphore è un meccanismo di segnalazione, cioè i processi eseguono wait() e signal() per indicare se stanno acquisendo o rilasciando la risorsa. Al contrario, un mutex è un meccanismo di blocco e il processo deve acquisire il blocco su un oggetto mutex se desidera acquisire la risorsa. Ecco alcune altre differenze tra semaphore e mutex, come ad esempio:

Mutex vs Semaforo

Termini Mutex Semaforo
Definizione mutex è un meccanismo di chiusura, di acquisire una risorsa, un processo che ha bisogno di bloccare l’oggetto mutex, e durante il rilascio di una risorsa processo per sbloccare l’oggetto mutex. Il semaforo è un meccanismo di segnalazione in quanto le operazioni wait() e signal() eseguite sulla variabile semaphore indicano se un processo sta acquisendo o rilasciando la risorsa.
Esistenza Un mutex è un oggetto. Il semaforo è una variabile intera.
Funzione Mutex consente a più thread di programma di accedere a una singola risorsa ma non contemporaneamente. Il semaforo consente a più thread di programma di accedere a un’istanza finita di risorse.
Proprietà Il blocco oggetto Mutex viene rilasciato solo dal processo che ha acquisito il blocco sull’oggetto mutex. Il valore del semaforo può essere modificato da qualsiasi processo che acquisisce o rilascia la risorsa eseguendo l’operazione wait() e signal ().
Categorizza Mutex non è categorizzato ulteriormente. Il semaforo può essere classificato in conteggio semaforo e binario semaforo.
Operazione L’oggetto mutex viene bloccato o sbloccato dal processo di richiesta o rilascio della risorsa. Il valore del semaforo viene modificato utilizzando l’operazione wait() e signal() oltre all’inizializzazione.
Risorse occupate Se un oggetto mutex è già bloccato, il processo che desidera acquisire risorse attende e viene messo in coda dal sistema finché la risorsa non viene rilasciata e l’oggetto mutex viene sbloccato. Supponiamo che il processo acquisisca tutte le risorse e che nessuna risorsa sia gratuita. In tal caso, il processo che desidera acquisire la risorsa esegue l’operazione wait() sulla variabile semaforo e si blocca fino a quando il conteggio del semaforo diventa maggiore di 0.

Leave a Reply