Cos'è il semaforo? Binario, tipi di conteggio con esempio

Sommario:

Anonim

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à.