Línea A20

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar
Signal en el bus del sistema de un sistema informático basado en x86
El área de memoria alta sólo está disponible en modo real en los procesadores 80286 si la puerta A20 está habilitada.

La A20, o línea de dirección 20, es una de las líneas eléctricas que componen el bus del sistema de un sistema informático basado en x86. La línea A20 en particular se usa para transmitir el bit 21 en el bus de direcciones.

Un microprocesador normalmente tiene una cantidad de líneas de dirección igual al logaritmo en base dos de la cantidad de palabras en su espacio de direcciones físicas. Por ejemplo, un procesador con 4 GB de espacio físico direccionable por bytes requiere 32 líneas (log2(4 GB) = log2(232 B) = 32), que se denominan A0 a A31. Las líneas reciben el nombre del número basado en cero del bit en la dirección que están transmitiendo. El bit menos significativo es el primero y, por lo tanto, se numera como bit 0 y se señaliza en la línea A0. A20 transmite el bit 20 (el bit 21) y se activa una vez que las direcciones alcanzan 1 MB o 220.

Resumen

Los procesadores Intel 8086, Intel 8088 e Intel 80186 tenían 20 líneas de dirección, numeradas de A0 a A19; con estos, el procesador puede acceder a 220 bytes, o 1 MB. Los registros de direcciones internas de tales procesadores solo tenían 16 bits. Para acceder a un espacio de direcciones de 20 bits, una referencia de memoria externa se compuso de una dirección de desplazamiento de 16 bits agregada a un número de segmento de 16 bits, desplazada 4 bits para que como para producir una dirección física de 20 bits. La dirección resultante es igual a segmento × 16 + desplazamiento. Hay muchas combinaciones de segmento y desplazamiento que producen la misma dirección física de 20 bits. Por lo tanto, había varias formas de direccionar el mismo byte en la memoria. Por ejemplo, aquí hay cuatro de las 4096 combinaciones diferentes de segmento:compensación, todas haciendo referencia al byte cuya dirección física es 0x000FFFFF (el último byte en 1 MB de espacio de memoria):

F000:FFFF
FFFF:000F
F555:AAAF
F800:7FFF

Referenciado de la última manera, un aumento de uno en el desplazamiento produce F800:8000, que es una dirección adecuada para el procesador, pero dado que se traduce en la dirección física 0x00100000 (el primer byte de más de 1 MB), el procesador necesita otra línea de dirección para el acceso real a ese byte. Dado que no existe tal línea en la línea de procesadores 8086, el bit 21 de arriba, mientras está configurado, se descarta, lo que hace que la dirección F800:8000 se "envuelva" y para apuntar realmente a la dirección física 0x00000000.

Cuando IBM diseñó la máquina IBM PC AT (1984), decidió utilizar el nuevo microprocesador Intel 80286 de mayor rendimiento. El 80286 podría abordar hasta 16 MB de memoria del sistema en modo protegido. Sin embargo, se suponía que la CPU emularía el comportamiento de un 8086 en modo real, su modo de inicio, para que pudiera ejecutar sistemas operativos y programas que no fueron escritos para el modo protegido. Sin embargo, el 80286 no forzó la línea A20 a cero en modo real. Por tanto, la combinación F800:8000 ya no apuntaría a la dirección física 0x00000000, sino a la dirección 0x00100000. Como resultado, los programas que se basan en el ajuste de dirección ya no funcionarán. Para seguir siendo compatible con dichos programas, IBM decidió corregir el problema en la placa base.

Eso se logró insertando una puerta lógica en la línea A20 entre el procesador y el bus del sistema, que recibió el nombre de Gate-A20. Gate-A20 se puede habilitar o deshabilitar mediante software para permitir o evitar que el bus de direcciones reciba una señal de A20. Está configurado como no aprobado para la ejecución de programas más antiguos que se basan en el ajuste. En el momento del arranque, el BIOS primero habilita Gate-A20 cuando cuenta y prueba toda la memoria del sistema y luego lo desactiva antes de transferir el control al sistema operativo.

Originalmente, la puerta lógica era una puerta conectada al controlador de teclado Intel 8042. Controlarlo fue un proceso relativamente lento. Desde entonces, se han agregado otros métodos para permitir una multitarea más eficiente de los programas que requieren este ajuste con programas que acceden a toda la memoria del sistema. Existen múltiples métodos para controlar la línea A20.

Desconectar A20 no envolvería todos los accesos a la memoria por encima de 1 MB, solo aquellos en los rangos de 1 a 2 MB, 3 a 4 MB, 5 a 6 MB, etc. El software en modo real solo se preocupaba por el área ligeramente superior a 1 MB, por lo que la línea Gate-A20 fue suficiente.

Habilitar la línea Gate-A20 es uno de los primeros pasos que realiza un sistema operativo x86 en modo protegido en el proceso de arranque, a menudo antes de que se haya pasado el control al kernel desde el arranque (en el caso de Linux, por ejemplo).

