Sistemas operativos modernos
ca del kemeh el código del kemel sólo tiene que inhabilitar las interrupciones antes de usar la tabla. Luego puede efectuar su trabajo a sabiendas de que podrá terminar sin que algún otro proceso se cuele y use la tabla antes de que el primero termine. En un multiprocesador, la in habilitación de interrupciones sólo afecta a la CPU que la efectúa. Las demás siguen funcio nando en forma normal y tienen acceso a la tabla crítica. Por ello, es necesario utilizar un protocolo de mutex apropiado y todas las CPUs deben respetarlo para garantizar que la exclu sión mutua funcione. El corazón de cualquier protocolo de mutex práctico es una instrucción que permite ins peccionar una palabra de memoria y asignarle un valor en una sola operación indivisible. En la figura 2-22 vimos cómo se usa TSL (probar y establecer bloqueo; test and set lock) para im plementar regiones críticas. Como explicamos antes, lo que hace esta instrucción es leer una palabra de memoria y almacenarla en un registro. Al mismo tiempo, la instrucción escribe un 1 (o algún otro valor distinto de cero) en la palabra de memoria. Desde luego, se requieren dos ciclos de bus para realizar la lectura y la escritura de la memoria. En un uniprocesador, en tan to la instrucción no pueda interrumpirse a la mitad, TSL siempre funciona como es debido. Ahora pensemos en lo que podría suceder en un multiprocesador. En la figura 8-10 se muestra la temporización de peor caso, en la que la palabra de memoria 1000 , que se está usan do como bloqueo, tiene inicialmente el valor 0. En el paso 1, la CPU l lee la palabra y obtie ne un 0. En el paso 2, antes de que la CPU l tenga oportunidad de escribir l en la palabra, la CPU 2 entra y la lee, obteniendo un 0. En el paso 3, la CPU 1 escribe un l en la palabra. En el paso 4, la CPU 2 también escribe un 1 allí. Ambas CPUs obtuvieron un cero al ejecutar la ins trucción TSL, así que ambas tienen acceso a la región crítica y la exclusión mutua falla. La palabra CPU 1 1000 Memoria CPU 2 3. La CPU 1 escribe un 1 4. La CPU 2 escribe un 1 Bus Figura 8-10. La instrucción T S L puede fallar si no es posible bloquear el bus. Estos cuatro pasos muestran una serie de sucesos que ilustran el fallo. Para evitar este problema, la instrucción TSL primero debe bloquear el bus, para impedir que otras CPUs accedan a él, luego efectuar ambos accesos a la memoria y, por último, desbloquear el bus. Por lo regular, el bus se bloquea solicitándolo con el protocolo de solicitud de bus normal y estableciendo en 1 lógico alguna línea especial del bus hasta que los dos ciclos se efectúan. Mientras esta línea especial tenga un l lógico, a ninguna otra CPU se concederá acceso al bus. Esta instrucción sólo podrá impiementarse en un bus que tenga las líneas necesarias y el proto-
RkJQdWJsaXNoZXIy MjI4NDcx