Recomendado, 2024

La Elección Del Editor

Diferencia entre semáforo y mutex

La sincronización de procesos juega un papel importante en el mantenimiento de la coherencia de los datos compartidos. Tanto las soluciones de software como de hardware están presentes para manejar el problema de la sección crítica. Pero las soluciones de hardware para el problema de la sección crítica son bastante difíciles de implementar. En el artículo de hoy, analizaremos dos soluciones basadas en software para manejar el problema de la sección crítica, es decir, Semaphore y Mutex.

La diferencia básica entre el semáforo y el mutex es que el semáforo es un mecanismo de señalización, es decir, los procesos realizan una operación de espera () y señal () para indicar si están adquiriendo o liberando el recurso, mientras que Mutex está bloqueando el mecanismo, el proceso tiene que adquirir el bloqueo activado. objeto mutex si quiere adquirir el recurso. Hay algunas diferencias más entre el semáforo y el mutex. Discutámoslas con la ayuda del cuadro de comparación que se muestra a continuación.

Gráfica comparativa

Bases para la comparaciónSemáforoMutex
BASICEl semáforo es un mecanismo de señalización.Mutex es un mecanismo de bloqueo.
ExistenciaEl semáforo es una variable entera.Mutex es un objeto.
FunciónSemaphore permite que múltiples hilos de programas accedan a una instancia finita de recursos.Mutex permite que varios subprocesos de programas accedan a un solo recurso pero no simultáneamente.
PropiedadEl valor del semáforo se puede cambiar mediante cualquier proceso que adquiera o libere el recurso.El bloqueo de objeto mutex se libera solo por el proceso que ha adquirido el bloqueo en él.
Clasificar por categoríasEl semáforo se puede clasificar en semáforo de conteo y semáforo binario.Mutex no se categoriza más.
OperaciónEl valor del semáforo se modifica utilizando las operaciones de espera () y señal ().El objeto mutex bloquea o desbloquea el objeto que solicita o libera el recurso.
Recursos ocupadosSi se están utilizando todos los recursos, el proceso que solicita recursos realiza una operación de espera () y se bloquea hasta que el recuento de semáforos sea mayor que uno.Si un objeto de exclusión mutua ya está bloqueado, el proceso que solicita recursos espera y pone en cola el sistema hasta que se libera el bloqueo.

Definición de semáforo

Semaphore es una herramienta de sincronización de procesos. El semáforo suele ser una variable entera S que se inicializa con el número de recursos presentes en el sistema y el valor del semáforo solo se puede modificar con dos funciones, wait () y signal (), aparte de la inicialización.

Las operaciones wait () y signal () modifican el valor del semáforo indivisiblemente . Significa que cuando un proceso está modificando el valor del semáforo, ningún otro proceso puede modificar simultáneamente el valor del semáforo. Los semáforos se distinguen por el sistema operativo en dos categorías, los semáforos de conteo y el semáforo binario .

En Counting Semaphore, el valor del semáforo S se inicializa a la cantidad de recursos presentes en el sistema. Cada vez que un proceso desea acceder al recurso, realiza una operación de espera () en el semáforo y disminuye el valor del semáforo en uno. Cuando libera el recurso, realiza una operación de señal () en el semáforo e incrementa el valor del semáforo en uno. Cuando el recuento de semáforos llega a 0, significa que todos los recursos están ocupados por los procesos. Si un proceso necesita usar un recurso cuando el recuento de semáforos es 0, ejecuta wait () y se bloquea hasta que el valor del semáforo sea mayor que 0.

En el semáforo binario, el valor del semáforo varía entre 0 y 1 . Es similar al bloqueo mutex, pero el mutex es un mecanismo de bloqueo, mientras que el semáforo es un mecanismo de señalización. En el semáforo binario, si un proceso quiere acceder al recurso, realiza la operación de espera () en el semáforo y disminuye el valor del semáforo de 1 a 0. Cuando libera el recurso, realiza una operación de señal () en el semáforo y los incrementos su valor es 1. Si el valor del semáforo es 0 y un proceso desea acceder al recurso, realiza una operación de espera () y se bloquea hasta que el proceso actual que utiliza los recursos libere el recurso.

Definición de Mutex

Objeto de exclusión mutua se denomina en breve como Mutex. Del término exclusión mutua, podemos entender que solo un proceso a la vez puede acceder al recurso dado. El objeto de exclusión mutua permite que los subprocesos múltiples del programa utilicen el mismo recurso pero uno a la vez no simultáneamente.

Cuando un programa se inicia, solicita al sistema que cree un objeto de exclusión mutua para un recurso determinado. El sistema crea el objeto de exclusión mutua con un nombre o ID único. Cada vez que el subproceso del programa desea utilizar el recurso que ocupa, bloquea el objeto de exclusión mutua, utiliza el recurso y, después de su uso, libera el bloqueo de dicho objeto. Luego se permite que el siguiente proceso adquiera el bloqueo en el objeto de exclusión mutua.

Mientras tanto, un proceso ha adquirido el bloqueo en el objeto de exclusión mutua que ningún otro subproceso / proceso puede acceder a ese recurso. Si el objeto de exclusión mutua ya está bloqueado, el proceso que desea adquirir el bloqueo en el objeto de exclusión mutua debe esperar y el sistema lo pone en cola hasta que se desbloquee el objeto de exclusión mutua.

Diferencias clave entre semáforo y mutex

  1. El semáforo es un mecanismo de señalización, ya que las operaciones de espera () y señal () realizadas en la variable semáforo indican si un proceso está adquiriendo el recurso o liberando el recurso. Por otro lado, el mutex es un mecanismo de bloqueo, ya que para adquirir un recurso, un proceso necesita bloquear el objeto de mutex y, al liberar un proceso de recurso, tiene que desbloquear el objeto de mutex.
  2. El semáforo es típicamente una variable entera, mientras que, el mutex es un objeto .
  3. Semaphore permite que múltiples hilos de programas accedan a la instancia finita de recursos . Por otro lado, Mutex permite que múltiples subprocesos de programas accedan a un único recurso compartido, pero uno a la vez.
  4. El valor de la variable semáforo puede modificarse mediante cualquier proceso que adquiera o libere recursos realizando la operación de espera () y señal (). Por otro lado, el bloqueo adquirido en el objeto de exclusión solo puede liberarse mediante el proceso que ha adquirido el bloqueo en el objeto de exclusión.
  5. Los semáforos son de dos tipos que cuentan el semáforo y el semáforo binario que es bastante similar al mutex.
  6. El valor de la variable semáforo se modifica mediante la operación de esperar () y la señal (), aparte de la inicialización. Sin embargo, el objeto de silencio se bloquea o desbloquea por el proceso que adquiere o libera el recurso.
  7. Si todos los recursos son adquiridos por el proceso, y ningún recurso es libre, entonces el proceso que desea adquirir recursos realiza la operación de espera () en la variable semáforo y se bloquea hasta que el recuento del semáforo sea mayor que 0. Pero si ya hay un objeto de exclusión mutua bloqueado, entonces el proceso que desea adquirir esperas de recursos y el sistema lo pone en cola hasta que se libera el recurso y se desbloquea el objeto de exclusión mutua.

Conclusión:

El semáforo es una mejor opción en caso de que haya múltiples instancias de recursos disponibles. En el caso de un único recurso compartido, es una mejor opción.

Top