Next: Diseños del monitor y
Up: Manejo de excepciones para
Previous: Monitor:
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: Diseños del monitor y
Up: Manejo de excepciones para
Previous: Monitor:
Amilcar Meneses
2002-10-03