Sistemas operativos modernos
2.3.7 Monitores Con semáforos, la comunicación entre procesos parece fácil, ¿no? De ninguna manera. Exami nemos con detenimiento en la figura 2-24 el orden de los down antes de insertar o sacar ele mentos del búfer. Supongamos que se invierte el orden de los dos down del código del productor, de modo que mutex se decremente antes que vacias, no después. Si el búfer estuvie ra lleno por completo, el productor se bloquearía y mutex se establecería a 0. Por lo tanto, la siguiente vez que el consumidor tratara de tener acceso al búfer ejecutaría down con mutex, que es O, y también se bloquearía. Ambos procesos seguirían bloqueados de manera indefini da y ya no se efectuaría más trabajo. Esta lamentable situación se denomina bloqueo irre versible. Estudiaremos este tipo de bloqueos con detalle en el capítulo 3. Señalamos el problema para subrayar el cuidado que hay que tener al usar semáforos. Un sutil error y todo se paralizará. Es como programar en lenguaje ensamblador, sólo que peor, porque los errores son condiciones de competencia, bloqueos irreversible y otras formas de comportamiento impredecibles e irreproducibles. A fin de facilitar la escritura de programas correctos, Hoare (1974) y Brinch Hansen (1975) propusieron una primitiva de sincronización de más alto nivel llamada monitor. Sus propuestas presentan pequeñas diferencias, como describimos a continuación. Un monitor es una colección de procedimientos, variables y estructvu-as de datos que se agrupan en un tipo especial de módu lo o paquete. Los procesos pueden invocar a los procedimientos de un monitor cuando lo deseen, pero no pueden acceder en forma directa a sus estructuras de datos internas desde procedimien tos declarados fuera de dicho monitor. La figura 2-26 ilustra un monitor escrito en un lenguaje imaginario, Pascal Simple. monitor ejemplo integer i; conditíon c; procedure productor {); end; procedure consumidor {); end; end monitor; Figura 2-26. Un monitor. Los monitores tienen una propiedad importante que los hace útiles para lograr exclusión mutua: sólo un proceso puede estar activo en un monitor a la vez. Los monitores son una cons-
RkJQdWJsaXNoZXIy MjI4NDcx