En la informática x86 , el modo irreal , también llamado modo real grande , modo real plano o modo vudú [1] es una variante del modo real , en el que uno o más descriptores de segmento se han cargado con valores no estándar, como límites de 32 bits que permiten el acceso a toda la memoria. Al contrario de lo que sugiere su nombre, no es un modo de direccionamiento independiente en el que los procesadores x86 puedan operar. Se utiliza en los procesadores 80286 y posteriores x86.
Por razones de eficiencia, el 80286 y todos los procesadores x86 posteriores utilizan la dirección base, el tamaño y otros atributos almacenados en su caché de descriptor de segmento interno siempre que calculan direcciones de memoria efectivas, incluso en modo real. Por lo tanto, una modificación del descriptor de segmento interno permite alterar algunas propiedades de los segmentos en modo real, como el tamaño de la memoria direccionable. Esta técnica se ha vuelto ampliamente utilizada y es compatible con todos los procesadores Intel. [2]
Un programa en modo irreal puede llamar a código de 16 bits programado para modo real (BIOS, kernel DOS y controladores) sin necesidad de realizar ninguna prueba . Esto hace que un controlador en modo irreal sea más simple que un controlador DPMI . Sin embargo, el modo irreal es incompatible con sistemas operativos en modo protegido, como Windows 3.x/9x/NT y OS/2.
El modo real grande tiene un segmento de código de 1 MiB y un segmento de datos de 4 GiB. [3] [4]
HIMEM.SYS utiliza esta característica (variantes 286 y 386) para abordar la memoria extendida , [5] a menos que DOS se cambie para ejecutarse en un modo 8086 virtual que es incompatible con el modo irreal.
Uno de los pocos juegos (si no el único) que utilizó el modo irreal fue Ultima VII . [6] [7]
El código BIOS utiliza el modo irreal , ya que es el modo inicial de los procesadores Intel modernos. [8] Además, el modo de administración del sistema (SMM) en los procesadores Intel 386SL y posteriores coloca al procesador en un modo real enorme. [9]
Algunos cargadores de arranque (como LILO ) utilizan el modo irreal para acceder hasta 4 GiB de memoria.
El microprocesador 80286 se puede poner en modo irreal solo con la ayuda de la instrucción no documentada LOADALL para modificar los registros base del segmento oculto para que apunten a la ubicación de memoria de origen o destino por encima de 1 MiB. [5]
Para poner un microprocesador 80386 o superior en modo irreal, un programa debe primero entrar en modo protegido , buscar o crear un descriptor plano en la GDT o LDT , cargar algunos de los registros del segmento de datos con el "selector" de modo protegido respectivo y luego volver al modo real. Después de volver al modo real, el procesador continuará utilizando los descriptores almacenados en caché tal como se establecieron en el modo protegido, lo que permite el acceso a 4 GiB de memoria extendida desde el modo real. [4]
A partir del 80386, los programas en modo real pueden utilizar los registros de 32 bits con el prefijo de anulación del tamaño de dirección. [10] Esto permite que los programas utilicen una dirección como DS:[EBX]. En el modo real normal, se produce un error si EBX supera 0xFFFF. En el modo irreal, se permite el acceso.
Como se describió anteriormente, el modo irreal generalmente implica el uso de uno o más selectores de datos para abordar los datos en la memoria de manera más eficiente. Esta ha sido una práctica común y a menudo se la denomina "modo real plano" [11] o "modo real grande". [12] El término "modo irreal" fue introducido en 1991 por Rakesh K. Agarwal. [13]
El "modo real enorme" (nombrado en la lista de interrupciones de Ralf Brown) o modo "irREAL" (nombrado por Tomasz Grysztar) agrega la capacidad de ejecutar código de 32 bits con un segmento de código de 4 GiB. Esto se logra cargando el selector de código (CS) desde un descriptor que tenga el atributo de 32 bits (bit "D") establecido en 1. Este modo permite evitar los prefijos de anulación del tamaño de operando que normalmente se requieren cuando se usa direccionamiento de 32 bits en un segmento de código de 16 bits, pero es más difícil de configurar debido a la interacción con las interrupciones. [14] [4]
El uso de un CS de 32 bits fue descrito en el artículo de Agarwal de 1991 en el que se introdujo el término "modo irreal". [13] Este modo se utiliza en el FASM de código abierto de Grysztar y en Helix RM386, un extensor DOS comercial incluido en los controladores de ratón de Logitech. Grysztar escribió una descripción de las técnicas utilizadas para entrar en este modo y gestionar las interrupciones en 2010. También informa que la mayoría de las CPU que probó admiten este modo previamente desconocido, con la excepción de una CPU de modelo desconocido ("Creo que fue fabricada por Cyrix ") y, en un informe de usuario posterior, los emuladores Bochs y DOSBox . [15]
[…] El modo Unreal se volvió tan ampliamente utilizado […] que Intel se vio obligada a admitirlo en todos los procesadores posteriores, aunque su presencia nunca fue documentada […]
El procesador carga un modo "Unreal" de estado del sistema definido arquitectónicamente .