110 Глава 4, Особенности архитектуры микропроцессоров J80x86
Рассмотренный нами процесс получения линейного адреса иллюстрирует рис. 4.6.
Стоит отметить, что поскольку межсегментные переходы происходят нечасто,
то, как правило, определение линейного адреса заключается только в сравнении
значения EIP с полем предела сегмента и в прибавлении смещения к началу сег-
мента. Все необходимые данные уже находятся в микропроцессоре, и операция
получения линейного адреса происходит очень быстро.
Итак, линейный адрес может считаться физическим адресом, если не включен ре-
жим страничной трансляции адресов. К сожалению, аппаратных средств микро-
процессора для поддержки рассмотренного способа двойной трансляции виртуаль-
ных адресов в физические явно недостаточно. При наличии большого количества
небольших сегментов, из которых состоят программы, это приводит к заметному
замедлению в работе процессора. В самом деле, теневой регистр при каждом се-
лекторе имеется в единственном экземпляре, и при переходе на другой сегмент
требуется вновь находить и извлекать соответствующий дескриптор сегмента, а. это
отнимает время. Страничный же способ трансляции виртуальных адресов, как мы
знаем, имеет немало достоинств. Поэтому в защищенном режиме работы, при ко-
тором всегда действует описанный выше механизм определения линейных адре-
сов, может быть включен еще и страничный механизм.
Поддержка страничного способа организации
виртуальной памяти
При создании микропроцессора i80386 разработчики столкнулись с очень серьез-
ной проблемой в реализации страничного механизма. Дело в том, что микропро-
цессор имел широкую шину адреса (32 бит), и возник вопрос о разбиении всего
адреса на поле страницы и поле индекса. Если большое количество битов адреса
отвести под индекс, то страницы станут очень большими, что повлечет значитель-
ные потери и на фрагментацию, и на операции ввода-вывода, связанные с замеще-
нием страниц. Хотя количество страниц стало бы при этом меньше, и накладные
расходы на их поддержание тоже уменьшились бы. Если же размер страницы умень-
шить, то большое поле номера страницы привело бы к потенциально громадному
количеству страниц, и пришлось бы либо вводить какие-то механизмы контроля
за номерами страниц (с тем, чтобы они не выходили за размеры таблицы страниц),
либо создавать эти таблицы максимального размера. Разработчики пошли по пути,
при котором размер страницы выбран небольшим (2
12
= 4096 = 4 Кбайт), а поле
номера страницы величиной в 20 бит, в свою очередь, разбивается на два поля и
осуществляется двухэтапная страничная трансляция.
Для описания каждой страницы создается соответствующий дескриптор. Длина
дескриптора выбрана равной 32 бит: 20 бит линейного адреса определяют номер
страницы (по существу — ее адрес, поскольку добавление к нему 12 нулей при-
водит к определению начального адреса страницы), а остальные биты разбиты
на поля, показанные на рис. 4.7. Как видно, три бита дескриптора зарезервирова-
но для использования системными программистами при разработке подсистемы
организации виртуальной памяти. С этими битами микропроцессор сам не рабо-
тает.