Sistemas operativos modernos
programa, traer la instrucción y analizarla por software para dilucidar qué estaba ha ciendo cuando se presentó el fallo. 4. Una vez que se conoce la dirección virtual que causó el fallo, el sistema verifica que esa dirección sea válida y que su protección sea congruente con el acceso. Si no es así, se envía una señal al proceso, o éste es eliminado. Si la dirección es válida y no hubo fallo de protección, el sistema averigua si hay algún marco de página desocupado. Si no lo hay, se ejecuta el algoritmo de reemplazo de páginas para escoger una víctima. 5. Si el marco de página escogido está modificado, se calendariza la transferencia de la pá gina al disco y se efectúa una conmutación de contexto para suspender el proceso que causó el fallo y dejar que otro se ejecute mientras sucede la transferencia a disco. En to do caso, el marco se establece como ocupado para evitar que sea utilizado con otro fin. 6 . Una vez que el marco de página está limpio (sea de inmediato o después de escribir su contenido en disco), el sistema operativo consulta la dirección en disco donde está la página requerida y calendariza una operación de disco para traerla a la memoria. Mientras se está cargando la página, el proceso que causó el fallo sigue suspendido y se ejecuta otro proceso de usuario, si hay alguno disponible. 7. Cuando la interrupción de disco indica que llegó la página, las tablas de páginas se ac tualizan de modo que reflejen su ubicación y el marco se establece en estado normal. 8 . La instrucción que causó el fallo se revierte a su estado inicial y el contador de progra ma se ajusta de modo que apunte a esa instrucción. 9. El proceso que causó el fallo se calendariza y el sistema operativo regresa a la rutina en lenguaje ensamblador que lo invocó. 10. Esta rutina vuelve a cargar los registros y demás información de estado y regresa al es pacio de usuario para continuar la ejecución, como si no hubiera ocurrido ningún fallo. 4.7.3 Retroceso de instrucciones Cuando un programa hace referencia a una página que no está en la memoria, la instrucción que causó el fallo se detiene antes de terminar de ejecutarse y se efectúa un salto al sistema operativo. Una vez que el sistema operativo ha traído la página requerida, debe reiniciarse la instrucción que causó el salto. Esto no es tan fácil como suena. Para entender la naturaleza del problema en el peor de los casos, consideremos una CPU que tiene instrucciones con dos direcciones, como la Motorola 680x0 que se usa mucho en sis temas integrados. Por ejemplo, la instrucción MOV.L#6{A1),2(AO) ocupa 6 bytes (vea la figura 4-32). Para reiniciar la instrucción, el sistema operativo deberá de terminar dónde está el primer byte de la instrucción. El valor que tenía el contador de progra-
RkJQdWJsaXNoZXIy MjI4NDcx