next up previous contents
Next: Diseños del monitor y Up: Manejo de excepciones para Previous: Monitor:

Manejo de Fallas de Protección General

Las intrucciones privilegiadas, que ocasionan excepciones en la ejecución del hilo V86, se simulan con ayuda del núcleo de Mach. Estas instrucciones son: interrupción por software (INT), detener ejecución (HALT), activar y desactivar interrupción (CLI y STI), empilar y desempilar el registro de banderas (PUSHF y POPF), regresar de una instrucción de interrupción (IRET), lectura y escritura a puerto por carácter, palabra o cadena (IN, OUT, INS y OUTS), prefijo LOCK para manejo de la señal de control LOCK por parte del 8088/86, y para controlar el tamaño del operando en las operaciones de manejo de registro de banderas (OP_SIZE)6.1. La simulación de estas instrucciones se realiza de la siguiente manera:

INT
La instrucción INT ejecuta la rutina de servicio que está localizada en el vector de interrupciones. Internamente esta instrucción realiza operaciones sobre la pila, almacenando en ella el registro de segmento de código, el registro de apuntador a instrucción y el registro de banderas, y después carga los nuevos valores cs:eip del vector de interrupciones al que se hace referencia el argumento de INT. En la simulación, no se realizan estas tareas, ya que se manda a ejecutar directamente a las funciones que simulan las diferentes interrupciones y, por ende, no se manda nunca a ejecutar a la instrucción IRET. Lamentablemente, simular todas y cada una de estas funciones equivale a tener una emulación completa de la máquina DOS, y esto no se tiene contemplado en este trabajo de tesis. Así, la simulación que se implantó sólo hace llamados a la interrupción 0x10 (como un ejemplo de la forma de hacer las simulaciones de los dispositivos de entrada y salida), y se deja a trabajos futuros las simulaciones de las distintas interrupciones que se deseen implantar.

HALT
La instrucción HALT ocasiona que el procesador quede en un estado inactivo, hasta que se vuelva a activar con una señal de RESET. Como esta instrucción afecta directamente el estado del CPU, la simulación de esta instrucción no hace nada, es decir, incrementa en uno el valor del registro de apuntador a instrucción del hilo V86 y se le regresa el control para que intente ejecutar la proxima instrucción.

CLI
La instrucción CLI debe limpiar la bandera de interrupción (IF) del registro eflags del hilo V86. Sin embargo, en una máquina DOS, esta operación evita que el procesador atienda las interrupciones por hardware --provenientes del 8259A, que por lo general, reporta señales del teclado y del timer--. Debido a que en este trabajo de tesis no contempla la implantación de ninguno de estos hilos de control6.2, entonces se incrementa en uno el registro de apuntador de instrucción (eip) del hilo V86, es decir, se omite la instrucción CLI y se intenta ejecutar la próxima instrucción.

STI
La instrucción STI debe encender la bandera de interrupción del registro eflags del hilo V86. Como en el caso de la instrucción CLI, esta instrucción sólo tiene efecto cuando se tiene contemplado el manejo de las interrupciones por hardware. Así, en la simulación de esta instrucción se incrementa en uno el registro de apuntador de instrucción (eip) y se regresa el control al hilo V86 para que intente ejecutar la próxima instrucción.

PUSHF
Esta instrucción empila el registro de banderas del hilo V86 a la pila del proceso V86. Así, la simulación decrementa en dos el valor del registro apuntador de pila (esp) del hilo V86, y escribe en la nueva dirección ss:esp de la tarea V86, el contenido del registro de banderas del hilo V86.

POPF
La instrucción POPF carga en el registro de banderas del CPU, la primera palabra que se encuentre en el tope de la pila (ss:esp). La simulación de esta instrucción carga en el registro de banderas (eflags) del hilo V86, el valor que se este almacenado en la localidad de memoria (ss:esp) de la tarea V86, e incrementa en dos el valor del registro esp del hilo V86.

IRET
La instrucción IRET desempila los registros de banderas, el apuntador a instrucción esp y el segmento de código (cs) del tope de la pila. Esto es, regresa el control y el estado del procesador a la dirección referenciada en la pila. La simulación de esta instrucción asigna al registro eflags del hilo V86, el valor que está en la localidad ss:esp de la tarea V86. Después incrementa en 2 el valor del registro esp y valor de esta nueva dirección de memoria ss:esp de la tarea V86 se guarda en el registro eip del hilo V86. Posteriormente, vuelve a incrementar en 2 el valor del registro esp y el valor de esta dirección de memoria (también de la tarea V86) se almacena en el registro cs del hilo V86. Finalmente se regresa el control al hilo V86 para que reanude su ejecución en esta nueva localidad de memoria y con el valor del registro esp incrementado en 6 del valor que tenía antes de ejecutarse esta instrucción.

IN, INS
Estas instrucciones se encargan de leer de un puerto. En la simulación, estas instrucciones de lectura se omiten debido a que implican que se tenga que desarrollar la simulación de los principales puertos de la máquina DOS.

OUT, OUTS
Estas instrucciones se encargan de escribir a un puerto. En la simulación, estas instrucciones de escritura se omiten debido a que (como en el caso de las instrucciones IN e INS) implican que se tenga que desarrollar la simulación de los principales puertos de la máquina DOS.

LOCK
El prefijo LOCK se utiliza para que el procesador 8088/86 asegure la señal LOCK del bus, mientras ejecuta la siguiente instrucción. Debido a que en este trabajo de tesis no se pretende simular estas señales del CPU, principalmente porque esto carece de sentido, se ignora avanzado el registro eip del hilo V86 a la siguiente instrucción.

OP_SIZE
La instrucción OP_SIZE indica al CPU el tamaño del registro que se trabajará en las instrucciones PUSHF y POPF. Es decir, establece si se empilará o desempilará un registro de banderas de 2 bytes o de 4 bytes.

El proceso monitor debe tener la capacidad de leer y escribir en el espacio de direccionamiento del proceso V86, para realizar la simulación de las instrucciones especiales. Sin embargo, sabemos que las localidades de memoria son locales a cada proceso y, además, Mach les puede asignar atributos de lectura, escritura y ejecución a cada página de memoria de un espacio de direcciones. Se desarrollaron y probaron diferentes modelos para poder compartir el espacio de memoria donde se realiza la simulación.


next up previous contents
Next: Diseños del monitor y Up: Manejo de excepciones para Previous: Monitor:
Amilcar Meneses
2002-10-03