Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Введение
Сигнал в системной шине компьютерной системы на базе x86.
Signal in the system bus of an x86 based computer system
Линия A20, или адресная линия 20, является одной из электрических линий, составляющих системную шину компьютерной системы на базе x86. В частности, линия A20 используется для передачи 21-го бита в адресной шине. Микропроцессор обычно имеет количество адресных линий, равное логарифму по основанию 2 от числа слов в его физическом адресном пространстве. Например, процессору с 4 ГБ байтово адресуемого физического пространства требуется 32 линии (log2(4 ГБ) = log2(232 байт) = 32), которые обозначаются как A0–A31. Линии названы по номеру бита в адресе, который они передают, начиная с нуля. Наименее значащий бит является первым и, следовательно, имеет номер 0 и передается по линии A0. Линия A20 передает бит 20 (21-й бит) и активируется, когда адреса достигают 1 МБ, или 220.
The A20, or address line 20, is one of the electrical lines that make up the system bus of an x86 based computer system. The A20 line in particular is used to transmit the 21st bit on the address bus. A microprocessor typically has a number of address lines equal to the base two logarithm of the number of words in its physical address space. For example, a processor with 4 GB of byte addressable physical space requires 32 lines (log2(4 GB) = log2(232 B) = 32), which are named A0 through A31. The lines are named after the zero based number of the bit in the address that they are transmitting. The least significant bit is first and is therefore numbered bit 0 and signaled on line A0. A20 transmits bit 20 (the 21st bit) and becomes active once addresses reach 1 MB, or 220.
Обзор
Процессоры Intel 8086, Intel 8088 и Intel 80186 имели 20 линий адреса, пронумерованных от A0 до A19; с их помощью процессор мог обращаться к 2<sup>20</sup> байтам, или 1 МБ. Внутренние адресные регистры этих процессоров имели только 16 бит. Для доступа к 20-битному адресномy пространству, обращение к памяти осуществлялось путем сложения 16-битного смещения с 16-битным сегментным регистром, сдвинутым влево на 4 бита, для получения 20-битного физического адреса. Результирующий адрес равен (сегмент × 16) + смещение. Поскольку шлюз A20 изначально был закрыт сразу после загрузки, операционные системы, работающие в защищенном режиме, обычно открывали его на ранней стадии процесса загрузки и больше не закрывали. У таких операционных систем не было причин для сохранения его закрытым, и они получали доступ ко всему диапазону доступных физических адресов, открыв его. Intel 80486 и Pentium добавили специальный вывод A20M#, который, при установке в низкий уровень, принудительно обнулял 20-й бит физического адреса для всех обращений к кэшу на кристалле или внешней памяти. Это было необходимо, поскольку 80486 представил кэш на кристалле, и поэтому маскировка этого бита во внешней логике стала невозможной. Программное обеспечение по-прежнему должно управлять шлюзом A20 и взаимодействовать с внешними периферийными устройствами (чипсетом) для этого. Поддержка шлюза A20 была изменена в микроархитектуре Nehalem (некоторые источники ошибочно утверждают, что поддержка A20 была удалена). Вместо того, чтобы процессор имел выделенный вывод A20M#, принимающий сигнал о необходимости маскировки 20-го бита адреса, эта функция была виртуализирована, так что информация передается от периферийного оборудования к процессору с использованием специальных циклов шины. С точки зрения программного обеспечения механизм работает так же, как и раньше, и операционная система по-прежнему должна программировать внешнее оборудование (которое, в свою очередь, отправляет вышеупомянутые циклы шины процессору) для отключения маскировки A20. Intel больше не поддерживает шлюз A20, начиная с Haswell. На странице 271 "Руководства по программированию Intel System", том 3A от июня 2013 года указано: "Функциональность A20M# используется в основном старыми операционными системами и не используется современными операционными системами. На новых процессорах Intel 64 вывод A20M# может отсутствовать".
The Intel 8086, Intel 8088, and Intel 80186 processors had 20 address lines, numbered A0 to A19; with these, the processor can access 220 bytes, or 1 MB. Internal address registers of such processors only had 16 bits. To access a 20 bit address space, an external memory reference was made up of a 16 bit offset address added to a 16 bit segment number, shifted 4 bits to the left so as to produce a 20 bit physical address. The resulting address is equal to segment × 16 + offset. As the gate was initially closed right after boot, protected mode operating systems typically opened the A20 gate early during the boot process to never close it again. Such operating systems had no compatibility reasons for keeping it closed, and they gained access to the full range of physical addresses available by opening it. The Intel 80486 and Pentium added a special pin named A20M#, which when asserted low forces bit 20 of the physical address to be zero for all on chip cache or external memory accesses. It was necessary, since the 80486 introduced an on chip cache and so masking this bit in external logic was no longer possible. Software still needs to manipulate the gate and must still deal with external peripherals (the chipset) for that. Support for the A20 gate was changed in the Nehalem microarchitecture (some sources incorrectly claim that A20 support was removed). Rather than the CPU having a dedicated A20M# pin that receives the signal whether or not to mask the A20 bit, it has been virtualized so that the information is sent from the peripheral hardware to the CPU using special bus cycles. From a software point of view, the mechanism works exactly as before, and an operating system must still program external hardware (which in turn sends the aforementioned bus cycles to the CPU) to disable the A20 masking. Intel no longer supports the A20 gate, starting with Haswell. Page 271 of the Intel System Programmers Manual Vol. 3A from June 2013 states: "The functionality of A20M# is used primarily by older operating systems and not used by modern operating systems. On newer Intel 64 processors, A20M# may be absent."