7.3.4. Организация памяти 80286
Шина
адреса разрядностью 24 бита позволяет адресовать 16 Мбайт физической памяти, но
в реальном режиме доступен только 1 Мбайт, начинающийся с младших адресов. С
программной точки зрения память так же, как и в 8086, организуется в виде
сегментов, но управление сегментацией имеет существенные различия для реального
и защищенного режимов.
В
реальном режиме по адресации памяти декларируется полная совместимость с
процессором 8086, который своей 16-битной адресной шиной охватывает
пространство физической памяти в 1 Мбайт. На самом деле, на радость
разработчикам программного обеспечения PC, 80286 имеет ошибку, «узаконенную» и
в следующих поколениях процессоров. При вычислении физического адреса (см. рис.
4.1) возможно возникновение переполнения, которое с 20-битной шиной адреса
просто игнорируется. Если, например, Seg=FFFFh и EA=FFFFh, физический адрес,
вычисленный по формуле РА=16 х Seg + EA=10FFEF, процессором 8086 трактуется как
OFFEF — адрес, принадлежащий первому мегабайту. Однако на выходе А20 процессора
80286 в этом случае установится единичное значение, что соответствует адресу
ячейки из второго мегабайта физической памяти. Для обеспечения полной
программной совместимости с 8086 в схему PC был введен специальный вентиль Gate
A20, принудительно обнуляющий бит А20 системной шины адреса. Не оценив
потенциальной выгоды от этой ошибки, управление вентилем узаконили через
программно-управляемый бит контроллера клавиатуры 8042. Когда оперативная
память подешевела, а «аппетит» программного обеспечения вырос, в эту небольшую
область (64К-16 бит) стали помещать некоторые резидентные программы или даже
часть операционной системы, а для ускорения управления вентилем появились более
быстрые способы (Gate A20 Fast Control).
В
отличие от 8086 процессор 80286 имеет средства контроля за переходом через
границу сегмента, работающие и в реальном режиме. При попытке адресации к
слову, имеющему смещение FFFFh (его старший байт выходит за границу сегмента),
или выполнения инструкции, все байты которой не умещаются в данном сегменте,
процессор вырабатывает прерывание — исключение типа 13 (0Dh) — Segment Overran
Exception. При попытке выполнения инструкции ESCAPE с операндом памяти, не
умещающемся в сегменте, вырабатывается исключение типа 9 — Processor Extension
Segment Overrrun Interrupt.
В
защищенном режиме работают все режимы адресации, допустимые для 8086 и
реального режима 80286. Отличия касаются определения сегментов:
сегментные
регистры CS, OS, SS и ES хранят не сами базовые адреса сегментов, а селекторы,
по которым из таблицы, хранящейся в ОЗУ, извлекаются дескрипторы сегментов
дескриптор
описывает базовый адрес, размер сегмента (1 — 64 Кбайт) и его атрибуты;
базовый
адрес сегмента имеет разрядность 24 бита, что и обеспечивает адресацию 16 Мбайт
физической памяти.