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.


