Линия А20


A20 , или адресная линия 20 , является одной из электрических линий, составляющих системную шину компьютерной системы на базе архитектуры x86 . В частности, линия A20 используется для передачи 21-го бита на адресной шине .

Микропроцессор обычно имеет число адресных строк, равное логарифму по основанию 2 числа слов в его физическом адресном пространстве . Например, для процессора с 4 ГБ физического пространства с байтовой адресацией требуется 32 строки с именами от A0 до A31. Строки названы в честь отсчитываемого от нуля числа битов в адресе, который они передают. Младший значащий бит является первым и поэтому нумеруется битом 0 и сигнализируется в строке A0. A20 передает бит 20 (21-й бит) и становится активным, когда адреса достигают 1 МБ или 2 20 .

Процессоры Intel 8086 , Intel 8088 и Intel 80186 имели 20 адресных строк, пронумерованных от A0 до A19; с ними процессор может получить доступ к 220 байтам или 1 МБ. Внутренние адресные регистры таких процессоров имели всего 16 бит. Для доступа к 20-битному адресному пространству ссылка на внешнюю память состояла из 16-битного адреса смещения , добавленного к 16-битному номеру сегмента , сдвинутого на 4 бита, чтобы получить 20-битный физический адрес. Результирующий адрес равен сегменту × 16 + смещение . [1]Существует много комбинаций сегмента и смещения, которые дают один и тот же 20-битный физический адрес. Поэтому существовали различные способы адресации одного и того же байта в памяти. [2] Например, вот четыре из 4096 различных комбинаций сегмент:смещение, все они ссылаются на байт, физический адрес которого равен 0x000FFFFF (последний байт в 1 МБ памяти):

В последнем случае увеличение смещения на единицу дает F800:8000, что является правильным адресом для процессора, но, поскольку он преобразуется в физический адрес 0x00100000 (первый байт более 1 МБ), процессору потребуется другой адрес. строка для фактического доступа к этому байту. Поскольку в линейке процессоров 8086 такой строки нет, установленный выше 21-й бит сбрасывается, в результате чего адрес F800:8000 «зацикливается» [1] и фактически указывает на физический адрес 0x00000000.

Когда IBM разработала машину IBM PC AT (1984), она решила использовать новый высокопроизводительный микропроцессор Intel 80286 . 80286 может адресовать до 16 МБ системной памяти в защищенном режиме . Однако предполагалось, что ЦП будет эмулировать поведение 8086 в реальном режиме ., его режим запуска, чтобы он мог запускать операционные системы и программы, которые не были написаны для защищенного режима. Однако 80286 не обнуляет линию A20 в реальном режиме. Следовательно, комбинация F800:8000 будет указывать уже не на физический адрес 0x00000000, а на адрес 0x00100000. В результате программы, использующие перенос адресов, больше не будут работать. Чтобы сохранить совместимость с такими программами, IBM решила исправить проблему на материнской плате .

Это было достигнуто путем вставки логического вентиля в линию A20 между процессором и системной шиной, которая получила название Gate-A20 . Gate-A20 можно активировать или деактивировать с помощью программного обеспечения, чтобы разрешить или запретить адресной шине получать сигнал от A20. Для него установлено значение non-passing для выполнения старых программ, которые полагаются на перенос. Во время загрузки BIOS сначала включает Gate-A20, когда он подсчитывает и тестирует всю системную память, а затем отключает его перед передачей управления операционной системе.


Верхняя область памяти доступна только в реальном режиме на процессорах 80286, если активирован вентиль A20.