- Modo irreal
-
Por razones de eficacia, el 80286 y posteriores procesadores X86 usan la dirección base almacenada en su cache de descriptor interno siempre que se esté accediendo la memoria, independientemente de si están operando en modo real o modo protegido. El "selector", es decir, el "número de segmento" de 16 bits visible al programador es usado una vez, cuando se recarga un registro de segmento para actualizar varios campos del "descriptor" respectivo, y después es simplemente descartado.
A diferencia del modo real, el modo protegido y el modo largo, el modo irreal no es un modo de direccionamiento separado en el que los procesadores x86 o x86-64 pueden operar. En lugar de ello, el modo irreal, también llamado modo real grande o modo real plano, es una variante del modo real (PE=0) en la cual unos o más registros de segmento han sido cargados con direcciones y límites 32 bits.
Para activar el modo irreal, el programa tiene que entrar en modo protegido, localizar un descriptor plano en el GDT o LDT o crear alguno, cargar algunos de los registros de segmento con el respectivo selector de modo protegido, entonces se retorna del modo protegido al modo real. Cuando se está de nuevo en el modo real, el procesador continuará usando los descriptores del cache como habían quedado establecidos en el modo protegido, por lo menos hasta que sean recargados los registros de segmento, permitiendo así el acceso a 4 GB de memoria extendida desde el modo real.
¡Sin embargo, la trampa es que la recarga del descriptor de segmento del cache, que ahora contiene valores "irreales", puede ocurrir asincrónicamente dentro de un manejador de excepción o interrupción, y después, incluso si el manejador intenta recargar correctamente el segmento antes del IRET (retornando de la excepción o interrupción), él fallará pues el descriptor oculto sería recargado bajo reglas del modo real, resultando en la pérdida del descriptor plano y una catástrofe inminente!. Por lo tanto, o se prohíben las interrupciones mientras se están accediendo las direcciones "irreales", que puede ser solamente por una pequeña duración, o se usa un registro de segmento (FS o GS) que esté absolutamente garantizado que no serán tocados por el Sistema operativo, el BIOS, o cualquier driver.
En un principio, este modo era considerado como un bug, pero más adelante se convirtió en una técnica estándar para los procesadores x86 y x86-64.
Algunos DOS Extenders usaron esta característica para direccionar la memoria alta. Fue usado por muchos juegos de computadora entre los años 1990 y 1995, debido a que permitió a los programadores usar más memoria que en el modo real, la cual estaba restringida a 1 MB (640 KB usables), además, todavía manteniendo el acceso al sistema operativo DOS, que no trabaja en modo protegido. Después de la introducción del modo irreal de Windows 95 rápidamente cayó en desuso pues los programas que lo usaban no podían correr en el DOS Prompt de Ms-Windows, estos programas requerían, en Windows 95 y 98, "Reiniciar en modo MS-DOS", y no podían correr para nada en sistemas Windows NT, 2000 y XP. Para esos sistemas operativos, la única manera de correr los programas diseñados para el modo irreal era un emulador como el DOSBox.
Véase también
- Modo real — Modo irreal — Modo 8086 virtual — Modo protegido — Modo de Gerencia del Sistema — Modo largo
- x86
- Lenguaje ensamblador x86
Categoría:- Modos de operación de los microprocesadores x86
Wikimedia foundation. 2010.