Cos'è il semaforo?
Il semaforo è semplicemente una variabile non negativa e condivisa tra i thread. Un semaforo è un meccanismo di segnalazione e un thread in attesa di un semaforo può essere segnalato da un altro thread. Utilizza due operazioni atomiche, 1) wait e 2) segnale per la sincronizzazione del processo.
Un semaforo consente o non consente l'accesso alla risorsa, che dipende da come è impostato.
In questo tutorial sul sistema operativo (OS) imparerai:
- Caratteristica del semaforo
- Cos'è il semaforo?
- Tipi di semafori
- Esempio di semaforo
- Attesa e operazioni di segnalazione nei semafori
- Conteggio semaforo vs semaforo binario
- Differenza tra semaforo e mutex
- Vantaggi dei semafori
- Svantaggio dei semafori
Caratteristica del semaforo
Qui, sono caratteristici di un semaforo:
- È un meccanismo che può essere utilizzato per fornire la sincronizzazione delle attività.
- È un meccanismo di sincronizzazione di basso livello.
- Il semaforo conterrà sempre un valore intero non negativo.
- Il semaforo può essere implementato utilizzando operazioni di test e interruzioni, che dovrebbero essere eseguiti utilizzando descrittori di file.
Tipi di semafori
I due tipi comuni di semafori sono
- Conteggio dei semafori
- Semafori binari.
Conteggio dei semafori
Questo tipo di semaforo utilizza un conteggio che consente l'acquisizione o il rilascio dell'attività 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 ha è uguale al suo conteggio.
Semafori binari
I semafori binari sono abbastanza simili al conteggio dei semafori, 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 implementare il conteggio dei semafori.
Esempio di semaforo
Il programma indicato di seguito è un'implementazione graduale, che implica l'uso e la dichiarazione del semaforo.
Shared var mutex: semaphore = 1;Process ibegin… P(mutex);execute CS;V(mutex);… End;
Attesa e operazioni di segnalazione nei semafori
Entrambe queste operazioni vengono utilizzate per implementare la sincronizzazione del processo. L'obiettivo di questa operazione di semaforo è ottenere l'esclusione reciproca.
Attendi l'operazione
Questo tipo di operazione sul 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 nessuna operazione. È anche chiamata operazione P (S).
Dopo che il valore del semaforo è diminuito, che diventa negativo, il comando viene mantenuto fino a quando le condizioni richieste non sono soddisfatte.
Copy CodeP(S){while (S<=0);S--;}
Segnale di funzionamento
Questo tipo di operazione semaforo viene utilizzato per controllare l'uscita di un'attività 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 semaforo vs semaforo binario
Ecco alcune delle principali differenze tra il conteggio e il semaforo binario:
Conteggio del semaforo | Semaforo binario |
Nessuna mutua esclusione | Esclusione reciproca |
Qualsiasi valore intero | Valore solo 0 e 1 |
Più di uno slot | Solo uno slot |
Fornisci una serie di processi | Ha un meccanismo di mutua esclusione. |
Differenza tra semaforo e mutex
Parametri | Semaforo | Mutex |
Meccanismo | È un tipo di meccanismo di segnalazione. | È un meccanismo di bloccaggio. |
Tipo di dati | Il semaforo è una variabile intera. | Mutex è solo un oggetto. |
Modifica | Le operazioni wait e signal 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 dovrebbe eseguire 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 tenuto 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 rilasci o ottenga la risorsa. | Il blocco dell'oggetto viene rilasciato solo dal processo che ha ottenuto il blocco su di esso. |
Tipi | I tipi di semaforo contano semaforo e semaforo binario e | Mutex non ha sottotipi. |
Operazione | Il valore del semaforo 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 fino a quando il conteggio dei semafori 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 dei semafori
Ecco i vantaggi / vantaggi dell'utilizzo di Semaphore:
- 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 entrare nella sezione critica.
- Poiché l'attesa è impegnata nel semaforo, 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
Qui ci sono i contro / svantaggi del semaforo
- 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 è mai imposto, ma è solo per convenzione.
- Per evitare deadlock nel semaforo, le operazioni Wait e Signal devono essere eseguite nell'ordine corretto.
- La programmazione del semaforo è complicata, quindi ci sono possibilità di non raggiungere l'esclusione reciproca.
- Inoltre, non è un metodo pratico per un utilizzo su larga scala poiché il loro utilizzo porta alla perdita di modularità.
- Il semaforo è più soggetto a errori del programmatore.
- Può causare deadlock o violazione dell'esclusione reciproca a causa di un errore del programmatore.
Sommario:
- Il semaforo è definito come una variabile non negativa e condivisa tra i thread.
- È un meccanismo che può essere utilizzato per fornire la sincronizzazione delle attività.
- Il semaforo del conteggio utilizza un conteggio che consente l'acquisizione o il rilascio dell'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
- L'operazione del semaforo del segnale viene utilizzata per controllare l'uscita di un'attività da una sezione critica
- Il conteggio del semaforo non ha esclusione reciproca mentre il semaforo binario ha l'esclusione reciproca
- Semaforo significa un meccanismo di segnalazione mentre Mutex è un meccanismo di blocco
- Il semaforo consente a più thread di accedere alla sezione critica
- Uno dei maggiori limiti di un semaforo è l'inversione di priorità.