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.

Conteggio Semaphores
Conteggio Semaphores

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.

Binario Semaphores

Binario Semaphores

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