Mecanismos de Sincronización en Sistemas Operativos: Exclusión Mutua y Espera Ocupada
Tipos de Sincronización y sus Soluciones
Exclusión Mutua
Cuando los procesos desean utilizar un recurso no compartible, la sincronización necesaria entre ellos se denomina Exclusión Mutua.
Un proceso que está accediendo a un recurso no compartible se dice que se encuentra en su Sección Crítica (parte del código que utiliza un proceso en el acceso a un recurso no compartible). Si un proceso está en su sección crítica, los demás deberán esperar a que este termine.
Garantizar la exclusión mutua en la ejecución de las secciones críticas consiste en diseñar un protocolo de entrada y de salida mediante el cual se SINCRONICE LA ENTRADA DE LOS PROCESOS a sus secciones críticas.
Un esquema de procesos ejecutando en exclusión mutua sus secciones críticas sería el siguiente:
Condiciones para la Exclusión Mutua
Los protocolos de entrada y salida son porciones de código que deben cumplir estas condiciones para resolver satisfactoriamente el problema de la Exclusión Mutua:
- Exclusión Mutua: No pueden acceder dos procesos a la vez a su sección crítica (ejecución mutuamente exclusiva de las secciones críticas).
- Limitación en la Espera: De cada proceso para acceder a su sección crítica. Ninguno debe esperar en forma indefinida.
- Progreso de la Ejecución: Es decir, que cuando un proceso quiera ejecutar su sección crítica pueda hacerlo si esta está libre.
Condición de Sincronización
Otra situación donde es necesario coordinar la ejecución de procesos concurrentes sucede cuando un objeto de datos compartido está en un estado inapropiado para ejecutar una operación determinada. Cualquier proceso que intente realizar esta operación sobre el objeto debe ser retrasado hasta que el estado del objeto cambie por las operaciones de otros procesos. A este tipo de sincronización la llamamos Condición de Sincronización.
DEFINICIÓN: Podemos definir la condición de sincronización como la propiedad requerida de que un proceso no realice un evento hasta que otro proceso haya emprendido una acción determinada.
Implementación de la Sincronización
La Espera Ocupada (Busy Waiting) para la Exclusión Mutua
Esta implementación de la sincronización se basa en que un proceso espera mediante la comprobación continua del valor de una variable, manteniendo ocupada la CPU del sistema. Según el tipo de operaciones que se utilicen para desarrollar una solución basada en espera ocupada, podemos distinguir:
Soluciones Software
Las únicas operaciones atómicas que se consideran son las instrucciones de bajo nivel para leer y almacenar (load-store) de/en direcciones de memoria. Si dos instrucciones de este tipo se produjeran simultáneamente, el resultado sería la ejecución secuencial en un orden desconocido.
Soluciones Hardware
Se utilizan instrucciones especializadas que llevan a cabo una serie de acciones de forma indivisible, como leer y escribir, intercambiar el contenido de dos posiciones de memoria, etc.
Algoritmos Software Ineficientes y Fallos Comunes
Primer Intento Fallido
poco tolerante a fallos. Si un proceso falla, el otro quedará detenido (en espera indefinida).
Tercer Intento Fallido
Las variables C0 y C1 deben inicializarse a restoproceso, indicando que ningún proceso está ejecutando su sección crítica al comienzo de la ejecución de ambos. El protocolo de entrada consiste en un bucle donde se comprueba el valor de la variable correspondiente al otro proceso. Sin embargo, este algoritmo no garantiza la exclusión mutua, es decir, varios procesos pueden ejecutar su sección crítica al mismo tiempo.
Secuencia de Ejecución que Demuestra el Fallo:
- P0 ejecuta la instrucción a) y encuentra que C1 vale
restoproceso. - P1 ejecuta la instrucción a) y encuentra que C0 vale
restoproceso. - P0 asigna en SC a la variable C0 y entra en su sección crítica.
- P1 asigna en SC a la variable C1 y entra en su sección crítica.