Exclusión mutua

Un mutex (en inglés  : exclusión mutua , exclusión mutua ) es una primitiva de sincronización utilizada en la programación de computadoras para evitar que los recursos compartidos con un sistema se utilicen simultáneamente. Su implementación varía según el sistema (enmascaramiento de interrupciones, lectura / escritura en un ciclo, etc.)

Estos algoritmos permiten regular el acceso a los datos, por ejemplo, permitiendo que solo una rutina acceda a ellos a la vez.

Definición

Un Mutex MMS es una primitiva de sincronización que se utiliza en la programación de computadoras para evitar que los recursos compartidos de un sistema se utilicen al mismo tiempo.

Algunos algoritmos usan un estado para ordenar la ejecución: los mutex deben saber si los programas en cuestión están ocupados o si han terminado y están en espera ( espera ). Tales algoritmos son, por ejemplo:

La mayoría de los mutex tienen efectos secundarios, por ejemplo, semáforos (mutex con un contador) que pueden bloquear la ejecución, crear cuellos de botella o incluso no cumplir su función al permitir el acceso a los datos protegidos. Otro efecto es el bloqueo total de recursos, si el programa que los utilizó no ha informado al sistema que ya no los necesita.

Enclavamiento

El punto muerto (Inglés punto muerto ) se produce, por ejemplo, cuando el hilo T1 ya habiendo adquirido el recurso R1 está solicitando acceso a un recurso R2, mientras que la T2 hilo, ya habiendo adquirido el recurso R2, acceso de la aplicación al recurso R1. Cada uno de los dos subprocesos espera la liberación del recurso propiedad del otro. Por tanto, la situación está bloqueada.

Existen varios métodos para evitarlos:

También puede ocurrir un interbloqueo si un solo hilo solicita acceso a un recurso que ya ha adquirido, algunas implementaciones como el mutex "rápido" de Linux bloquearán el hilo. La implementación puede manejar esta situación con un mutex reentrante o detectando esta situación e indicando un error.

El interbloqueo no se limita a primitivas de sincronización como mutex, también puede ocurrir durante inversiones de prioridad como parte de la programación de tareas.

Un problema real: Mars Pathfinder

En 1997, la misión Mars Pathfinder encontró un problema cuando el robot ya estaba en Marte . Después de un tiempo, los datos se pierden sistemáticamente. Luego, los ingenieros descubrieron un error relacionado con la sincronización de varias tareas. Los elementos incriminados fueron los siguientes:

A veces sucedió que la escritura (prioridad baja) se apropió del mutex. La administración de bus (alta prioridad) estaba esperando este mutex. El cambio de tareas dejó en funcionamiento la rutina de comunicación (prioridad media). Sin embargo, durante este tiempo, el mutex permaneció bloqueado ya que los recursos se asignaron a la rutina de baja prioridad. Por lo tanto, la gestión del bus ya no se pudo ejecutar y después de un cierto tiempo de espera (una protección insertada por los ingenieros a través de un perro guardián ), el sistema realizó un reinicio. Este problema se conoce como inversión de prioridades .

El problema no era crítico y el código se corrigió de forma remota. Sin embargo, en otras situaciones, las consecuencias podrían haber sido catastróficas. Luego se observó que el problema ya había surgido durante las pruebas sin haber sido corregido.

Ver también

Artículos relacionados

Referencias

enlaces externos