Articulo de referencia

Modo real

El modo real , también llamado modo de direcciones reales , es un modo de funcionamiento de todas las CPU compatibles con x86 . Su nombre proviene del hecho de que las direccion...

El modo real , también llamado modo de direcciones reales , es un modo de funcionamiento de todas las CPU compatibles con x86 . Su nombre proviene del hecho de que las direcciones en el 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 proporciona 1 MB de memoria direccionable) y acceso directo ilimitado por software a toda la memoria direccionable, direcciones de E/S y hardware periférico. El modo real no ofrece soporte para protección de memoria , multitarea ni 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 la 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 cuando se inician en otros modos.

Historia

La arquitectura 80286 introdujo el modo protegido , que permitía (entre otras cosas) la protección de memoria a nivel de hardware. Sin embargo, el uso de estas nuevas características requería un nuevo sistema operativo 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 versiones anteriores del software escrito para todos los chips x86 anteriores, el chip 286 se diseñó para arrancar en "modo real", es decir, en un modo que desactivaba las nuevas características 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 arrancar sistemas operativos en modo real y 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 .

La BIOS de PC que introdujo IBM opera en modo real, al igual que los sistemas operativos DOS ( MS-DOS , DR-DOS , etc.). Las primeras versiones de Microsoft Windows se ejecutaban en modo real. Windows/386 permitió el uso del modo protegido, que se implementó de forma más completa en Windows 3.0 , que podía ejecutarse en modo real o utilizar el modo protegido de la misma manera que Windows/386. Windows 3.0 tenía varios modos: "modo real", "modo estándar" y "modo mejorado para 386"; este último requería algunas de las funciones de virtualización del procesador 80386 y, por lo tanto, no se ejecutaba en un 80286. Windows 3.1 eliminó la compatibilidad con el modo real y fue el primer entorno operativo de uso general que requería al menos un procesador 80286. Ninguna de estas versiones puede considerarse un sistema operativo x86 moderno, ya que solo cambiaban al modo protegido para ciertas funciones. Unix , Linux , OS/2 y Windows NT se consideran sistemas operativos modernos, ya que cambian la CPU a modo protegido al inicio, nunca vuelven al modo real y proporcionan todos los beneficios del modo protegido en todo momento. Los sistemas operativos de 64 bits usan el modo real solo en la etapa de inicio, después de lo cual el núcleo del sistema operativo cambia la CPU a modo largo . [ 2 ] Cabe destacar que 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 modernos de 32 bits.

Capacidad de direccionamiento

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 direcciones efectivas que pueden tener 21 bits significativos. Este esquema desplaza un número de segmento de 16 bits cuatro bits a la izquierda (creando un número de 20 bits con cuatro ceros menos significativos) antes de sumarle 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 8086, 8088 y 80186, el resultado de una dirección efectiva que excede los 20 bits es que la dirección "se reinicia" 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 24 bits incluso en modo real. Por lo tanto, para el segmento 0xFFFF y un desplazamiento mayor que 0x000F, el 80286 accedería al inicio del segundo megabyte de memoria, mientras que el 80186 y anteriores accederían a una dirección igual a [desplazamiento]-0x10, que está al inicio del primer megabyte. (Tenga en cuenta que en el 80186 y anteriores, el primer kilobyte del espacio de direcciones, a partir de la dirección 0, es la ubicación permanente e inamovible de la tabla de vectores de interrupción). Así pues, 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.

Línea A20

Algunos programas anteriores al 80286 fueron diseñados para aprovechar el comportamiento de direccionamiento de memoria de tipo módulo (wrap-around), por lo que el 80286 presentó un problema de retrocompatibilidad. 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, produce un efecto de módulo 2^20 para igualar 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 , resolvió este problema incluyendo una puerta configurable por software para habilitar o deshabilitar (forzar a cero) la línea de dirección A20, entre el pin A20 del 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 cargarse, un mensaje que indicaba la instalación de un "controlador A20", un software para controlar Gate-A20 y adaptarlo a las necesidades de los programas. En modo protegido, la línea A20 debe estar habilitada; de lo contrario, se producirán errores de direccionamiento físico, lo que probablemente provocará un fallo del sistema. Los gestores de arranque modernos (como GNU GRUB ) utilizan la línea A20. [ 3 ]

Cambiando al modo real

Intel introdujo el modo protegido en la familia x86 con la intención de que los sistemas operativos que lo utilizaran se ejecutaran completamente en este nuevo modo y que todos los programas que se ejecutaran bajo un sistema operativo en modo protegido también se ejecutaran en modo protegido. Debido a las diferencias sustanciales entre el modo real e incluso el modo protegido, bastante limitado, del 286, 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 existentes en modo real de las que dependían los usuarios, abandonar el modo real planteó problemas para la industria, y los programadores buscaron una manera de alternar entre los modos a voluntad. Sin embargo, Intel, en consonancia con sus intenciones para el uso del procesador, proporcionó una manera sencilla de cambiar al modo protegido en el 80286, pero no una manera sencilla de volver al modo real. Antes del 386, la única forma de volver del modo protegido al modo real era reiniciar el procesador; después de un reinicio, siempre arrancaba 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 incómodo e ineficiente, es factible. Desde el modo protegido, el estado del procesador se guarda en la memoria, luego el procesador se reinicia, vuelve a arrancar en modo real y ejecuta código en modo real para restaurar el estado guardado desde la memoria. A continuación, puede ejecutar otro código en 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 en modo protegido utilicen servicios como la BIOS, que se ejecuta completamente en modo real (ya que fue diseñada originalmente para el modelo de ordenador personal IBM 5150 basado en el 8088 ). Esta técnica de cambio de modo es también la que utilizan DPMI (en DOS real, no emulado) y extensores de DOS como DOS/4GW para permitir que los programas en modo protegido se ejecuten en DOS; el sistema DPMI o el extensor de DOS cambia al modo real para invocar llamadas a DOS o BIOS, y luego vuelve al modo protegido para regresar al programa de aplicación que se ejecuta en modo protegido.

Rechazar

A medida que las versiones de Windows basadas en el núcleo NT (que omiten el modo real al iniciar) se hicieron cada vez más populares, la necesidad de reiniciar el equipo en modo real para usar MS-DOS disminuyó después de Windows 3.1x , hasta que dejó de ser compatible con Windows ME . La única forma de ejecutar aplicaciones de DOS que requieren el modo real desde versiones más recientes de Windows es mediante emuladores como DOSBox o productos de virtualización x86 .

Véase también

Referencias

  1. "Referencia de CPU x86 (Archivado el 8 de septiembre de 2018 - En lugar de 'Una breve historia de x86'  : alasir.com/x86ref  : 403 Prohibido el 24 de marzo de 2023)" . Archivado del original el 8 de septiembre de 2018. Recuperado el 24 de marzo de 2023 .{{cite web}}: CS1 maint: bot: estado de la URL original desconocido ( enlace )
  2. "Arranque · Linux Inside" . 0xax.gitbooks.io . Consultado el 10 de noviembre de 2020 .
  3. "Línea A20 - Wiki de OSDev" . wiki.osdev.org . Archivado del original el 16 de septiembre de 2020. Consultado el 10 de septiembre de 2020 .
  • Chourdakis, Michael (21 de mayo de 2015). "Tutorial de ensamblador en modo real, protegido y largo para PC" . Code Project .