Если сегмент находится в памяти, а смещение не выходит за границу сегмента, Pentium 4 прибавляет 32-разрядное поле BASE (базовый адрес) в дескрипторе к смещению, в результате чего получается линейный адрес (рис. 6.12). Поле BASE разбивается на три части и разносится по дескриптору, чтобы обеспечить совместимость с процессором 80286, в котором размер BASE составляет всего 24 бита. Поэтому каждый сегмент может начинаться с произвольного места в 32-разрядном адресном пространстве.
Рис. 6.12. Преобразование пары селектор-смещение в линейный адрес
Если разбиение на страницы блокировано (это определяется по биту в глобальном регистре управления), линейный адрес интерпретируется как физический адрес и отправляется в память для чтения или записи. Таким образом, при блокировке разбиения на страницы мы имеем «чистую» схему сегментации, где каждый базовый адрес сегмента присутствует в его дескрипторе. Допускается перекрытие сегментов, поскольку было бы слишком утомительно тратить много времени на проверку того, что сегменты непересекающиеся.
Если же разбиение на страницы разрешено, линейный адрес интерпретируется как виртуальный и отображается на физический адрес с использованием таблиц страниц, почти как в наших примерах. Единственная сложность состоит в том, что при 32-разрядном виртуальном адресе и 32-разрядных страницах 4-ки-лобайтный сегмент может содержать 1 миллион страниц. Поэтому, чтобы сократить размер таблицы страниц для маленьких сегментов, применяется двухуровневое отображение.
Каждая работающая программа имеет специальную таблицу страниц, которая состоит из 1024 32-разрядных элементов. Ее адрес указывается глобальным регистром. Каждый элемент в этой таблице указывает на таблицу страниц, которая также содержит 1024 32-разрядных элементов. Элементы таблицы страниц указывают на страничные кадры. Схема изображена на рис. 6.13.
Рис. 6.13. Отображение линейного адреса на физический
На рис. 6.13, а мы видим линейный адрес, разбитый на три поля: DIR, PAGE и OFF. Поле DIR используется в качестве индекса в каталоге страниц для нахождения указателя на нужную таблицу страниц. Поле PAGE является индексом в таблице страниц при нахождении физического адреса страничного кадра. Наконец, поле OFF прибавляется к адресу страничного кадра, что позволяет получить физический адрес нужного байта или слова.
Размер каждого элемента таблицы страниц — 32 бита, 20 из которых содержат номер страничного кадра. Оставшиеся биты включают бит доступа и бит
изменения, которые устанавливаются аппаратно, чтобы помочь операционной системе, биты защиты и некоторые другие.
В каждой таблице страниц содержатся элементы для 1024 страничных кадров по 4 Кбайт каждый, поэтому одна таблица страниц может работать со значением 4 Мбайт памяти. Сегмент короче 4 Мбайт будет иметь каталог страниц с одним элементом (указателем на его единственную таблицу страниц). Таким образом, непроизводительные издержки для коротких сегментов составляют всего две страницы, а не миллион страниц, как было бы в одноуровневой таблице страниц.