Лекции по Вычислительным машинам, системам и сетям   

3. Тридцатидвухразрядные процессоры фирмы Intel

3.7. Страничный механизм

Этот механизм, в отличие от сегментного, можно включать и выключать по желанию, но задача относится к прерогативе системного программиста, а не пользователя. Для того чтобы включить страничный механизм, достаточно установить в единицу бит PG в регистре cr0. Это старший (31-й) бит этого регистра. Сделать это можно только командой mov cr0 , r3 . Команда lmsw r16/m 16 здесь не годится, так как она загружает только младшую половину cr0. При попытке включить страничный механизм в реальном режиме будет прерывание.

К серьезным недостаткам сегментного механизма относится трудность организации подкачки сегментов с диска, поскольку сегменты имеют разные размеры и могут быть очень большими по объему. В отличие от сегментов страницы имеют фиксированный размер 4 Кбайта и располагаются в строго определенных местах ОП. Нулевая страница располагается в адресах 00000000h ‑ 00000fffh, первая ‑ в адресах 00001000h ‑ 00001fffh и т.д. Пересекаться страницы не могут. Отметим, что в Pentium используются страницы размером 4 Кбайта и 4 Мбайта, а в Р6 – 4 Кбайта, 4 Мбайта и 2 Мбайта. В дальнейшем будем называть страницы объемом 4 Кбайта обычными, а 4 Мбайта и 2 Мбайта – большими. В данном разделе речь пойдет только об обычных страницах.

Двенадцать младших разрядов начального адреса любой обычной страницы всегда равны нулю. Поэтому любой объект в памяти, имеющий подобный начальный адрес, называется выровненным по границе страницы.

Всего в ОП может быть создано 220 страниц (4 Гбайта делить на 4 Кбайта). Все страницы объединяются в блоки. В один блок может входить до 210 страниц, при этом совсем необязательно подряд идущих. Иначе говоря, в блок могут входить 100-я страница, 5-я страница, 346-я страница и т.д. Для каждого блока создается таблица страниц. Каждый элемент этой таблицы описывает одну из входящих в блок страниц. Элемент таблицы страниц занимает в памяти 4 байта и называется элементом PTE (page table entry). Элемент PTE содержит начальный адрес (20 старших разрядов этого адреса, поскольку 12 младших все равно равны нулю) и атрибуты страницы, которую это элемент описывает. Одна таблица страниц занимает в памяти одну страницу (210×4 байта = 4 Кбайта). Соответственно, любая таблица страниц выровнена по границе страницы, т.е. 12 младших разрядов ее начального адреса равны нулю. Легко видеть, что блоков, а следовательно и таблиц страниц может быть создано до 210.

Для всех таблиц страниц в памяти создается каталог таблиц. Он также занимает в памяти ровно одну страницу и выровнен по ее границе. Элементы каталога (они называются PDE (page directory entry)) аналогичны элементам PTE, только описывают они не страницы, а таблицы страниц. Начальный адрес (вернее, его 20 старших разрядов) каталога задаются МП в регистре cr3. При включенном страничном механизме каталог всегда должен находиться в ОП, а таблицы и страницы могут находиться как в памяти, так и на диске. Если идет обращение к странице (или таблице), которая находится на диске, то происходит прерывание. Обработчик этого прерывания должен подкачать страницу с диска, после чего производится рестарт команды.

При включенном страничном механизме адрес, вырабатываемый сегментным механизмом (раньше мы его все время называли физическим), еще не является физическим адресом. Этот адрес принято называть линейным (Ал). Линейный адрес условно разбивается на три части (поля). Поле DIR задает смещение в каталоге, поле PAGE ‑ смещение в таблице, а поле OFFSET ‑ смещение в самой странице. На рис. 3.10 ‑ 3.12 приводится графическая интерпретация работы страничного механизма с соответствующими пояснениями.

Рис. 3.10

Рис. 3.11

Рис. 3.12