El modo Virtual 8086, introducido con Intel 80386, permite simular el A20 wrap-around mediante el uso de las funciones de memoria virtual del procesador; la memoria física se puede asignar a varias direcciones virtuales. Por lo tanto, la memoria mapeada en el primer megabyte de memoria virtual puede mapearse nuevamente en el segundo megabyte de memoria virtual. El sistema operativo puede interceptar cambios en la puerta A20 y realizar los cambios correspondientes en el espacio de direcciones de la memoria virtual, lo que también hace irrelevante la eficiencia del cambio de línea de la puerta A20.

Puerta A20

Controlar la línea A20 fue una característica importante en una etapa del crecimiento de la arquitectura de PC de IBM, ya que agregó acceso a 65 520 bytes adicionales (64 KB − 16 bytes) de memoria en modo real, sin cambios significativos de software.

En lo que podría decirse que fue un 'truco', la compuerta A20 originalmente formaba parte del controlador del teclado en la placa base, que podía abrirla o cerrarla según el comportamiento que se deseara.

Para mantener la compatibilidad total con Intel 8086, la puerta A20 todavía estaba presente en las CPU Intel hasta 2008. Como la puerta se cerró inicialmente justo después del arranque, los sistemas operativos en modo protegido normalmente abrían la puerta A20 temprano durante el arranque. proceso para nunca cerrarlo de nuevo. Dichos sistemas operativos no tenían razones de compatibilidad para mantenerlo cerrado y obtuvieron acceso a la gama completa de direcciones físicas disponibles al abrirlo.

Intel 80486 y Pentium agregaron un pin especial llamado A20M#, que cuando se establece en nivel bajo obliga a que el bit 20 de la dirección física sea cero para todos los accesos a memoria externa o caché en el chip. Era necesario, ya que el 80486 introdujo un caché en el chip y ya no era posible enmascarar este bit en la lógica externa. El software aún necesita manipular la puerta y aún debe lidiar con periféricos externos (el conjunto de chips) para eso.

La Guía de diseño de sistemas de PC PC 2001 elimina la compatibilidad para la línea A20: "Si la lógica de generación A20M# todavía está presente en el sistema, esta lógica debe terminarse de modo que el software escriba en el puerto de E/S 92, bit 1, no dan como resultado que A20M# se afirme al procesador."

Se cambió la compatibilidad con la puerta A20 en la microarquitectura Nehalem (algunas fuentes afirman incorrectamente que se eliminó la compatibilidad con A20). En lugar de que la CPU tenga un pin A20M# dedicado que recibe la señal de enmascarar o no el bit A20, se ha virtualizado para que la información se envíe desde el hardware periférico a la CPU mediante ciclos de bus especiales. Desde el punto de vista del software, el mecanismo funciona exactamente como antes, y un sistema operativo aún debe programar hardware externo (que a su vez envía los ciclos de bus mencionados anteriormente a la CPU) para desactivar el enmascaramiento A20.

Intel ya no es compatible con la puerta A20, comenzando con Haswell. Página 271 del Manual del programador de sistemas Intel, vol. 3A de junio de 2013 establece: "La funcionalidad de A20M# es utilizada principalmente por sistemas operativos más antiguos y no utilizada por sistemas operativos modernos. En los procesadores Intel 64 más nuevos, A20M# puede estar ausente."

Controladora A20

(feminine)

El controlador A20 es un software de administración de memoria de PC de IBM que controla el acceso al área de memoria alta (HMA). Los administradores de memoria extendida generalmente brindan esta funcionalidad. Los controladores A20 llevan el nombre de la línea de dirección 21 del microprocesador, la línea A20.

En DOS, los administradores de HMA como HIMEM.SYS tienen la "tarea adicional" de gestionar A20. HIMEM.SYS proporcionó una API para abrir/cerrar A20. DOS mismo podría usar el área para algunas de sus necesidades de almacenamiento, liberando así más memoria convencional para programas. Esa funcionalidad fue habilitada por las directivas DOS=HIGH o HIDOS=ON en el archivo de configuración CONFIG.SYS.

Programas afectados

