¿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, aprenderá:
- ¿Qué es Mutex?
- Uso de semáforo
- Uso de Mutex
- Diferencia entre semáforo y mutex
- Conceptos erróneos comunes sobre Mutex y Semaphore
- Ventajas del semáforo
- Ventajas de Mutex
- Desventaja de los semáforos
- Desventajas de Mutex
¿Qué es Mutex?
La forma completa de Mutex es Objeto de exclusión mutua. Es un tipo especial de semáforo binario que se utiliza para controlar el acceso al recurso compartido. Incluye un mecanismo de herencia de prioridad para evitar problemas de inversión de prioridad extendidos. Permite que las tareas actuales de mayor prioridad se mantengan en estado bloqueado durante el menor tiempo posible. Sin embargo, la herencia de prioridades no corrige la inversión de prioridades sino que solo minimiza su efecto.
DIFERENCIA CLAVE
- Mutex es un mecanismo de bloqueo, mientras que Semaphore es un mecanismo de señalización
- Mutex es solo un objeto, mientras que Semaphore es un número entero
- Mutex no tiene subtipo, mientras que Semaphore tiene dos tipos, que cuentan con semáforo y semáforo binario.
- Semaphore admite la modificación de las operaciones de espera y señal, mientras que Mutex solo es modificado por el proceso que puede solicitar o liberar un recurso.
- El valor del semáforo se modifica usando las operaciones wait () y signal (), por otro lado, las operaciones Mutex se bloquean o desbloquean.
Uso de semáforo
En el caso de un solo búfer, podemos separar el búfer de 4 KB en cuatro búferes de 1 KB. El semáforo se puede asociar con estos cuatro búferes. Esto permite a los usuarios y productores trabajar en diferentes búferes al mismo tiempo.
Uso de Mutex
Un mutex proporciona exclusión mutua, que puede ser productor o consumidor que puede tener la clave (mutex) y continuar con su trabajo. Mientras el productor llene el búfer, el usuario debe esperar y viceversa. En el bloqueo Mutex, todo el tiempo, solo un hilo puede funcionar con todo el búfer.
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 son semáforos contadores y semáforos binarios. | 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. |
Hechos comunes sobre Mutex y Semaphore
A continuación, se muestran algunos datos comunes sobre Mutex y Semaphore:
- Solo una tarea puede adquirir el mutex. Entonces, hay propiedad asociada con un mutex, y solo el propietario puede liberar el mutex.
- Las razones para usar mutex y semáforo son diferentes, tal vez debido a la similitud en su implementación, un mutex se denominaría semáforo binario.
- Un concepto erróneo muy conocido es que los mutex y los semáforos son casi iguales, con la única diferencia de que un mutex es capaz de contar hasta 1, mientras que los semáforos pueden contar de 0 a N.
- Siempre hay incertidumbre entre el semáforo binario y el mutex. Es posible que escuche que un mutex es un semáforo binario, lo cual no es correcto.
Ventajas del semáforo
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.
Ventajas de Mutex
A continuación, se presentan importantes ventajas / beneficios de Mutex
- Los mutex son simples bloqueos que se obtienen antes de ingresar a su sección crítica y luego liberarla.
- Dado que solo un hilo está en su sección crítica en un momento dado, no hay condiciones de carrera y los datos siempre permanecen consistentes.
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 un método complejo, 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.
Desventajas de Mutex
Aquí están las desventajas / desventajas de Mutex
- Si un subproceso obtiene un bloqueo y se queda inactivo o se interrumpe, es posible que el otro subproceso no pueda avanzar. Esto puede provocar inanición.
- No se puede bloquear o desbloquear desde un contexto diferente al que lo adquirió.
- Solo se debe permitir un hilo en la sección crítica a la vez.
- La implementación normal puede llevar a un estado de espera ocupado, lo que desperdicia tiempo de CPU.