¿Qué es el semáforo?
El semáforo es simplemente una variable que no es negativa y se comparte entre hilos. 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 operaciones atómicas, 1) esperar y 2) señal para la sincronización del proceso.
Un semáforo permite o no permite el acceso al recurso, que depende de cómo esté configurado.
En este tutorial de sistema operativo (SO), aprenderá:
- Característica del semáforo
- ¿Qué es el semáforo?
- Tipos de semáforos
- Ejemplo de semáforo
- Operaciones de espera y señal en semáforos
- Contando semáforo vs semáforo binario
- Diferencia entre semáforo y mutex
- Ventajas de los semáforos
- Desventaja de los semáforos
Característica del semáforo
Aquí, son características de un semáforo:
- Es un mecanismo que se puede utilizar para proporcionar sincronización de tareas.
- Es un mecanismo de sincronización de bajo nivel.
- El semáforo siempre tendrá un valor entero no negativo.
- Semaphore se puede implementar usando operaciones de prueba e interrupciones, que deben ejecutarse usando descriptores de archivo.
Tipos de semáforos
Los dos tipos comunes de semáforos son
- Contando semáforos
- Semáforos binarios.
Contando semáforos
Este tipo de semáforo utiliza un recuento que ayuda a adquirir o liberar la tarea en numerosas ocasiones. Si el recuento inicial = 0, el semáforo de recuento debe crearse en el estado no disponible.
Sin embargo, si el recuento es> 0, el semáforo se crea en el estado disponible y el número de tokens que tiene es igual a su recuento.
Semáforos binarios
Los semáforos binarios son bastante similares a contar semáforos, pero su valor está restringido a 0 y 1. En este tipo de semáforo, la operación de espera funciona solo si semáforo = 1, y la operación de señal tiene éxito cuando semáforo = 0. Es fácil de implementar que contar semáforos.
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 de semáforo.
Shared var mutex: semaphore = 1;Process ibegin… P(mutex);execute CS;V(mutex);… End;
Operaciones de espera y señal en semáforos
Ambas operaciones se utilizan para implementar la sincronización de procesos. El objetivo de esta operación de semáforo es lograr la exclusión mutua.
Espere la operación
Este tipo de operación de semáforo le ayuda a controlar la entrada de una tarea en la sección crítica. Sin embargo, si el valor de espera es positivo, el valor del argumento de espera X se reduce. En el caso de valor negativo o cero, no se ejecuta ninguna operación. También se denomina operación P (S).
Después de que se reduce el valor del semáforo, que se vuelve negativo, el comando se mantiene hasta que se cumplen las condiciones requeridas.
Copy CodeP(S){while (S<=0);S--;}
Operación de señal
Este tipo de operación de semáforo 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 vs 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 solo 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 | Las operaciones de espera y señal pueden modificar un semáforo. | Solo se modifica por el proceso que puede solicitar o liberar un recurso. |
Administracion de recursos | Si ningún recurso está libre, entonces el proceso requiere un recurso que debe ejecutar la operación de espera. Debe esperar hasta que el recuento del semáforo sea mayor que 0. | Si está bloqueado, el proceso debe esperar. El proceso debe mantenerse en cola. Solo se debe acceder a esto cuando el mutex está desbloqueado. |
Hilo | Puede tener varios subprocesos de programa. | Puede tener varios subprocesos de programa en mutex pero no simultáneamente. |
Propiedad | El valor puede cambiarse mediante cualquier proceso que libere u obtenga el recurso. | El bloqueo de objetos se libera solo por el proceso, que ha obtenido el bloqueo. |
Tipos | Los tipos de semáforo están contando semáforo y semáforo binario y | Mutex no tiene subtipos. |
Operación | El valor del semáforo se modifica mediante la operación wait () y signal (). | 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 la operación wait () 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 muestran los pros y los beneficios de usar 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 una espera ocupada en el semáforo, nunca se desperdicia tiempo ni recursos en el proceso.
- Son independientes de la máquina, y deben ejecutarse en el código del micronúcleo independiente de la máquina.
- Permiten una gestión flexible de los recursos.
Desventaja de los semáforos
Aquí, son las desventajas / desventajas del semáforo
- Una de las mayores limitaciones de un semáforo es la inversión de prioridades.
- El sistema operativo tiene que realizar un seguimiento de todas las llamadas para esperar y señalar el semáforo.
- Su uso nunca se impone, pero es solo por convención.
- Para evitar interbloqueos en el semáforo, las operaciones de espera y señal 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 la pérdida de modularidad.
- El semáforo es más propenso a errores del programador.
- Puede causar un punto muerto o una violación de la 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 hilos.
- Es un mecanismo que se puede utilizar para proporcionar sincronización de tareas.
- El semáforo de recuento utiliza un recuento que ayuda a adquirir o liberar la tarea en numerosas ocasiones.
- Los semáforos binarios son bastante similares a contar semáforos, pero su valor está restringido a 0 y 1.
- La operación de espera le ayuda a controlar la entrada de una tarea en la sección crítica
- La operación de semáforo de señal se utiliza para controlar la salida de una tarea desde una sección crítica
- El semáforo de conteo no tiene exclusión mutua, mientras que el semáforo binario tiene exclusión mutua
- Semáforo significa un mecanismo de señalización, mientras que Mutex es un mecanismo de bloqueo.
- El semáforo 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 prioridades.