Desde 1980, 86-DOS y MS-DOS utilizaron internamente el ajuste de dirección para implementar el punto de entrada de DOS CALL 5 en el desplazamiento de +5 a +9 (que emula la API CALL 5 BDOS de estilo CP/M-80 punto de entrada en el desplazamiento +5 a +7) en el Prefijo de segmento de programa (PSP) (que se parece parcialmente a la página cero de CP/M-80). Esto fue, en particular, utilizado por programas traducidos automáticamente desde CP/M-80 a través de traductores de lenguaje ensamblador como Seattle Computer Products' TRANS86. El controlador CALL 5 al que se refiere este punto de entrada reside en la dirección física de la máquina 0x000000C0 (por lo tanto, se superponen los cuatro bytes del punto de entrada de la rutina de servicio de interrupción reservado para INT 30h y el primer byte de INT 31h en la interrupción de modo real x86 tabla de vectores). Sin embargo, por el diseño de CP/M-80, que cargó el sistema operativo inmediatamente por encima de la memoria disponible para que se ejecutara el programa de aplicación, la dirección de destino de 16 bits del 8080/Z80 se almacenó en el desplazamiento +6 a +7 en el cero. page también podría interpretarse deliberadamente como el tamaño del primer segmento de memoria. Para emular esto en DOS con su esquema de direccionamiento segmento:desplazamiento 8086, el desplazamiento de 16 bits del punto de entrada de la llamada remota tenía que coincidir con el tamaño de este segmento (es decir, 0xFEF0), que se almacena en el desplazamiento +6 a +7 en el PSP, partes superpuestas de CALL 5. La única forma de conciliar estos requisitos era elegir un valor de segmento que, cuando se agrega a 0xFEF0, da como resultado una dirección de 0x001000C0, que, en un 8086, se ajusta a 0x000000C0.

A20 tuvo que ser deshabilitado para que ocurriera el ajuste y los programas de DOS que usaban esta interfaz funcionaran. Las versiones más nuevas de DOS que pueden reubicar partes de sí mismas en el HMA, generalmente crean una copia del punto de entrada en FFFF: 00D0 en el HMA (que nuevamente se resuelve en 0x001000C0 físico), para que la interfaz pueda funcionar sin tener en cuenta el estado de A20.

Un programa que se sabe que usa la interfaz CALL 5 es la versión DOS del compilador Small-C. Además, la utilidad SPELL en Microsoft's Word 3.0 (1987) es uno de los programas que dependen de la interfaz CALL 5 para configurarse correspondientemente. Sun Microsystems' PC-NFS (1993) también requiere la corrección de CALL 5.

Además, para ahorrar espacio en el programa, algunos programadores de BIOS y DOS utilizaron un truco, por ejemplo, para tener un segmento que tenga acceso a los datos del programa (como de F800:0000 a F800:7FFF, apuntando a la parte física direcciones 0x000F8000–0x000FFFFF), así como los datos de E/S (como el búfer del teclado) que se ubicaron en el primer segmento de memoria (con direcciones F800:8000 a F800:FFFF apuntando a las direcciones físicas 0x00000000 a 0x00007FFF).

Este truco funciona siempre que el código no se ejecute en poca memoria, los primeros 64 KB de RAM, una condición que siempre se cumplió en versiones anteriores de DOS sin capacidades de carga alta.

Con el kernel de DOS reubicado en áreas de mayor memoria, la poca memoria se hizo cada vez más disponible para los programas, lo que provocó que fallaran aquellos que dependían del ajuste. Los cargadores de ejecutables en las versiones más recientes de DOS intentan detectar algunos tipos comunes de programas afectados y los parchean sobre la marcha para que funcionen también con poca memoria o los cargan por encima de los primeros 64 KB antes de pasarles la ejecución. Para los programas, que no se detectan automáticamente, se puede usar LOADFIX o MEMMAX -L para forzar la carga de los programas por encima de los primeros 64 KB.

El truco fue utilizado por el propio IBM/Microsoft Pascal, así como por programas compilados con él, incluido el MASM de Microsoft. Otras utilidades de desarrollo comúnmente utilizadas con esto fueron compresores ejecutables como Realia's Spacemaker (escrito por Robert B. K. Dewar en 1982 y utilizado para comprimir versiones anteriores de Norton Utilities) y Microsoft's EXEPACK (escrito por Reuben Borman en 1985), así como la opción equivalente /E[XEPACK] en Microsoft's LINK 3.02 y superior. Los programas procesados con EXEPACK mostrarían el mensaje "El archivo empaquetado está dañado" mensaje de error.

Existen varias utilidades de terceros para modificar los archivos ejecutables comprimidos, ya sea reemplazando la(s) rutina(s) de descompresión problemática(s) mediante el restablecimiento o intentando expandir y restaurar el archivo original.

Los cargadores de arranque BIOS heredados modernos (como GNU GRUB) usan la línea A20. Los cargadores de arranque UEFI utilizan el modo protegido de 32 bits o el modo largo de 64 bits.

Contenido relacionado

Pentium 4

Pentium 4 es una serie de CPU de un solo núcleo para equipos de sobremesa, portátiles y servidores básicos fabricados por Intel. Los procesadores se...

Tablero de striptease

Stripboard es el nombre genérico de un tipo ampliamente utilizado de material de creación de prototipos electrónicos para placas de circuitos caracterizado...

Ultrajuegos

Ultra Software Corporation era una corporación fantasma y un sello editorial creado en 1988 como una subsidiaria de Konami of America, en un esfuerzo por...
Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save