stringtranslate.com

Modo irreal

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.

Mecanismo

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]

Usos

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.

Habilitar el modo irreal

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.

Variantes del modo irreal

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]

Código de 32 bits

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]

Véase también

Referencias

  1. ^ Salihun, Darmawan (16 de septiembre de 2013). "Inicialización del mapa de direcciones del sistema en la arquitectura x86/x64, parte 1: sistemas basados ​​en PCI" (PDF) . Consultado el 19 de agosto de 2019 .
  2. ^ Gutmann, Peter (2004) [2003]. Arquitectura de seguridad criptográfica: diseño y verificación. Springer Science & Business Media . p. 58. ISBN 978-0-387-95387-8. Consultado el 4 de enero de 2017. […] 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 […]
  3. ^ "Gráfico de modos". Archivado desde el original (JPG) el 18 de enero de 2023.
  4. ^ abc «Modo Unreal». Archivado desde el original el 3 de enero de 2017. Consultado el 18 de febrero de 2015 .
  5. ^ ab Necasek, Michal (18 de marzo de 2011). "HIMEM.SYS, modo irreal y LOADALL". Museo OS/2 . Archivado desde el original el 3 de enero de 2017. Consultado el 3 de enero de 2017 .
  6. ^ Riiser, Haakon. «HIMEM.SYS y el modo real irreal/plano, EMM386 y UMB». Grupo de noticias : comp.os.msdos.programmer. Archivado desde el original el 21 de abril de 2019. Consultado el 14 de octubre de 2017 .
  7. ^ "Una breve historia del modo Unreal | Museo OS/2".
  8. ^ Pelner, Jenny; Pelner, James. "Minimal Intel Architecture Boot Loader" (Cargador de arranque de arquitectura Intel mínima) . Consultado el 14 de octubre de 2017 .
  9. ^ Domas, Christopher (2015). "The Memory Sinkhole: An architectural privilege escalada vulnerabilidad" (PDF) . Battelle Memorial Institute. Archivado (PDF) desde el original el 2017-01-05 . Consultado el 2017-01-04 . El procesador carga un modo "Unreal" de estado del sistema definido arquitectónicamente .
  10. ^ "Codificación de instrucciones X86-64". Archivado desde el original el 3 de enero de 2017. Consultado el 18 de febrero de 2015 .
  11. ^ "Modo real plano". 16 de marzo de 1998. Archivado desde el original el 18 de agosto de 2015.
  12. ^ Brown, Ralf D. "Lista de interrupciones". INT 80 (AMI BIOS) . Consultado el 14 de octubre de 2017 .
  13. ^ ab Necasek, Michal (15 de junio de 2018). "Una breve historia del modo Unreal". Museo OS/2 .
  14. ^ Brown, Ralf D. "Lista de interrupciones". INT 78 (controlador HugeRealMode) . Consultado el 14 de octubre de 2017 .
  15. ^ Grysztar, Tomasz (17 de septiembre de 2010). «UnREAL Mode» . Consultado el 14 de octubre de 2017 .

Lectura adicional