Modo virtual 8086
El modo Virtual 8086 (V86, VM86, a veces solo modo virtual ) es un modo de direccionamiento para los procesadores de la familia x86 compatible con el progenitor de la familia: el procesador Intel 8086 . Es un submodo de protected . Apareció por primera vez en el procesador 80386 y estaba destinado principalmente a crear el llamado. " máquinas DOS virtuales ", entornos virtuales para ejecutar aplicaciones del sistema operativo MS-DOS que dominaba el mundo de las computadoras personales en ese momento. Es el primer intento de Intel Corporation de introducir tecnologías de virtualización de hardware en sus procesadores .
Características
La tarea virtual 8086 es una tarea normal en modo protegido con las siguientes características:
- El modo se activa configurando el indicador EFLAGS.VM mediante una instrucción privilegiada (IRET, JMP <tarea>) (un comando POPF sin privilegios, incluso cuando se ejecuta en el nivel de privilegio 0, no cambia el estado de este indicador).
- La dirección, como el modo real , es de dos componentes, y consta de un número de párrafo de 16 bytes de 16 bits que proporciona la dirección base del segmento y un desplazamiento de 16 bits dentro del segmento;
- Según el formato de la dirección, solo se puede direccionar el megabyte de memoria más bajo (+65520 bytes HMA); sin embargo, debido a la paginación, se pueden asignar páginas de memoria arbitrarias a esta área, lo que permite realizar múltiples tareas para tareas de DOS;
- La tarea se ejecuta con los privilegios más bajos en el anillo 3.
- Las interrupciones son manejadas por controladores de sistema operativo en modo protegido normales. La tabla de vectores de interrupción en la dirección 0 no se usa (a menos que la extensión VME esté activa). Un módulo del sistema operativo, a menudo denominado monitor V86, puede emular una interrupción en modo real accediendo mediante programación a esta tabla;
- El valor del campo EFLAGS.IOPL cambia. En el modo V86, se usa para interceptar algunas instrucciones (CLI, STI, PUSHF, POPF, INT, IRET), y la interceptación de E/S requiere el uso de un mapa de bits de habilitación de puerto en el segmento de estado de la tarea;
Extensiones
Comenzando con el procesador Pentium, se introdujeron funciones opcionales en el modo V86: una tabla de redirección de interrupciones y virtualización del indicador de interrupción. Ahora el procesador, sin la intervención del sistema operativo, podría usar directamente la tabla de vectores de interrupción en la dirección 0, y no para todas las interrupciones, sino solo para aquellas que el sistema operativo permitía usar un mapa de bits especial (similar a un mapa de E/S) en la tarea. segmento de estado. La virtualización de indicadores de interrupción también reduce la cantidad de excepciones que el sistema operativo debe manejar, lo que a su vez afecta el rendimiento general.
V86 y x86-64
Los procesadores x86-64 solo admiten V86 en modo heredado, no en modo largo. En modo largo, el indicador EFLAGS.VM simplemente se ignora. Por lo tanto, para admitir tareas de DOS virtuales, se requiere cambiar al modo heredado, junto con un reinicio doble de la MMU . Y dado que el papel de DOS y sus aplicaciones ha desaparecido en gran medida en estos días, los sistemas operativos x86-64 no incluyen este tipo de compatibilidad con V86. Sin embargo, algunas herramientas modernas de virtualización de hardware le permiten virtualizar tanto el modo real como V86, lo que da como resultado una virtualización dual.
Soporte del sistema operativo
- MS-DOS : en DOS, el modo V86 se utilizó para emular la memoria extendida de acuerdo con el estándar LIM/EMS mediante un controlador especial EMM386 . Dado que la traducción de páginas es posible en este modo, a diferencia del modo real, la memoria extendida se emuló al mostrar memoria adicional en la ventana de dirección UMB/EMS. Además, el controlador permitía colocar datos y programas residentes en direcciones UMB.
- OS / 2 : OS / 2 incluía una máquina DOS virtual normal.
- Windows : a partir de la versión 3.0, Windows introdujo el modo avanzado 386, que le permitía crear tareas V86 para programas DOS ("DOS en una ventana").
- Linux : el sistema operativo Linux / x86 admite la llamada al sistema vm86(), que el programa DOSEMU utiliza activamente , una implementación gratuita de una máquina virtual DOS (recientemente reemplazada por el emulador DOSBox , ya que la emulación, a pesar de los grandes costos de recursos, es más precisa simula el funcionamiento de una computadora, lo cual era importante para los programas de esa época, a menudo refiriéndose directamente al hardware).
- FreeBSD - FreeBSD/i386 tiene soporte V86 y un programa doscmd incorporado, que tiene muchas menos funciones que DOSEMU, y por lo tanto prácticamente no se usa.