Cosa è Semaphore? Conteggio, tipi binari con esempio
⚡ Riepilogo intelligente
Semaphore In un sistema operativo, `wait` è una variabile intera non negativa condivisa tra thread che coordina l'accesso alle risorse condivise tramite due operazioni atomiche, `wait` e `signal`, prevenendo condizioni di competizione durante la sincronizzazione dei processi.

Cosa è Semaphore?
Semaphore è semplicemente una variabile non negativa e condivisa tra thread. Un semaforo è un meccanismo di segnalazione e un thread che è in attesa su un semaforo può essere segnalato da un altro thread. Utilizza due operazioni atomiche, 1) Wait e 2) Signal per la sincronizzazione dei processi.
Un semaforo consente o impedisce l'accesso alla risorsa, a seconda di come è impostato.
Caratteristiche di Semaphore
Ecco le caratteristiche di un semaforo:
- Si tratta di un meccanismo che può essere utilizzato per garantire la sincronizzazione delle attività.
- Si tratta di un meccanismo di sincronizzazione di basso livello.
- Semaphore manterrà sempre un valore intero non negativo.
- Semaphore può essere implementato utilizzando operazioni di test e interruzioni, che dovrebbero essere eseguite utilizzando descrittori di file.
Tipi di Semaphores
I due tipi più comuni di semafori sono:
- Conteggio dei semafori
- Semafori binari
Conteggio Semaphores
Questo tipo di Semaphore Utilizza un contatore che consente di acquisire o rilasciare un'attività più volte. Se il contatore iniziale è pari a 0, il semaforo di conteggio deve essere creato nello stato non disponibile.
Tuttavia, se il conteggio è > 0, il semaforo viene creato nello stato disponibile e il numero di token che possiede è uguale al suo conteggio.
Binario Semaphores
I semafori binari sono piuttosto simili ai semafori a conteggio, ma il loro valore è limitato a 0 e 1. In questo tipo di semaforo, l'operazione di attesa funziona solo se il semaforo è uguale a 1, mentre l'operazione di segnalazione ha successo quando il semaforo è uguale a 0. Sono più facili da implementare rispetto ai semafori a conteggio.
Esempio di Semaphore
Il programma riportato di seguito è un'implementazione passo passo che prevede l'utilizzo e la dichiarazione di un semaforo.
Shared var mutex: semaphore = 1;
Process i
begin
.
.
P(mutex);
execute CS;
V(mutex);
.
.
End;
Aspetta e Signal Operazioni in Semaphores
Entrambe queste operazioni vengono utilizzate per implementare sincronizzazione dei processi. L'obiettivo di questa operazione del semaforo è ottenere la mutua esclusione.
Aspettare Operaproduzione
Questo tipo di operazione del semaforo ti aiuta a controllare l'ingresso di un'attività nella sezione critica. Tuttavia, se il valore di wait è positivo, il valore dell'argomento wait X viene decrementato. In caso di valore negativo o zero non viene eseguita alcuna operazione. È detta anche operazione P(S).
Dopo aver decrementato il valore del semaforo, che diventa negativo, il comando viene mantenuto finché non sono soddisfatte le condizioni richieste.
P(S)
{
while (S<=0);
S--;
}
Signal operazione
Questo tipo di Semaphore operazione è usata per controllare l'uscita di un task da una sezione critica. Aiuta ad aumentare il valore dell'argomento di 1, che è indicato come V(S).
P(S)
{
while (S>=0);
S++;
}
Conteggio Semaphore contro binario Semaphore
Ecco alcune delle principali differenze tra il conteggio e il semaforo binario:
| Conteggio Semaphore | Binario Semaphore |
| Nessuna esclusione reciproca | Esclusione reciproca |
| Qualsiasi valore intero | Valore solo 0 e 1 |
| Più di uno slot | Solo uno slot |
| Fornire una serie di processi | Ha un meccanismo di mutua esclusione. |
Differenza fra Semaphore contro Mutex
La tabella seguente confronta un semaforo con mutex in base a diversi parametri:
| Scheda Sintetica | Semaphore | mutex |
| Meccanismo | È un tipo di meccanismo di segnalazione. | È un meccanismo di bloccaggio. |
| Tipo di dati | Semaphore è una variabile intera. | Mutex è solo un oggetto. |
| Modifica | Le operazioni di attesa e segnalazione possono modificare un semaforo. | Viene modificato solo dal processo che può richiedere o rilasciare una risorsa. |
| Gestione delle Risorse | Se nessuna risorsa è libera, il processo richiede una risorsa che esegua l'operazione di attesa. Dovrebbe attendere fino a quando il conteggio del semaforo è maggiore di 0. | Se è bloccato, il processo deve attendere. Il processo dovrebbe essere mantenuto in coda. È necessario accedervi solo quando il mutex è sbloccato. |
| Filo | Puoi avere più thread di programma. | È possibile avere più thread di programma in mutex, ma non contemporaneamente. |
| Proprietà | Il valore può essere modificato da qualsiasi processo che rilascia o ottiene la risorsa. | Il blocco dell'oggetto viene rilasciato solo dal processo che ha ottenuto il blocco su di esso. |
| Tipi | Tipi di Semaphore stanno contando semafori e semafori binari. | Mutex non ha sottotipi. |
| Funzionamento | Semaphore il valore viene modificato utilizzando le operazioni wait() e signal(). | L'oggetto Mutex è bloccato o sbloccato. |
| Occupazione delle risorse | È occupato se tutte le risorse vengono utilizzate e il processo che richiede la risorsa esegue l'operazione wait() e si blocca finché il conteggio del semaforo non diventa >1. | Nel caso in cui l'oggetto sia già bloccato, il processo che richiede risorse attende e viene messo in coda dal sistema prima che il blocco venga rilasciato. |
Vantaggi di Semaphores
Ecco i vantaggi/vantaggi dell'utilizzo Semaphore:
- Consente a più thread di accedere alla sezione critica.
- Semaphoresono indipendenti dalla macchina.
- Semaphores sono implementati nel codice indipendente dalla macchina del microkernel.
- Non consentono a più processi di entrare nella sezione critica.
- Poiché l'attesa al semaforo è frenetica, non c'è mai uno 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.
Svantaggi di Semaphores
Ecco gli svantaggi/problemi del semaforo:
- Uno dei maggiori limiti di un semaforo è l'inversione della priorità.
- Il sistema operativo deve mantenere track di tutte le chiamate per attendere e segnalare il semaforo.
- Il loro utilizzo non è mai imposto, ma è solo per convenzione.
- Per evitare situazioni di stallo nel semaforo, Wait e Signal le operazioni devono essere eseguite nell'ordine corretto.
- Semaphore La programmazione è complessa, quindi esiste la possibilità che non si raggiunga l'esclusione reciproca.
- Inoltre, non è un metodo pratico per un utilizzo su larga scala poiché il loro utilizzo porta alla perdita di modularità.
- Semaphore è più soggetto a errori del programmatore.
- Può causare punto morto o violazione della mutua esclusione dovuta ad errore del programmatore.