Итак, вначале работает сегментный механизм, который формирует линейный адрес Ал. Затем начинает работать страничный механизм. МП берет из регистра CR3 20 старших разрядов начального адреса каталога, «пристыковывает» к ним 10 разрядов из поля DIR линейного адреса и в младшие разряды добавляет два нуля (см. рис. 3.10). Тем самым МП формирует адрес элемента PDE. Элемент PDE занимает в памяти 4 байта и всегда выровнен по границе двойного слова, поэтому два младших разряда его адреса берутся равными нулю. Из найденного в памяти элемента PDE процессор извлекает начальный адрес таблицы страниц (20 старших разрядов этого адреса) и переходит к следующему этапу (см. рис. 3.11).

Этот этап очень похож на предыдущий. К 20-ти старшим разрядам начального адреса страницы, взятым из PDE, МП «пристыковывает» 10-разрядное смещение из поля PAGE линейного адреса Ал и в младшие разряды дописывает два нуля. Таким образом, МП формирует адрес элемента PTE, из которого он извлекает начальный адрес страницы (20 старших разрядов этого адреса). Затем МП переходит к последнему этапу формирования физического адреса (см. рис. 3.12). На этом этапе к 20 старшим разрядам начального адреса страницы, взятым из PTE, «пристыковывается» 12-разрядное внутристраничное смещение из поля OFFSET линейного адреса Ал. В результате получается  физический адрес Аф.

Как видно, страничный механизм весьма громоздкий и требует только для формирования физического адреса двух обращений в память. Если это механизм будет всегда работать, то ожидать от МП высокого быстродействия не приходится. Поэтому для повышения быстродействия в состав МП введена кэш-память страниц (буфер TLB (translation lookaside buffer – буфер предыстории трансляции)). В этом буфере хранятся начальные адреса 32-х страниц, к которым были последние обращения процессора. После того как сегментный механизм выработал Ал, МП прежде всего ищет начальный адрес нужной страницы в буфере TLB, и только если его там не окажется (а это бывает крайне редко, так как процент кэш-попаданий в буфер составляет 95 %), включается рассмотренный выше страничный механизм.

Страничный механизм предоставляет программисту (системному) следующие возможности.

1. Дает возможность упростить алгоритмы подкачки информации с диска, поскольку обмен информацией с диском ведется страницами, имеющими одинаковый небольшой размер.

2. Устраняет возможность возникновения фрагментации памяти (при обмене с диском разноразмерными сегментами в памяти неизбежно возникают «дыры»).

3. Позволяет «транслировать» вырабатываемые процессором линейные адреса в другие области ОП. Когда программист пишет команду, адресующую ОП, он задает в этой команде адрес. Сегментный механизм преобразует этот адрес в Ал, а страничный механизм преобразует Ал в Аф. При этом, как правило, Аф совсем не похож на Ал. Поэтому и говорят, что процессор транслирует Ал в другое место ОП. Например, пусть сегментный механизм выработал Ал = 00000008h, а в элементе PTE, к которому обратимся по ходу работы страничного механизма (кстати, из Ал видно, что этот PTE будет 0-м элементом соответствующей таблицы страниц), в поле «начальный адрес страницы» задано 777ffh. Тогда Аф будет равен 777ff008h. Нетрудно создать страницу, для которой линейные адреса будут совпадать с физическими, для этого надо записать соответствующую информацию в соответствующие элементы PDE и PTE. Такие страницы называются страницами с прямым отображением в память. Возможность трансляции адресов является важным свойством страничного механизма и широко используется на практике.

Приведем простой пример. Если какую-то страницу из ОП сбросили на диск, а потом вернули обратно в память, то эта страница скорее всего окажется совсем в другом месте ОП. Ничего страшного. Достаточно изменить информацию в PTE, и вырабатываемые при обращении к этой странице адреса будут транслироваться в новое место ОП.



*****

© 2009-2017 Банк лекций siblec.ru
Лекции для преподавателей и студентов. Формальные, технические, естественные, общественные, гуманитарные, и другие науки.