Sistemas operativos modernos

guiente_ramrajiesocupada + l, que es 8 , y establece in a 8 . Ahora el directorio de spooler es internamente consistente, así que el demonio de impresión no notará nada raro, pero el proceso B nunca obtendrá su salida impresa. El usuario B permanecerá en el cuarto de impresoras duran­ te años, alimentando la esperanza de recibir una salida que nunca llegará. Situaciones como ésta, en la que dos o más procesos están leyendo o escribiendo datos compartidos y el resultado final depende de quién se ejecuta y precisamente cuándo, se denominan condiciones de competencia. No es nada divertido depurar programas que contienen condiciones de competencia. Los resulta­ dos de casi todas las pruebas son perfectos, pero de vez en cuando sucede algo raro e inexplicable. 2.3.2 Regiones críticas ¿Cómo evitamos las condiciones de competencia? La clave para evitar problemas aquí, y en muchas otras situaciones en las que se comparte memoria, archivos o cualquier otra cosa, es hallar alguna forma de impedir que dos o más procesos lean o escriban los datos compartidos al mismo tiempo. En otras palabras, lo que necesitamos es exclusión mutua, es decir, alguna forma de aseguramos de que si un proceso está utilizando una variable compartida o un archi­ vo compartido, los demás procesos no podrán hacer lo mismo. El problema anterior se presen- tó.porque el proceso B comenzó a usar una de las variables compartidas antes de que el proceso A terminara de usarla. La decisión de qué operaciones primitivas son apropiadas para lograr la exclusión mutua es una importante cuestión de diseño en cualquier sistema operativo, y es un tema que examinaremos con mucho detenimiento en las siguientes secciones. El problema de evitar condiciones de competencia también puede formularse de manera abstracta. Una parte del tiempo, los procesos están ocupados realizando cálculos intemos y otras cosas que no dan pie a condiciones de competencia. No obstante, hay ocasiones en que un proceso tiene que acceder a memoria o archivos compartidos, o realizar otras tareas críticas que pueden generar competencia. La parte del programa en la que se tiene acceso a la memo­ ria compartida se denomina región crítica o sección crítica. Si pudiéramos organizar las co­ sas de modo que dos procesos nunca estuvieran en sus regiones críticas al mismo tiempo, podríamos evitar las competencias. Aunque este requisito evita las condiciones de competencia, no basta para que procesos pa­ ralelos cooperen de forma correcta y eficiente empleando datos compartidos. Necesitamos que se cumplan cuatro condiciones para tener una buena solución: 1. Dos procesos no pueden estar al mismo tiempo dentro de sus regiones críticas. 2. No pueden hacerse suposiciones sobre las velocidades ni el número de las CPUs. 3. Ningún proceso que se esté ejecutando afuera de su región crítica puede bloquear a otros procesos. 4. Ningún proceso deberá tener que esperar de manera indefinida para entrar en su región crítica. En un sentido abstracto, el comportamiento que necesitamos se muestra en la figura 2-19. Aquí el proceso A entra en su región crítica en el tiempo Tj. Un poco después, en el tiempo T 2 ,

RkJQdWJsaXNoZXIy MjI4NDcx