Estaba leyendo esta pregunta vinculada y me destacaron los siguientes párrafos:
Por ejemplo, x86 y 68000 tenían instrucciones que accedían a la memoria dos o más veces. Cada acceso a la memoria puede causar un error de página. Por lo tanto, la CPU debe revertir la instrucción incompleta y guardar el estado suficiente para volver a ejecutar la instrucción desde el inicio, o guardar el estado suficiente para continuar y continuar con la instrucción incompleta. En cualquier caso, eso podría ser millones o incluso miles de millones de instrucciones más adelante, con otras instrucciones intermedias que también presenten fallas de página.
... Entonces, las 'excepciones de instrucciones incompletas' guardan un estado diferente en la pila y, por lo tanto, deben manejarse de manera diferente para las interrupciones normales.
Hoy en día, las arquitecturas de CPU, excepto x86 en general, no permiten múltiples accesos de memoria por instrucción. Dicho esto, me pregunto históricamente qué modos de direccionamiento y el estado de la CPU (como un error de página en medio de una instrucción) requerirán que se guarde un estado especial para restaurar el estado del procesador. Además, ¿qué estado de la CPU tendría que guardarse conceptualmente?
Para el resto de esta pregunta, suponga que tengo una CPU que reinicia una instrucción en fallo de página (x86), y otra que se detiene en medio de una instrucción en fallo de página (68k).
También asuma que estas CPU son similares a CISC en orden; permiten que ambos src y dst sean operandos de memoria para datos en movimiento y las operaciones aritméticas pueden acceder a la memoria directamente. Esto crea un ISA donde las insns pueden tener múltiples accesos de memoria. Además, ignorar las complicaciones causadas por la canalización. Preguntaré sobre los casos de x86, como aludido a , como una pregunta separada.
Puedo pensar en solo dos modos de direccionamiento histórico mal comportados, antes del decremento previo y posterior al incremento. Además, una instrucción que abarca un límite de página puede causar problemas.
- Pre-decremento / Post-incremento
- En una CPU de "reinicio en fallo de página", el estado para un decremento con fallas tendría que poder revertir el registro dec / incrementado, independientemente del motivo por el cual la instrucción falló (abarcar límite de página o fallo de página en el acceso); el decremento se produciría antes de cualquier acceso a la memoria, pero se producirá un incremento entre el acceso a la memoria en MOV.
-
La instrucción abarca páginas
- En la CPU "reinicio en fallo de página", es posible que ya se haya iniciado una instrucción mientras esperando los bytes de instrucciones restantes. Así que el límite de instrucción necesita para ser conocido para recuperar (así como el estado para revertir los efectos secundarios del direccionamiento del insn modo) después de que se ejecute el manejador de errores de página.
-
AFAICT, el único estado que debe guardarse en una CPU que "se detiene en medio de una inserción en una falla" es "cuán lejos avanzó la instrucción" antes de la falla, y continúa desde ese punto, independientemente de la razón de la culpa. No es necesario revertir los registros, y ni siquiera creo que se deba guardar la "razón de la falla".
¿Mi explicación / comprensión es precisa? ¿Debo considerar algún otro estado de CPU y modos de direccionamiento (más sus combinaciones)?