El modo real , también llamado modo de dirección real , es un modo operativo de todas las CPU compatibles con x86 . El modo recibe su nombre del hecho de que las direcciones en modo real siempre corresponden a ubicaciones reales en la memoria. El modo real se caracteriza por un espacio de direcciones de memoria segmentado de 20 bits (lo que da 1 MB de memoria direccionable) y acceso de software directo ilimitado a toda la memoria direccionable, direcciones de E/S y hardware periférico. El modo real no proporciona soporte para protección de memoria, multitarea o niveles de privilegio de código.
Antes de la introducción del modo protegido con el lanzamiento del 80286 , el modo real era el único modo disponible para las CPU x86; [1] y para compatibilidad con versiones anteriores , todas las CPU x86 se inician en modo real cuando se reinician, aunque es posible emular el modo real en otros sistemas al iniciarse en otros modos.
La arquitectura 80286 introdujo el modo protegido , lo que permitió (entre otras cosas) la protección de la memoria a nivel de hardware. Sin embargo, el uso de estas nuevas funciones requirió un nuevo sistema operativo que estuviera diseñado específicamente para el modo protegido. Dado que una especificación de diseño principal de los microprocesadores x86 es que son totalmente compatibles con el software escrito para todos los chips x86 anteriores, el chip 286 se diseñó para iniciarse en "modo real", es decir, en un modo que desactivaba las nuevas funciones de protección de memoria, de modo que pudiera ejecutar sistemas operativos escritos para el 8086 y el 8088. A partir de 2018, las CPU x86 actuales (incluidas las CPU x86-64 ) pueden iniciar sistemas operativos en modo real y pueden ejecutar software escrito para casi cualquier chip x86 anterior sin emulación ni virtualización. En 2023, Intel propuso eliminar el modo real de las futuras CPU en la especificación X86S .
El BIOS de PC que introdujo IBM funciona en modo real, al igual que los sistemas operativos DOS ( MS-DOS , DR-DOS , etc.). Las primeras versiones de Microsoft Windows funcionaban en modo real. Windows/386 hizo posible hacer algún uso del modo protegido, y esto se realizó de forma más completa en Windows 3.0 , que podía ejecutarse en modo real o hacer uso del modo protegido a la manera de Windows/386. Windows 3.0 en realidad tenía varios modos: "modo real", "modo estándar" y "modo 386 mejorado"; este último requería algunas de las características de virtualización del procesador 80386 y, por lo tanto, no podía ejecutarse en un 80286. Windows 3.1 eliminó la compatibilidad con el modo real y fue el primer entorno operativo general que requería al menos un procesador 80286. Ninguna de estas versiones podría considerarse un sistema operativo x86 moderno, ya que cambiaban al modo protegido solo para ciertas funciones. Unix , Linux , OS/2 y Windows NT se consideran sistemas operativos modernos, ya que cambian la CPU a modo protegido al iniciarse, nunca vuelven al modo real y brindan todos los beneficios del modo protegido todo el tiempo. Los sistemas operativos de 64 bits usan el modo real solo en la etapa de inicio, y el núcleo del sistema operativo cambiará la CPU al modo largo . [2] En particular, el modo protegido del 80286 es considerablemente más primitivo que el modo protegido mejorado introducido con el 80386; este último a veces se denomina modo protegido 386 y es el modo en el que se ejecutan los sistemas operativos x86 de 32 bits modernos. [ cita requerida ]
Los procesadores 8086, 8088 y 80186 tienen un bus de direcciones de 20 bits, pero el inusual esquema de direccionamiento segmentado que Intel eligió para estos procesadores produce en realidad direcciones efectivas que pueden tener 21 bits significativos. Este esquema desplaza un número de segmento de 16 bits cuatro bits hacia la izquierda (lo que genera un número de 20 bits con los cuatro ceros menos significativos) antes de añadirle un desplazamiento de dirección de 16 bits; la suma máxima se produce cuando tanto el segmento como el desplazamiento son 0xFFFF, lo que da como resultado 0xFFFF0 + 0xFFFF = 0x10FFEF. En los procesadores 8086, 8088 y 80186, el resultado de una dirección efectiva que supera los 20 bits es que la dirección "da la vuelta" hasta el extremo cero del rango de direcciones, es decir, se toma módulo 2^20 (2^20 = 1048576 = 0x100000). Sin embargo, el 80286 tiene 24 bits de dirección y calcula direcciones efectivas de hasta 24 bits incluso en modo real. Por lo tanto, para el segmento 0xFFFF y un desplazamiento mayor que 0x000F, el 80286 en realidad accedería al comienzo del segundo megabyte de memoria, mientras que el 80186 y anteriores accederían a una dirección igual a [desplazamiento]-0x10, que está al comienzo del primer megabyte. (Tenga en cuenta que en el 80186 y anteriores, el primer kilobyte del espacio de direcciones, comenzando en la dirección 0, es la ubicación permanente e inamovible de la tabla de vectores de interrupción). Por lo tanto, la cantidad real de memoria direccionable por las CPU x86 80286 y posteriores en modo real es 1 MB + 64 KB – 16 B = 1.114.096 B.
Algunos programas anteriores al 80286 fueron diseñados para aprovechar el comportamiento de direccionamiento de memoria envolvente (módulo), por lo que el 80286 presentó un problema de compatibilidad con versiones anteriores. Forzar la línea de dirección 21 (el cable de señal lógica real que sale del chip) a un nivel lógico bajo, que representa un cero, da como resultado un efecto módulo 2^20 para que coincida con la aritmética de direcciones de los procesadores anteriores, pero el 80286 no tiene capacidad interna para realizar esta función. Cuando IBM utilizó el 80286 en su IBM PC/AT , resolvieron este problema al incluir una puerta configurable por software para habilitar o deshabilitar (forzar a cero) la línea de dirección A20, entre el pin A20 en el 80286 y el bus del sistema; esto se conoce como Puerta-A20 (la puerta A20), y todavía se implementa en los chipsets de PC hasta el día de hoy. La mayoría de las versiones del controlador de memoria extendida HIMEM.SYS para IBM-/MS-DOS mostraban al cargar un mensaje que indicaba que habían instalado un "controlador A20", un software para controlar Gate-A20 y coordinarlo según las necesidades de los programas. En el modo protegido, la línea A20 debe estar habilitada, o de lo contrario se producirán errores de direccionamiento físico, lo que probablemente provocará un bloqueo del sistema. Los cargadores de arranque heredados modernos (como GNU GRUB ) utilizan la línea A20. [3]
Intel introdujo el modo protegido en la familia x86 con la intención de que los sistemas operativos que lo utilizaban se ejecutaran completamente en el nuevo modo y que todos los programas que se ejecutaban bajo un sistema operativo en modo protegido se ejecutaran también en modo protegido. Debido a las diferencias sustanciales entre el modo real e incluso el modo protegido 286, que es bastante limitado, los programas escritos para el modo real no pueden ejecutarse en modo protegido sin ser reescritos. Por lo tanto, con una amplia base de aplicaciones en modo real existentes de las que dependían los usuarios, abandonar el modo real planteó problemas para la industria y los programadores buscaron una forma de cambiar entre los modos a voluntad. Sin embargo, Intel, en consonancia con sus intenciones para el uso del procesador, proporcionó una forma sencilla de cambiar al modo protegido en el 80286, pero no una forma sencilla de volver al modo real. Antes del 386, la única forma de cambiar del modo protegido al modo real era reiniciar el procesador; Después de un reinicio, siempre se inicia en modo real para ser compatible con las CPU x86 anteriores hasta el 8086. Reiniciar el procesador no borra la RAM del sistema, por lo que esto, aunque es incómodo e ineficiente, es realmente factible. Desde el modo protegido, el estado del procesador se guarda en la memoria, luego el procesador se reinicia en modo real y ejecuta algún código de modo real para restaurar el estado guardado de la memoria. Luego puede ejecutar otro código de modo real hasta que el programa esté listo para volver al modo protegido. El cambio al modo real es costoso en términos de tiempo, pero esta técnica permite que los programas de modo protegido utilicen servicios como BIOS, que se ejecuta completamente en modo real (habiendo sido diseñado originalmente para el modelo de computadora personal IBM basado en 8088 (tipo de máquina) 5150). Esta técnica de cambio de modo también es la que utilizan DPMI (bajo DOS real, no emulado) y extensores de DOS como DOS/4GW para permitir que los programas de modo protegido se ejecuten bajo DOS; El sistema DPMI o el extensor DOS cambia al modo real para invocar llamadas DOS o BIOS, luego vuelve para regresar al programa de aplicación que se ejecuta en modo protegido.
El cambio hacia el núcleo NT dio como resultado que el sistema operativo no necesitara DOS para arrancar el ordenador y que no pudiera usarlo. La necesidad de reiniciar el ordenador en modo real MS-DOS disminuyó después de Windows 3.1x hasta que dejó de ser compatible con Windows ME . La única forma de ejecutar actualmente aplicaciones DOS que requieren modo real desde versiones más nuevas de Windows es mediante emuladores como DOSBox o productos de virtualización x86 .
{{cite web}}
: CS1 maint: bot: original URL status unknown (link)