lunes, 12 de enero de 2009

Emulación 8086

Los procesadores IA-32 proporcionan dos maneras de ejecutar programas nuevos o heredados que están ensamblados y/o compilados para funcionar en un procesador Intel 8086: El modo real-address, y el modo virtual-8086. Cuando el procesador se enciende o se resetea, comienza en el modo real-address. Este modo de operación casi duplica exactamente el entorno de ejecución del procesador Intel 8086, con algunas extensiones. Virtualmente cualquier programa ensamblado y/o compilado para funcionar en Intel 8086 puede hacerlo en un procesador IA-32 en este modo. Cuando se funciona en modo protegido, el procesador puede cambiar al modo virtual-8086 para ejecutar programas 8086. Este modo duplica el entorno de ejecución del procesador Intel 8086, con extensiones. En el modo virtual-8086, un programa 8086 funciona como una tarea en modo protegido separada. Los programas 8086 heredados son capaces de funcionar bajo un sistema operativo que toma ventaja del modo protegido y de usar facilidades de este modo. La multitarea en el modo protegido permite tareas múltiples en el modo virtual-8086.
En el modo real-address, el procesador no interpreta los selectores de segmentos como indexados en una tabla de descriptores; en cambio, los usa directamente a direcciones lineales, como lo hace el procesador 8086. Cuando se usa la traducción de direcciones del estilo 8086, es posible especificar direcciones más largas que 1 MByte. El conjunto de registros disponible en el modo real-address incluye todos los registros definidos para el procesador 8086 y los nuevos registros introducidos mas tarde en los procesadores IA-32, como los registros de segmento FS y GS, los de depuración, etc. Cuando se opera en el modo real-address, el software tiene que proporcionar facilidades de administración de excepciones y interrupciones que estén separados desde los proporcionados en el modo protegido. Los procesadores IA-32 administran interrupciones y excepciones en el modo real-address de modo similar a como las administran en modo protegido. Cuando un procesador recibe una interrupción o genera una excepción, usa el número de vector de la interrupción o de la excepción como índex en la tabla de interrupciones. La entrada en la tabla de vectores de interrupción proporciona un puntero a un procedimiento de administración de interrupciones o de excepciones.
El modo virtual-8086 es actualmente un tipo especial de tarea que funciona en modo protegido. Cuando el sistema operativo cambia a una tarea en modo virtual-8086, el procesador emula un procesador Intel 8086. La mayor diferencia entre este modo y el real-address es que en el modo virtual-8086 la emulación 8086 usa algunos servicios del modo protegido. Como en el modo real-address, cualquier programa nuevo o heredado que ha sido ensamblado o compilado para funcionar en el procesador Intel 8086 funcionará en una tarea en modo virtual-8086. El procesador se pone en modo virtual-8086 cuando se activa la bandera VM (virtual machine) en el registro EFLAGS. Esta bandera sólo se puede activar cuando el procesador cambia a una tarea nueva en modo protegido o retoma el modo virtual-8086 vía una instrucción IRET. El software del sistema no puede cambiar el estado de la bandera VM directamente en el registro EFLAGS. El procesador puede desactivar el modo virtual-8086 sólo a través de una interrupción o excepción. Las siguientes son situaciones que fuerzan al procesador a salir de ese modo:
- El procesador sirve una interrupción por hardware generada para señalar la suspensión de la ejecución de la aplicación virtual-8086.
- El procesador sirve una excepción o una interrupción causada por la ejecución de código de la tarea virtual-8086 o sirve una interrupción hardware que pertenece a una tarea virtual-8086.
- Un reset de hardware iniciado por los pines RESET o INIT es un tipo especial de interrupción. Entonces el procesador abandona el modo virtual-8086 y entra en el modo real-address.
- La ejecución de una instrucción HLT en el modo virtual-8086 causa una falta de protección general, que el administrador del modo protegido genera y manda al monitor virtual-8086.
Cuando el procesador recibe una interrupción o detecta una excepción mientras está en modo virtual-8086, invoca a un administrador de interrupciones o de excepciones, al igual que lo hace estando en el modo real-address. Este administrador y el mecanismo usado para invocarlo dependen de la clase de interrupción o de excepción detectada, del estado de varias banderas del sistema y de varios campos.
Los IA-32 soportan banderas VIF (virtual interrupt flag) y VIP (virtual interrupt pending) en el registro EFLAGS en modo protegido activando la bandera PVI en el registro CR4. Esto permite a las aplicaciones que funcionen en el nivel 3 de privilegios, ejecutar las instrucciones CLI y STI sin que se genere una excepción de protección general o sin que afecte a las interrupciones por hardware.

No hay comentarios: