Mutex vs Semáforo
Según la terminología del sistema operativo, mutex y semáforos son recursos del núcleo que proporcionan servicios de sincronización, también llamados primitivas de sincronización. La sincronización de procesos desempeña un papel importante en el mantenimiento de la coherencia de los datos compartidos. Las soluciones de software y hardware están presentes para manejar problemas críticos de sección. Pero las soluciones de hardware para problemas críticos de sección son bastante difíciles de implementar. Mutex y semáforo proporcionan servicios de sincronización, pero no son lo mismo.
¿Qué es Mutex?
Mutex es un objeto de exclusión mutua que sincroniza el acceso a un recurso. Se crea con un nombre único al inicio de un programa. El mecanismo de bloqueo mutex garantiza que solo una rosca pueda adquirir el mutex y entrar en la sección crítica. Este hilo solo libera el mutex cuando sale de la sección crítica.
Es un tipo especial de semáforo binario utilizado para controlar el acceso al recurso compartido. Incluye un mecanismo de herencia de prioridad para evitar problemas de inversión de prioridad extendida. Permite que las tareas de mayor prioridad actuales se mantengan en el 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.
Ejemplo
Esto se muestra con la ayuda del siguiente ejemplo,
Uso de Mutex
Un mutex proporciona exclusión mutua, ya sea productor o consumidor que puede tener la clave (mutex) y continuar con su trabajo. Mientras el productor llene el búfer, el usuario tendrá que esperar, y viceversa. En Mutex lock, todo el tiempo, solo un hilo puede funcionar con todo el búfer.
Cuando un programa se inicia, solicita al sistema que cree un objeto mutex para un recurso determinado. El sistema crea el objeto mutex con un nombre o ID único. Siempre que el subproceso del programa quiera usar el recurso, ocupa el bloqueo en el objeto mutex, utiliza el recurso y, después de usarlo, libera el bloqueo en el objeto mutex. Luego, se permite al siguiente proceso adquirir el bloqueo en el objeto mutex.
Mientras tanto, un proceso ha adquirido el bloqueo en el objeto mutex, y ningún otro subproceso o proceso puede acceder a ese recurso. Si el objeto mutex ya está bloqueado, el proceso que desea adquirir el bloqueo en el objeto mutex tiene que esperar y el sistema lo pone en cola hasta que el objeto mutex se desbloquea.
Ventajas de Mutex
Aquí están las siguientes ventajas de mutex, como:
- Mutex es simplemente bloqueos simples obtenidos antes de ingresar a su sección crítica y luego liberarla.
- Dado que solo hay un hilo en su sección crítica en un momento dado, no hay condiciones de carrera y los datos siempre permanecen consistentes.
Desventajas de Mutex
Mutex también tiene algunas desventajas, como:
- Si un hilo obtiene un bloqueo y se duerme o se adelanta, es posible que el otro hilo no se mueva hacia adelante. Esto puede llevar a la inanición.
- No se puede bloquear ni 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, que desperdicia tiempo de CPU.
¿Qué es Semáforo?
El semáforo es simplemente una variable no negativa y compartida entre hilos. Un semáforo es un mecanismo de señalización, y otro hilo puede señalar un hilo que está esperando en un semáforo.
Un semáforo utiliza dos operaciones atómicas,
1. Wait: La operación wait disminuye el valor de su argumento S si es positivo. Si S es negativo o cero, entonces no se realiza ninguna operación.
2. Señal para la sincronización de procesos: La operación de señal incrementa el valor de su argumento S.
Un semáforo permite o rechaza el acceso al recurso, dependiendo de cómo esté configurado.
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, lo que permite a los usuarios y productores trabajar en diferentes búferes simultáneamente.
Tipos de Semáforo
Semáforo se distingue por el sistema operativo en dos categorías Contar semáforo y semáforo Binario.
1. Semáforo de conteo: El valor del semáforo S se inicializa al número de recursos presentes en el sistema. Cuando un proceso quiere acceder al recurso, realiza la operación wait()en el semáforo y decrementa el valor del semáforo en uno. Cuando libera el recurso, realiza la operación signal () en el semáforo e incrementa el valor del semáforo en uno.
Cuando el recuento de semáforos va a 0, significa que los procesos ocupan todos los recursos. Un proceso necesita usar un recurso cuando el recuento de semáforos es 0. Ejecuta la operación wait () y se bloquea hasta que el valor del semáforo sea mayor que 0.
2. Semáforo binario: El valor de un semáforo oscila entre 0 y 1. Es similar al bloqueo mutex, pero mutex es un mecanismo de bloqueo, mientras que el semáforo es un mecanismo de señalización. En semáforo binario, si un proceso quiere acceder al recurso, realiza la operación wait() en el semáforo y disminuye el valor del semáforo de 1 a 0. Cuando libera el recurso, realiza una operación signal () en el semáforo e incrementa su valor a 1. Supongamos que el valor del semáforo es 0 y un proceso quiere acceder al recurso. En ese caso, realiza la operación wait () y se bloquea hasta que el proceso actual que utiliza los recursos libera el recurso.
Ventajas del semáforo
Aquí están las siguientes ventajas del semáforo, como:
- 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 microcernel.
- No permiten que varios procesos entren en la sección crítica.
- Como hay mucho trabajo y espera en el semáforo, nunca se desperdicia el tiempo y los recursos del proceso.
- Son independientes de la máquina, que deben ejecutarse en el código independiente de la máquina del microcernel.
- Permiten una gestión flexible de los recursos.
Desventaja de los semáforos
Los semáforos también tienen algunas desventajas, como:
- Una de las mayores limitaciones de un semáforo es la inversión de prioridad.
- El sistema operativo tiene que realizar un seguimiento de todas las llamadas a esperar y al semáforo de señal.
- Su uso nunca se aplica, pero es solo por convención.
- Las operaciones de Espera y señal deben ejecutarse en el orden correcto para evitar bloqueos en el semáforo.
- La programación de semáforos es un método complejo, por lo que hay 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 al error del programador
- , y puede causar un bloqueo o violación de la exclusión mutua debido a un error del programador.
Diferencia entre Mutex y Semáforo
La diferencia básica entre semáforo y mutex es que el semáforo es un mecanismo de señalización, es decir, los procesos realizan operaciones wait() y signal() para indicar si están adquiriendo o liberando el recurso. En contraste, un mutex es un mecanismo de bloqueo, y el proceso tiene que adquirir el bloqueo en un objeto mutex si quiere adquirir el recurso. Aquí hay algunas diferencias más entre semáforo y mutex, como:
Términos | Mutex | Semáforo |
---|---|---|
Definición | El mutex es un mecanismo de bloqueo, ya que para adquirir un recurso, un proceso necesita bloquear el objeto mutex, y mientras libera un proceso de recurso tiene que desbloquear el objeto mutex. | El semáforo es un mecanismo de señalización, ya que las operaciones wait() y signal() realizadas en la variable semáforo indican si un proceso está adquiriendo o liberando el recurso. |
Existencia | Un mutex es un objeto. | El semáforo es una variable entera. |
Función | Mutex permite que múltiples subprocesos de programa accedan a un solo recurso, pero no simultáneamente. | Semáforo permite que múltiples subprocesos de programa accedan a una instancia finita de recursos. |
Propiedad | El bloqueo de objeto Mutex se libera solo por el proceso que ha adquirido el bloqueo en el objeto mutex. | El valor del semáforo se puede cambiar por cualquier proceso que adquiera o libere el recurso realizando operaciones wait() y signal (). |
Categorizar | Mutex no se categoriza más. | El semáforo se puede clasificar en semáforo de conteo y semáforo binario. |
Operación | El objeto mutex se bloquea o desbloquea mediante el proceso de solicitud o liberación del recurso. | El valor del semáforo se modifica usando la operación wait() y signal() aparte de la inicialización. |
Recursos ocupados | Si un objeto mutex ya está bloqueado, el proceso que desea adquirir un recurso espera y el sistema lo pone en cola hasta que el recurso se libera y el objeto mutex se desbloquea. | Supongamos que el proceso adquiere todos los recursos, y ningún recurso está libre. En ese caso, el proceso que desea adquirir el recurso realiza la operación wait () en la variable semáforo y se bloquea a sí mismo hasta que el recuento de semáforos sea mayor que 0. |
Leave a Reply