En x86 computación , modo irreal , también en modo real grande , de modo real enorme , de modo real plana , o el modo de voodoo [1] es una variante del modo real , en el que uno o más descriptores de segmento se ha cargado 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 pueden operar los procesadores x86. Se utiliza en los procesadores 80286 y posteriores x86.
Descripción general
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 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 volvió ampliamente utilizada y es compatible con todos los procesadores Intel. [2]
HIMEM.SYS utiliza esta función para abordar la memoria extendida , [3] a menos que se cambie DOS para ejecutarse en un modo 8086 virtual que es incompatible con el modo irreal.
Uno de los pocos juegos, si no el único, que usó el modo irreal fue Ultima VII . [4]
El código BIOS utiliza el modo Unreal, ya que es el modo inicial de los procesadores Intel modernos. [5] 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. [6]
Un programa en modo irreal puede llamar a código de 16 bits programado para modo real (BIOS, kernel de DOS y controladores) sin ningún tipo de procesamiento . Esto hace que un controlador de modo irreal sea más simple que un controlador DPMI . Sin embargo, el modo irreal es incompatible con los sistemas operativos en modo protegido como Windows 3.x / 9x / NT y OS / 2.
El modo real grande tiene el segmento de código de 1 MB y el segmento de datos de 4 GB. [7] [8]
Algunos cargadores de arranque (como LILO ) utilizan el modo irreal para acceder a hasta 4 GB de memoria.
Habilitando el modo irreal
Para poner un microprocesador 80386 o superior en modo irreal, un programa primero debe ingresar al modo protegido , buscar o crear un descriptor plano en el GDT o LDT , cargar algunos de los registros de segmento de datos con el respectivo "selector" del modo protegido, y luego cambiar de vuelta al modo real. Después de regresar al modo real, el procesador continuará usando los descriptores en caché establecidos en el modo protegido, permitiendo así el acceso a 4 GiB de memoria extendida desde el modo real. [9]
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 la memoria de origen o de destino por encima de 1 MiB. [3]
A partir del 80386, los programas en modo real pueden utilizar los registros de 32 bits con el prefijo de anulación de 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 una falla si EBX excede 0xFFFF. En 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. Esto ha sido una práctica común y, a menudo, se denomina "modo real plano" [11] o "modo real grande". [12] El "modo real enorme" es una variante en la que también el segmento de código se extiende a 4 GiB. [13] [9]
Un caso especial de modo irreal se logra, además, cargando el selector de código (CS) desde un descriptor que tiene el atributo de 32 bits (bit "D") puesto a uno. Esta variante de uso poco frecuente presenta algunas ventajas, principalmente porque permite evitar los prefijos de anulación de 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. Dado que las interrupciones en modo real no conservan automáticamente los dieciséis bits altos del puntero de instrucción extendida (EIP), el código debe encajar en la parte baja del segmento de código o ser capaz de conservar y restaurar los bits altos de EIP de alguna manera. Además, si se van a llamar funciones de interrupción de BIOS o DOS que utilizan código de 16 bits, se requiere un cambio de modo para cambiar el bit "D" hacia adelante y hacia atrás. Algunos emuladores no admiten la emulación de programas que se ejecutan en esta variante del modo irreal. [14]
Ver 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 . pag. 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 obligado a admitirlo en todos los procesadores posteriores, aunque su presencia nunca fue documentada […]
- ^ a b 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 .
- ^ Riiser, Haakon. "HIMEM.SYS y modo real irreal / plano, EMM386 y UMBs" . Grupo de noticias : comp.os.msdos.programmer . Archivado desde el original el 21 de abril de 2019 . Consultado el 14 de octubre de 2017 .
- ^ Pelner, Jenny; Pelner, James. "Cargador de arranque de arquitectura mínima de Intel" . Consultado el 14 de octubre de 2017 .
- ^ Domas, Christopher (2015). "El sumidero de la memoria: una vulnerabilidad de escalada de privilegios arquitectónicos" (PDF) . Instituto Memorial Battelle. Archivado (PDF) desde el original el 4 de enero de 2017 . Consultado el 4 de enero de 2017 .
El procesador carga un estado del sistema definido arquitectónicamente en modo "Unreal"
- ^ https://images2015.cnblogs.com/blog/363515/201512/363515-20151204133744658-1001794631.jpg
- ^ "Modo Unreal - OSDev Wiki" . wiki.osdev.org . Consultado el 10 de diciembre de 2020 .
- ^ a b "Modo irreal" . Archivado desde el original el 3 de enero de 2017 . Consultado el 18 de febrero de 2015 .
- ^ "Codificación de instrucciones X86-64" . Archivado desde el original el 3 de enero de 2017 . Consultado el 18 de febrero de 2015 .
- ^ "Modo plano real" . 1998-03-16. Archivado desde el original el 14 de octubre de 2017.
- ^ Brown, Ralf D. "Lista de interrupciones" . INT 80 (BIOS AMI) . Consultado el 14 de octubre de 2017 .
- ^ Brown, Ralf D. "Lista de interrupciones" . INT 78 (controlador HugeRealMode) . Consultado el 14 de octubre de 2017 .
- ^ Grysztar, Tomasz (17 de septiembre de 2010). "Modo irreal" . Consultado el 14 de octubre de 2017 .
Otras lecturas
- Referencia técnica del sistema operativo IBM / 2 - Familia de programación (PDF) . 1 (1ª ed.). IBM . Septiembre de 1987 [1986]. Archivado (PDF) desde el original el 3 de enero de 2017.
- Roden, Thomas (noviembre-diciembre de 1989). Escrito en Irvine, California, EE. UU. "Cuatro gigabytes en modo real: un truco hábil para acceder a grandes espacios de memoria en el 80386 desde DOS" . Diario del programador: el diario de recursos para programadores de PC de IBM . 386 Ahora. Vol. 7 no. 6. Eugene, Oregón, Estados Unidos: Oakley Publishing Company. págs. 89–94. ISSN 0747-5861 . Archivado desde el original el 21 de febrero de 2020 . Consultado el 21 de febrero de 2020 .
- Williams, Al (julio de 1990). "DOS + 386 = 4 Gigabytes!" . Diario del Dr. Dobb . Vol. 15. Empresa de informática del pueblo . págs. 62–71. [1] [2] Fe de erratas: [3]
- Williams, Al (1991). "Capítulo 18: Accediendo a 4 Gigabytes en Modo Real". DOS 5: A Developer's Guide - Guía de programación avanzada para DOS (1 ed.). Redwood City, California, EE. UU .: M&T Publishing, Inc. / Prentice Hall International (Reino Unido) Limited . págs. 691–712. ISBN 0-13-217993-8. (NB. Implementa SEG4G "Big real mode".)
- Lespinasse, Michel. "Cómo sacar un administrador de memoria" . Amiens, Francia: Walken / Impact Studios. Archivado desde el original el 3 de enero de 2017 . Consultado el 21 de octubre de 2015 .
- Manual del desarrollador de software Intel IA-32 - Volumen 3A
- El Pentium 4 íntegro: Genealogía del procesador IA32, Addison Wesley ISBN 0-321-24656-X . "Gran modo real"
- "Llamar al servidor HugeRealMode" Habilitar la función "Modelo de interrupción de dos etapas" .
- Necasek, Michal (15 de junio de 2018). "Una breve historia del modo irreal" . Museo OS / 2 . Archivado desde el original el 15 de septiembre de 2018 . Consultado el 15 de septiembre de 2018 .
- "Descriptor Cache Registers" .
- Chappell, Geoff (enero de 1994). Schulman, Andrew; Pedersen, Amorette (eds.). Internos de DOS . The Andrew Schulman Programming Series (primera impresión, primera edición). Addison Wesley Publishing Company . ISBN 978-0-201-60835-9.(xxvi + 738 + iv páginas, 3.5 "-floppy [4] [5] ) Fe de erratas: [6] [7] [8]
- https://patents.google.com/patent/US5642491 "Método para expandir el rango de memoria direccionable en el procesamiento en modo real para facilitar la carga de programas grandes en memoria alta"