En la computación x86 , el modo irreal , también conocido como modo real grande , modo real plano o modo vudú [ 1 ] , es una variante del modo real en la que uno o más descriptores de segmento se cargan con valores no estándar, como límites de 32 bits que permiten el acceso a toda la memoria. Contrariamente a su nombre, no es un modo de direccionamiento independiente en el que puedan operar los procesadores x86. Se utiliza en el 80286 y procesadores x86 posteriores.
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é interna de descriptores de segmento al calcular 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 popularizó 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, núcleo DOS y controladores) sin necesidad de realizar operaciones de memoria intermedia . Esto simplifica el controlador en modo irreal en comparación con 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 (tanto las variantes 286 como 386) para acceder a la memoria extendida , [ 5 ] a menos que DOS se cambie para ejecutarse en un modo virtual 8086 que es incompatible con el modo irreal.
Uno de los poquísimos juegos —si no el único— que utilizó el modo irreal fue Ultima VII . [ 6 ] [ 7 ]
El modo irreal es utilizado por el código BIOS , ya que este 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 modo real enorme. [ 9 ]
Algunos gestores de arranque (como LILO ) utilizan el modo irreal para acceder hasta a 4 GiB de memoria.
Activando el modo irreal
El microprocesador 80286 solo puede entrar en modo irreal 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 , encontrar 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 correspondiente y, a continuación, volver al modo real. Tras regresar al modo real, el procesador seguirá utilizando los descriptores en caché establecidos 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 usar los registros de 32 bits con el prefijo de anulación de tamaño de dirección. [ 10 ] Esto permite que los programas usen una dirección como DS:[EBX]. En el modo real normal, se produce un fallo si EBX supera 0xFFFF. En el modo irreal, el acceso está permitido.
Variantes del modo irreal
Como se describió anteriormente, el modo irreal generalmente implica el uso de uno o más selectores de datos para acceder a los datos en 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 "huge real" (denominado en la lista de interrupciones de Ralf Brown) o modo "unREAL" (denominado por Tomasz Grysztar) añade 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 con el atributo de 32 bits (bit "D") establecido en 1. Este modo permite evitar los prefijos de anulación de tamaño de operando que normalmente se requieren al usar 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 se describió en el artículo de Agarwal de 1991, donde 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 de 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
- ↑ 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 .
- ↑ Gutmann, Peter (2004) [2003]. Arquitectura de seguridad criptográfica: diseño y verificación . Springer Science & Business Media . pág . 58. ISBN 978-0-387-95387-8. Consultado el 4 de enero de 2017. [
…] El modo Unreal se popularizó tanto […] que Intel se vio obligado a admitirlo en todos los procesadores posteriores, aunque su presencia nunca se documentó […]
- ↑ "Gráfico de modos" . Archivado del original (JPG) el 18 de enero de 2023.
- 1 2 3 "Modo irreal" . Archivado del original el 3 de enero de 2017. Recuperado el 18 de febrero de 2015 .
- 1 2 Necasek, Michal (18-03-2011). "HIMEM.SYS, modo irreal y LOADALL" . Museo OS/2 . Archivado del original el 03-01-2017 . Recuperado el 03-01-2017 .
- ↑ Riiser, Haakon. "HIMEM.SYS y modo real irreal/plano, EMM386 y UMBs" . Grupo de noticias : comp.os.msdos.programmer . Consultado el 14 de octubre de 2017 .
{{cite newsgroup}}: CS1 maint: servicio de archivado obsoleto ( enlace ) - ↑ "Una breve historia del modo Unreal | Museo OS/2" . Consultado el 15 de septiembre de 2018 .
{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace ) - ↑ Pelner, Jenny; Pelner, James. "Cargador de arranque de arquitectura Intel mínima" . Archivado del original el 15 de octubre de 2017. Consultado el 14 de octubre de 2017 .
- ↑ Domas, Christopher (2015). "El sumidero de memoria: una vulnerabilidad de escalada de privilegios arquitectónicos" (PDF) . Battelle Memorial Institute. Archivado (PDF) del original el 5 de enero de 2017. Recuperado el 4 de enero de 2017.
El procesador carga un estado del sistema definido arquitectónicamente en modo "Unreal"
. - ↑ "Codificación de instrucciones X86-64" . Archivado del original el 3 de enero de 2017. Consultado el 18 de febrero de 2015 .
- ↑ "Modo Real Plano" . 16 de marzo de 1998. Archivado del original el 18 de agosto de 2015.
- ↑ Brown, Ralf D. "Lista de interrupciones" . INT 80 (AMI BIOS). Archivado del original el 16 de junio de 2016. Consultado el 14 de octubre de 2017 .
- 1 2 Necasek, Michal (15-06-2018). "Una breve historia del modo Unreal" . Museo OS/2 . Archivado del original el 17-05-2023 . Recuperado el 17-05-2023 .
- ↑ Brown, Ralf D. "Lista de interrupciones" . INT 78 (Controlador HugeRealMode). Archivado del original el 16 de junio de 2016. Consultado el 14 de octubre de 2017 .
- ↑ Grysztar, Tomasz (17 de septiembre de 2010). "Modo unREAL" . Archivado del original el 27 de septiembre de 2016. Consultado el 14 de octubre de 2017 .
Lecturas adicionales
- Referencia técnica del sistema operativo IBM/2 - Familia de programación (PDF) . Vol. 1 (1.ª ed.). IBM . Septiembre de 1987 [1986]. Archivado del original (PDF) el 3 de enero de 2017.
- Roden, Thomas (noviembre-diciembre de 1989). Escrito en Irvine, California, EE. UU. "Cuatro gigabytes en modo real: un ingenioso truco para acceder a grandes espacios de memoria en el 80386 desde DOS" . Programmer's Journal - The Resource Journal for IBM PC Programmers . 386 Now. Vol. 7, n.º 6. Eugene, Oregón, EE. UU.: Oakley Publishing Company. págs. 89-94 . ISSN 0747-5861 . Archivado del original el 21 de febrero de 2020. Recuperado el 21 de febrero de 2020 .
- Williams, Al (julio de 1990). "¡DOS + 386 = 4 Gigabytes!" . Dr. Dobb's Journal . Vol. 15. People's Computer Company . págs. 62–71 . Erratas:
- Williams, Al (1991). «Capítulo 18: Acceso a 4 gigabytes en modo real». DOS 5: Guía del desarrollador - Guía de programación avanzada para DOS (1.ª ed.). Redwood City, California, EE. UU.: M&T Publishing, Inc. / Prentice Hall International (UK) Limited . págs. 691–712 . ISBN 0-13-217993-8.(Nota: Implementa el modo "Big real" SEG4G).
- Lespinasse, Michel. "Cómo expulsar a un administrador de memoria" . Amiens, Francia: Walken / Impact Studios. Archivado del original el 4 de enero de 2017. Consultado el 21 de octubre de 2015 .
- Manual del desarrollador de software Intel IA-32 - Volumen 3A
- La genealogía completa del procesador Pentium 4: IA32, Addison Wesley ISBN 0-321-24656-X"Modo real grande"
- "Llamar a la función "Habilitar modelo de interrupción de dos etapas" del servidor HugeRealMode" .
- Necasek, Michal (15 de junio de 2018). "Una breve historia del modo Unreal" . Museo OS/2 . Recuperado el 15 de septiembre de 2018 .
{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace ) - "Registros de caché de descriptores" .
- Chappell, Geoff (enero de 1994). Schulman, Andrew; Pedersen, Amorette (eds.). DOS Internals . The Andrew Schulman Programming Series (1.ª impresión, 1.ª ed.). Addison Wesley Publishing Company . ISBN 978-0-201-60835-9.(xxvi+738+iv páginas, disquete de 3,5")) Erratas:
- Método para ampliar el rango de memoria direccionable en el procesamiento en modo real para facilitar la carga de programas grandes en memoria alta.
- Modos de funcionamiento X86
- Gestión de memoria de DOS