Sistemas operativos modernos

ma cuando se efectuó el salto dependerá de qué operando causó el fallo y de la forma en que se implementò el microcódigo de la CPU. M0VE.L#6(A1), 2(A0) \< ---------- 16 bits---------- 1 1000 1002 1004 MOVE Código de operación Primer operando Segundo operando Figura 4-32. Instrucción que causó un fallo de página. En la figura 4-32 tenemos una instrucción que comienza en la dirección 1000 y hace tres referencias a la memoria: a la palabra de instrucción misma y a dos operandos. Dependiendo de cuál de estas tres referencias haya causado el fallo de página, el contador de programa po­ dría ser 1000, 1002 o 1004 en el momento del fallo. A menudo es imposible para el sistema operativo determinar de manera inequívoca dónde comenzó la instrucción. Si el contador de programa era 1002 en el momento del fallo, el sistema operativo no podrá saber si la palabra que está en 1002 es una dirección de memoria asociada con una instrucción que está en 1000 (por ejemplo, la ubicación de un operando) o el código de operación de una instrucción. Aunque este problema es grave, podría ser peor. Algunos modos de direccionamiento de la 680x0 usan autoincremento, lo que implica que un efecto colateral de ejecutar la instrucción es incrementar uno o más registros. Las instrucciones que utilizan el modo de autoincremento también pueden causar fallos. Dependiendo de los detalles del microcódigo, el incremento po­ dría efectuarse antes de la referencia a la memoria, en cuyo caso el sistema operativo deberá decremeniar el registro por software antes de reiniciar la instrucción. O bien, tal autoincremen- to podría realizarse después de la referencia a la memoria, en cuyo caso no se habrá efectuado aún en el momento de la interrupción de sistema, y el sistema operativo no deberá anularlo. También existe el modo de autodecremento y causa un problema similar. Los detalles preci­ sos de si se han efectuado o no los autoincrementos y autodecrementos antes de las referen­ cias a memoria correspondientes podrían diferir de una instrucción a otra y de un modelo de CPU a otro. Por fortuna, en algunas máquinas los diseñadores de la CPU proporcionan una solución, por lo regular en forma de un registro interno oculto en el que se copia el contador de progra­ ma justo antes de que se ejecute cada instrucción. Estas máquinas también podrían tener un se­ gundo registro que indica cuáles registros ya se autoincrementaron o autodecrementaron, y en cuánto. Con esta información, el sistema operativo puede deshacer sin ambigüedad todos los efectos de la instrucción que causó ei fallo para poder reiniciarla desde el principio. Si no cuen­ ta con esta información, el sistema operativo tendrá que hacer malabarismos para determinar qué sucedió y cómo corregir la situación. Es como si los diseñadores del hardware no hubie­ ran hallado el modo de resolver el problema y le hubieran dicho a quienes escribieron el siste­ ma operativo que lo resolvieran ellos. Qué simpáticos.

RkJQdWJsaXNoZXIy MjI4NDcx