¿Qué es el semáforo? Contando, tipos binarios con ejemplo

¿Qué es Semáforo?

Semáforo es simplemente una variable que no es negativa y se comparte entre subprocesos. Un semáforo es un mecanismo de señalización, y un hilo que está esperando en un semáforo puede ser señalado por otro hilo. utiliza dos atomic operaciones, 1) Esperar y 2) Señalar el proceso. synchronización.

Un semáforo permite o no permite el acceso al recurso, lo que depende de cómo esté configurado.

Característica del semáforo

Aquí, son característicos de un semáforo:

  • Es un mecanismo que se puede utilizar para proporcionar syncronización de tareas.
  • es de bajo nivel syncMecanismo de cronización.
  • El semáforo siempre contendrá un valor entero no negativo.
  • El semáforo se puede implementar usando prueba operaciones e interrupciones, que deben ejecutarse utilizando descriptores de archivos.

Tipos de semáforos

Los dos tipos comunes de semáforos son

  • Contando semáforos
  • Semáforos binarios.

Contar semáforos

Este tipo de semáforo utiliza un conteo que ayuda a que la tarea se adquiera o libere numerosas veces. Si el recuento inicial = 0, el semáforo de recuento debe crearse en el estado no disponible.

Contar semáforos
Contar semáforos

Sin embargo, si el recuento es> 0, el semáforo se crea en el estado disponible y la cantidad de tokens que tiene es igual a su recuento.

Semáforos binarios

Los semáforos binarios son bastante similares a los semáforos contadores, pero su valor está restringido a 0 y 1. En este tipo de semáforo, la espera operaLa operación sólo funciona si el semáforo = 1 y la señal operaLa operación tiene éxito cuando el semáforo = 0. Es más fácil de implementar que contar semáforos.

Semáforos binarios

Semáforos binarios

Ejemplo de semáforo

El programa que se proporciona a continuación es una implementación paso a paso, que implica el uso y la declaración del semáforo.

Shared var mutex: semaphore = 1;
Process i
    begin
    .
    .
    P(mutex);
    execute CS;
    V(mutex);
    .
    .
    End;

Espere y señale Operaciones en semáforos

Ambos operaciones se utilizan para implementar synchronización. El objetivo de este semáforo. operaLa opción es conseguir la exclusión mutua.

Esperar Operadesarrollo

Este tipo de semáforo operation le ayuda a controlar la entrada de una tarea en la sección crítica. Sin embargo, si el valor de espera es positivo, entonces el valor del argumento de espera X disminuye. En el caso de valor negativo o cero, no operase ejecuta la operación. También se llama P(S) operación.

Después de disminuir el valor del semáforo, que se vuelve negativo, el comando se mantiene hasta que se cumplan las condiciones requeridas.

Copy CodeP(S)
{ 
    while (S<=0);
    S--;
}

Signal operadesarrollo

Este tipo de semáforo operaLa función se utiliza para controlar la salida de una tarea desde una sección crítica. Ayuda a aumentar el valor del argumento en 1, que se denota como V(S).

Copy CodeP(S)
{ 
    while (S>=0);
    S++;
}

Contando semáforo frente a semáforo binario

A continuación, se muestran algunas diferencias importantes entre el conteo y el semáforo binario:

Contando semáforo Semáforo binario
Sin exclusión mutua Exclusión mutua
Cualquier valor entero Valor sólo 0 y 1
Más de una ranura Solo una ranura
Proporcionar un conjunto de procesos. Tiene un mecanismo de exclusión mutua.

Diferencia entre semáforo y mutex

parámetros Semáforo Mutex
Mecanismo Es un tipo de mecanismo de señalización. Es un mecanismo de bloqueo.
Tipo de datos El semáforo es una variable entera. Mutex es solo un objeto.
Modificación La espera y la señal. operaciones pueden modificar un semáforo. Es modificado únicamente por el proceso que puede solicitar o liberar un recurso.
Gestión de recursos Si ningún recurso está libre, entonces el proceso requiere un recurso que debe ejecutarse. operación. Debe esperar hasta que el recuento del semáforo sea mayor que 0. Si está bloqueado, el proceso tiene que esperar. El proceso debe mantenerse en cola. Solo es necesario acceder a este cuando el mutex está desbloqueado.
Hilo Puede tener múltiples hilos de programa. Puede tener varios subprocesos de programa en mutex pero no simultáneamenteneoUsualmente
Propiedad El valor puede cambiarse mediante cualquier proceso que libere u obtenga el recurso. El bloqueo del objeto lo libera únicamente el proceso que ha obtenido el bloqueo sobre él.
Tipos Los tipos de semáforo son el semáforo contable y el semáforo binario y Mutex no tiene subtipos.
Operadesarrollo El valor del semáforo se modifica usando esperar () y señal () operación. El objeto Mutex está bloqueado o desbloqueado.
Ocupación de recursos Está ocupado si se están utilizando todos los recursos y el proceso que solicita el recurso realiza una espera () operación y se bloquea hasta que el recuento de semáforos sea >1. En caso de que el objeto ya esté bloqueado, el proceso que solicita recursos espera y el sistema lo pone en cola antes de que se libere el bloqueo.

Ventajas de los semáforos

A continuación se detallan las ventajas y ventajas de utilizar Semaphore:

  • Permite que más de un hilo acceda a la sección crítica.
  • Los semáforos son independientes de la máquina.
  • Los semáforos se implementan en el código independiente de la máquina del microkernel.
  • No permiten que múltiples procesos ingresen a la sección crítica.
  • Como hay mucha espera en el semáforo, nunca se desperdician tiempo ni recursos en el proceso.
  • Son independientes de la máquina, por lo que deben ejecutarse en el código independiente de la máquina del microkernel.
  • Permiten una gestión flexible de los recursos.

Desventaja de los semáforos

Aquí están las desventajas/desventajas del semáforo.

  • Una de las mayores limitaciones de un semáforo es la inversión de prioridad.
  • The operaEl sistema de ting tiene que realizar un seguimiento de todas las llamadas para esperar y señalar el semáforo.
  • Su uso nunca se impone, sino que es únicamente por convención.
  • Para evitar deadlocks en semáforo, la espera y la señal operaLas operaciones deben ejecutarse en el orden correcto.
  • La programación de semáforos es complicada, por lo que existen posibilidades de no lograr la exclusión mutua.
  • Tampoco es un método práctico para uso a gran escala ya que su uso conduce a una pérdida de modularidad.
  • Semaphore es más propenso a errores del programador.
  • Puede causar deadlock o violación de exclusión mutua debido a un error del programador.

Resumen

  • El semáforo se define como una variable que no es negativa y se comparte entre subprocesos.
  • Es un mecanismo que se puede utilizar para proporcionar syncronización de tareas.
  • El semáforo de conteo utiliza un conteo que ayuda a que la tarea se adquiera o libere numerosas veces.
  • Los semáforos binarios son bastante similares a los semáforos contadores, pero su valor está restringido a 0 y 1.
  • Esperar operation le ayuda a controlar la entrada de una tarea en la sección crítica
  • Semáforo de señal operaLa función se utiliza para controlar la salida de una tarea desde una sección crítica.
  • Counting Semaphore no tiene exclusión mutua, mientras que Binary Semaphore tiene exclusión mutua
  • Semáforo significa un mecanismo de señalización, mientras que Mutex es un mecanismo de bloqueo.
  • Semaphore permite que más de un hilo acceda a la sección crítica
  • Una de las mayores limitaciones de un semáforo es la inversión de prioridad.