Введение

Сигнал в системной шине компьютерной системы на базе x86.

Линия A20, или адресная линия 20, является одной из электрических линий, составляющих системную шину компьютерной системы на базе x86. В частности, линия A20 используется для передачи 21-го бита в адресной шине. Микропроцессор обычно имеет количество адресных линий, равное логарифму по основанию 2 от числа слов в его физическом адресном пространстве. Например, процессору с 4 ГБ байтово адресуемого физического пространства требуется 32 линии (log2(4 ГБ) = log2(232 байт) = 32), которые обозначаются как A0–A31. Линии названы по номеру бита в адресе, который они передают, начиная с нуля. Наименее значащий бит является первым и, следовательно, имеет номер 0 и передается по линии A0. Линия A20 передает бит 20 (21-й бит) и активируется, когда адреса достигают 1 МБ, или 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# может отсутствовать".