Sección Critica de un Exclusión mutua con espera ocupada Variables de
proceso Cerradura
- Se denomina sección crítica a
La exclusión mutua se refiere a que, si un proceso aquellas partes de los procesos está ocupado con la actualización de la memoria concurrentes que no pueden compartida en su región crítica, ningún otro Si se desea que un proceso entre en su ejecutarse de forma concurrente o, proceso entre a su región crítica y provoque región crítica, se analiza el valor de una que desde otro proceso se ven como problemas. variable de cerradura, si esta es cero, el si fueran una única instrucción proceso cambia el valor a uno y entra en la región crítica. Si el valor es uno, espera hasta que el valor sea cero y realiza el procedimiento anterior. Inconveniente: posibilidad de que se modifique el valor de la variable justo Existen varios métodos para lograr esta exclusión mutua: Modelo de sección critica • Deshabilitando interrupciones antes de una alternancia entre procesos. • Variables de candado • Solución de Peterson • Dormir y Despertar (Sleep y Wakeup) • Entre otras. Entrar_SC(esta_SC) /* Solicitud Desactivación de Interrupciones de ejecutar esta_SC *//* código de esta_SC */ Cada proceso desactiva todas sus interrupciones antes de entrar a su región crítica y los activa al salir de ella. Como Solución de Peterson Dejar_SC(esta_SC) /* Otro la CPU alterna entre procesos a través de las interrupciones proceso puede ejecutar esta_SC */ y del reloj, la misma no alternará con otros procesos. SIGUE LO SIGUIENTE: Inconvenientes: (1) ejecuta Entrar_SC(), y si la • Los procesos de usuarios no deben tener el poder de Antes de utilizar las variables compartidas, cada sección crítica está ocupada el desactivar las interrupciones. proceso llama a enter_region con su número de proceso espera; • La desactivación de las interrupciones sólo ocurre en una proceso, 0 ó 1 como parámetro. Esto provoca una sola CPU por lo que otras CPU tendrían acceso a la espera hasta que pueda entrar. Al terminar con (2) ejecuta la sección crítica; memoria compartida. ellas, el proceso llama a leave_region para indicar (3) ejecuta Dejar_SC(), • Se deben evitar las condiciones de competencia por lo finalización y permitir el ingreso de otro proceso si permitiendo que entre uno de los que es mejor que el núcleo sea quien desactive las es necesario. interrupciones. La llamada enter_region hace que una variable procesos en espera. (interested) sea 0 ó 1, lo que provocará la espera o no. Dormir y Despertar (Sleep y Wakeup) Monitores
• Dormir (sleep): llamada al sistema
que provoca el bloqueo del proceso que hizo la llamada (que será suspendido hasta que otro proceso lo Semáforos Los monitores poseen una propiedad despierte). especial que los hace útiles para lograr la • Despertar (Wakeup): tiene un exclusión mutua: sólo un proceso puede parámetro que es el proceso por estar activo en un monitor en un despertar. momento dado. Los monitores son una Los procesos se pueden comunicar construcción de lenguaje de entre sí mediante las primitivas de Un semáforo es una variable “S” entera programación, así que el compilador comunicación entre procesos, que se que toma valores negativos, sobre la cual sabe que son especiales y puede manejar utilizan para garantizar que dos aparecen definidas dos operaciones. las llamadas a procedimientos de procesos no se encuentren jamás al monitor de una forma diferente a como mismo tiempo dentro de sus 1. Wait (S) Si S>0 entonces S=S-1, en caso contrario se suspende la ejecución maneja otras llamadas procedimientos. regiones críticas, es decir la excusión mutua. del proceso este queda bloqueado en el Por lo regular, cuando un proceso invoca Primitivas de comunicación: semáforo “S” un procedimiento de monitor, las • Semáforos 2. Signal (S) si algún proceso ha sido primeras instrucciones del procedimiento • Monitores suspendido en el semáforo, se lo despierta verifican si hay algún otro proceso activo • Contadores de eventos y puede continuar su ejecución. En caso en ese momento dentro del monitor. Si • Transferencia de Mensajes contrario, S=S+1 así es, el proceso invocador suspende hasta que el otro proceso abandona el Los semáforos se emplean para permitir monitor. Si ningún otro proceso está el acceso a diferentes partes del programa usando el monitor, el proceso invocador (secciones críticas) donde se manipulan puede entrar. variables o recursos que deben ser accedidos de forma especial.