Differenza tra semaforo e mutex in informatica

Differenza tra semaforo e mutex in informatica

Sincronizzazione dei processi

Nei sistemi operativi, la sincronizzazione dei processi svolge un ruolo importante nel mantenimento della coerenza dei dati condivisi. Sono presenti sia soluzioni software che hardware per la gestione dei problemi di sezione critica in qaunto le soluzioni hardware per il problema delle sezioni critiche sono piuttosto difficili da implementare.

Semaforo

Il semaforo (in inglese semaphore) è uno strumento di sincronizzazione dei processi. Il semaforo è in genere una variabile intera S che viene inizializzata al numero di risorse presenti nel sistema e il valore del semaforo può essere modificato solo da due funzioni wait() e signal() oltre all’inizializzazione.

L’operazione wait() e signal() modifica indivisibilmente il valore del semaforo. Significa che quando un processo modifica il valore del semaforo, nessun altro processo può modificare contemporaneamente il valore del semaforo. I semafori si distinguono per il sistema operativo in due categorie: il semaforo intero e il semaforo binario.

Semaforo intero e Semaforo binario

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

Quando il semaforo intero va a 0, significa che tutte le risorse sono occupate dai processi. Se un processo deve utilizzare una risorsa quando il semaforo intero è 0, esegue wait() e viene bloccato fino a quando il valore del semaforo diventa maggiore di 0.

Nel semaforo binario, il valore del semaforo è compreso tra 0 e 1. È simile al blocco mutex, ma il mutex è un meccanismo di blocco, mentre il semaforo è un meccanismo di segnalazione. Nel semaforo binario, se un processo vuole accedere alla risorsa esegue un’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 incrementi il suo valore su 1. Se il valore del semaforo è 0 e un processo desidera accedere alla risorsa, esegue un’operazione wait() e si blocca fino a quando il processo corrente che utilizza le risorse rilascia la risorsa.

Differenza tra semaforo e mutex in informatica

Mutex

L’oggetto di esclusione reciproca è chiamato in inglese Mutex. Dal termine esclusione reciproca, possiamo capire che solo un processo alla volta può accedere a una determinata risorsa. L’oggetto mutex consente ai thread di più programmi di utilizzare la stessa risorsa ma uno alla volta non contemporaneamente.

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 ID univoco. Ogni volta che il thread del programma desidera utilizzare la risorsa che occupa il blocco sull’oggetto mutex, utilizza la risorsa e dopo l’uso rilascia il blocco sull’oggetto mutex. Quindi al processo successivo è consentito acquisire il blocco sull’oggetto mutex.

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

Differenze tra semaforo e mutex

Le tre differenze principali tra un semoforo e un mutex sono sicuramente le seguenti:

  1. Il semaforo è un meccanismo di segnalazione in quanto l’operazione wait() e signal() eseguita sulla variabile semaforo indica se un processo sta acquisendo la risorsa o rilasciando la risorsa. D’altra parte, il mutex è un meccanismo di blocco, in quanto per acquisire una risorsa, un processo deve bloccare l’oggetto mutex e mentre rilasciando un processo di risorsa deve sbloccare l’oggetto mutex.
  2. Il semaforo è in genere una variabile intera mentre, mutex è un oggetto.
  3. Il semaforo consente a più thread di programma di accedere all’istanza finita di risorse. D’altra parte, Mutex consente a più thread di programma di accedere a una singola risorsa condivisa ma una alla volta.

Pubblicato da Vito Lavecchia

Lavecchia Vito Ingegnere Informatico (Politecnico di Bari) Email: [email protected] Sito Web: https://vitolavecchia.altervista.org

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *