Che cos'è la Semaphore? Conteggio, tipi binari con esempio
Che cos'è la 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.
Caratteristica di Semaphore
Qui, sono caratteristici 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 comuni di semafori sono
- Conteggio dei semafori
- Semafori binari.
Conteggio Semaphores
Questo tipo di Semaphore usa un conteggio che aiuta l'attività ad essere acquisita o rilasciata numerose volte. Se il conteggio iniziale = 0, il semaforo di conteggio dovrebbe 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 abbastanza simili ai semafori di conteggio, ma il loro valore è limitato a 0 e 1. In questo tipo di semaforo, l'operazione di attesa funziona solo se semaforo = 1, e l'operazione di segnalazione ha successo quando semaforo = 0. È facile da implementare rispetto al conteggio dei semafori.
Esempio di Semaphore
Il programma indicato di seguito è un'implementazione passo passo, che prevede l'utilizzo e la dichiarazione del 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.
Copy CodeP(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).
Copy CodeP(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
parametri | 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 il semaforo e il semaforo binario e | 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ù di un 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.
Svantaggio dei semafori
Ecco i contro/svantaggi del semaforo
- Uno dei maggiori limiti di un semaforo è l'inversione della priorità.
- Il sistema operativo deve tenere traccia di tutte le chiamate in attesa e segnalare al 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 è complicata, quindi ci sono possibilità di non raggiungere la mutua esclusione.
- 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.
Sommario
- Semaphore è definita come una variabile non negativa e condivisa tra i thread.
- Si tratta di un meccanismo che può essere utilizzato per garantire la sincronizzazione delle attività.
- Il semaforo di conteggio utilizza un conteggio che aiuta ad acquisire o rilasciare l'attività numerose volte.
- I semafori binari sono abbastanza simili ai semafori di conteggio, ma il loro valore è limitato a 0 e 1.
- L'operazione di attesa ti aiuta a controllare l'ingresso di un'attività nella sezione critica
- Signal l'operazione semaforica viene utilizzata per controllare l'uscita di un'attività da una sezione critica
- Conteggio Semaphore non ha alcuna esclusione reciproca mentre Binary Semaphore ha la mutua esclusione
- Semaphore significa un meccanismo di segnalazione mentre Mutex è un meccanismo di blocco
- Semaphore consente a più di un thread di accedere alla sezione critica
- Uno dei maggiori limiti di un semaforo è l'inversione della priorità.