ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 24.12.2021
Просмотров: 12166
Скачиваний: 10

4 5 8 Глава 6. Уровень операционной системы
Биты
10
Линейный адрес
10
12
DIR
PAGE
OFF
Директория страниц Таблица страниц
Страничный кадр
Г
t
DIR
I
£
PAGE
1 i
T
Выбранное слово
Рис. 6.13. Отображение линейного адреса на физический адрес
Чтобы избежать повторных обращений к памяти, устройство управления па-
мятью Pentium II содержит специальную аппаратную поддержку для поиска не-
давно использовавшихся комбинаций DIR-PAGE и отображения их на физичес-
кий адрес соответствующего страничного кадра. Шаги, показанные на рис. 6.13,
выполняются только в том случае, если текущая комбинация не использовалась
недавно.
При применении разбиения на страницы значение поля BASE в дескрипторе
вполне может быть равно 0. Единственное, для чего нужно поле BASE, — это моти-
вировать небольшое смещение и использовать элемент в середине директории стра-
ниц, а не в начале. Поле BASE включено в дескриптор только для осуществления
чистой сегментации (без разбиения на страницы), а также для обратной совмести-
мости со старым процессором 80286, в котором не было разбиения на страницы.
Отметим, что если конкретное приложение не нуждается в сегментации и до-
вольствуется единым 32-битным адресным пространством со страничной органи-
зацией, этого легко достичь. Все сегментные регистры могут быть заполнены од-
ним и тем же селектором, дескриптор которого содержит поле BASE, равное 0, и
поле LIMIT, установленное на максимальное значение. Смещение команды будет
тогда линейным адресом с единственным адресным пространством — по сути, тра-
диционное разбиение на страницы.
В завершение стоит сказать несколько слов о защите, поскольку это имеет не-
посредственное отношение к виртуальной памяти. Pentium II поддерживает 4 уров-
ня защиты, где уровень 0 — самый привилегированный, а уровень 3 — наименее
привилегированный. Они показаны на рис. 6.14. В каждый момент работающая
программа находится на определенном уровне, указывающемся 2-битным полем
в
PSW (Program Status Word — слово состояния программы)
— регистре аппарат-
ного обеспечения, который содержит коды условия и другие биты состояния. Более
того, каждый сегмент в системе также принадлежит к определенному уровню.

Виртуальная память
459
Возможные
пользователи
разных уровней
" Уровень
Рис. 6.14. Уровни защиты процессора Pentium II
Пока программа использует сегменты только своего собственного уровня, все
идет нормально. Доступ к данным более высокого уровня разрешается. Доступ
к данным более низкого уровня запрещен
1
: в этом случае происходит системное
прерывание (ловушка). Допустим вызов процедур как более высокого, так и более
низкого уровня, но при этом нужно вести строгий контроль. Для вызова процеду-
ры из другого уровня команда CALL должна содержать селектор вместо адреса. Этот
селектор обозначает дескриптор, который выдает адрес нужной процедуры. Таким
образом, невозможно совершить переход в середину произвольного сегмента на
другом уровне. Могут использоваться только официальные точки входа.
Рассмотрим рис. 6.14. На уровне 0 мы видим ядро операционной системы, кото-
рая контролирует процесс ввода-вывода, работу памяти и т. п. На уровне 1 находит-
ся обработчик системных вызовов. Пользовательские программы могут вызывать
процедуры из этого уровня, но только строго определенные процедуры. Уровень 2
содержит библиотечные процедуры, которые могут разделяться несколькими ра-
ботающими программами. Пользовательские программы могут вызывать эти про-
цедуры, но не могут изменять их. На уровне 3 работают пользовательские програм-
мы, которые имеют самую низкую степень защиты. Система защиты Pentium II,
как и схема управления памятью, в целом основана на идеях системы MULTICS.
Ловушки и прерывания используют механизм, сходный с описанным выше. Они
тоже обращаются к дескрипторам, а не к абсолютным адресам, а эти дескрипторы
указывают на процедуры, которые нужно выполнить. Поле FIELD на рис. 6.11 слу-
жит для различения сегментов кода, сегментов данных и различных типов логи-
ческих элементов.
1
Эти слова следует понимать следующим образом: автор называет более высоким уровнем те сегмен-
ты данных, у которых значение уровня привилегий больше, хотя на самом деле все обстоит иначе.
Самым высоким уровнем привилегий считаются сегменты, имеющие уровень привилегий, равный О,
а самый низкий уровень привилегий имеют сегменты со значением этого уровня, равным 3. —
При-
меч. научн.ред.

4 6 0
Глава 6. Уровень операционной системы
Виртуальная память UltraSPARC II
UltraSPARC II — это 64-разрядная машина, которая поддерживает виртуальную
память со страничной организацией и с 64-битными виртуальными адресами. Тем
не менее по разным причинам программы не могут использовать полное 64-бит-
ное виртуальное адресное пространство. Поддерживается только 64 бита, поэтому
программы не могут превышать 1,8х10
13
байтов. Допустимая виртуальная память
делится на 2 зоны по 2
43
байтов каждая, одна из которых находится в верхней час-
ти виртуального адресного пространства, а другая — в нижней. Между ними нахо-
дится «дырка», содержащая адреса, которые не используются. Попытка использо-
вать их вызовет ошибку из-за отсутствия страницы.
Максимальная физическая память компьютера UltraSPARC II составляет 2
41
бай-
тов (2200 Гбайт). Поддерживается 4 размера страниц: 8 Кбайт, 64 Кбайт, 512 Кбайт
и 4 Мбайт. Отображения этих четырех размеров показаны на рис. 6.15.
Биты
51
13
48
16
45
19
42
22
Q.
О
ьно
и
i
ш
7i
ани
ц
ни
е
1
CD
2
CJ
о.
о
g*
*
4
CD ^
S g-
ни
е
CD
CD
2
О
Q.
О
ИОН
Ч
ВИ
1
K51
2
ниц
ь
стр
а
эи
н
CD
5
О
Q.
О
ИОН
Ч
1
ВИ
|
zs
S
X
CD
&
ни
е
CD
О
I I I I I J
ничны
й
CD
Q.
о
S
Q .
я
щени
е
2
о
ны
й
X
CD
а.
О
3
о.
СО
ни
е
CD
=1
CD
2
О
И1
Я
т
X
CD
а.
6
CN
Ю
О.
CD
X
CD
2
О
Биты 28
13
25 16
22 19
19
22
Рис. 6.15. Отображения виртуальных адресов в физические в машине UltraSPARC II
Из-за огромного виртуального адресного пространства обычная таблица стра-
ниц (как в Pentium II) не будет практичной. В UltraSPARC II применяется совер-
шенно другой подход. Устройство управления памятью содержит таблицу, так
называемый
TLB (Translation Lookaside Buffer — буфер быстрого преобразова-
ния адреса).
Эта таблица отображает номера виртуальных страниц в номера фи-
зических страничных кадров. Для страниц размером в 8 К существует 2
31
номеров
виртуальных страниц, то есть более двух миллиардов. Естественно, не все они мо-
гут быть отображены.
Поэтому TLB содержит только номера самых последних используемых вирту-
альных страниц. Страницы команд и страницы данных рассматриваются отдельно.
Для каждой из этих категорий в TLB включены номера 64 последних виртуальных
страниц. Каждый элемент этого буфера включает номер виртуальной страницы
и соответствующий номер физического страничного кадра. Когда номер процесса

Виртуальная память
461
вызывает его контекст, виртуальный адрес в этом контексте передается в контрол-
лер управления памятью, то он с помощью специальной схемы сравнивает номер
виртуальной страницы со всеми элементами буфера быстрого преобразования
адреса TLB для данного контекста одновременно. Если обнаруживается совпаде-
ние, номер страничного кадра в этом элементе буфера соединяется со смещени-
ем, взятым из виртуального адреса, чтобы получить 41-битный физический адрес
и обработать некоторые флаги (например, биты защиты). Буфер быстрого преоб-
разования адресаТЬВ изображен на рис. 6.16,
а.
TLB (контроллер
управления памятью)
TLB (контроллер
управления памятью +
программное обеспечение ]
и
ш
е
Б
со,
1
го
I
s
ш
ё
Элемент 0 совместно
используется всеми
виртуальными страницами,
заканчивающимися
на 0...0000
I
о i
¥ i
и
го
Транслирующая таблица
(операционная система)
Элемент 1 совместно
используется всеми
виртуальными страницами,
заканчивающимися
на 0...0001
Формат
полностью
определяется
операционной
системой
Рис. 6.16.
Структуры данных, использующиеся для трансляции виртуального адреса
на UltraSPARC II: буфер быстрого преобразования адреса TLB (а); буфер хранения
преобразований (б); транслирующая таблица (в)
Если совпадение не обнаружилось, происходит
промах в TLB,
который вызы-
вает ловушку в операционной системе. Обрабатывать ошибку должна сама опера-
ционная система. Отметим, что данный промах отличается от ошибки из-за отсут-
ствия страницы. Промах буфера TLB может произойти, даже если нужная страница
присутствует в памяти. Теоретически операционная система может сама загру-
зить новый элемент этого буфера для нужной виртуальной страницы. Однако для
ускорения данной операции к этой работе подключается аппаратное обеспечение,
если программное обеспечение взаимодействует с ним.
Операционная система должна сохранять наиболее часто используемые эле-
менты буфера TLB в таблице под названием
буфер хранения преобразований

4 6 2 Глава 6. Уровень операционной системы
(TSB — translation storage buffer).
Эта таблица построена как кэш-память прямого
отбражения виртуальных страниц. Каждый 16-байтный элемент данной таблицы
указывает на одну виртуальную страницу и содержит бит достоверности, номер
контекста, тег виртуального адреса, номер физической страницы и несколько флаго-
вых битов. Если размер кэш-памяти составляет, скажем, 8192 элемента, тогда все
виртуальные страницы, у которых младшие 13 битов отображаются в 0000000000000,
будут претендовать на элемент 0 в данной таблице. Точно так же все виртуальные
страницы, у которых младшие биты отображаются в 0000000000001, претендуют
на элемент 1 в этой таблице, как показано на рис. 6.16,
б.
Размер таблицы опреде-
ляется программным обеспечением и передается в контроллер управления памя-
тью через специальные регистры, доступные только для операционной системы.
При промахе буфера хранения преобразований операционная система прове-
ряет, содержит ли соответствующий элемент буфера TLB нужную виртуальную
страницу. Контроллер управления памятью вычисляет адрес этого элемента и по-
мещает его в свой внутренний регистр, доступный для операционной системы. Если
нужный элемент есть в таблице хранения преобразований, то какой-нибудь эле-
мент удаляется из буфера TLB, а соответствующий элемент буфера хранения пре-
образований копируется туда. Аппаратное обеспечение с помощью алгоритма LRU
выбирает, какой именно элемент нужно выкинуть.
Если нужной виртуальной страницы нет в кэш-памяти, операционная система
использует другую таблицу для нахождения информации о странице, которая мо-
жет находиться или не находиться в основной памяти. Таблица, которая применя-
ется для этого поиска, называется
транслирующей таблицей.
Поскольку здесь ап-
паратное обеспечение не участвует в поиске элементов, операционная система
может использовать любой формат. Например, она может хэшировать номер вир-
туальной страницы, разделив его на какое-либо число р, и использовать остаток
для индексирования таблицы указателей, каждый из которых указывает на связный
список виртуальных страниц, разделенных на р. Отметим, что эти элементы —
не собственно страницы, а элементы таблицы TSB. Если поиск страницы в табли-
це трансляции привел к нахождению нужной страницы в памяти, то элемент TSB
в кэш-памяти обновляется. Если в результате поиска обнаружилось, что нужной
страницы нет в памяти, то происходит стандартная ошибка.
Сравним схемы разбиения на страницы в Pentium II и UltraSPARC И. Pentium II
поддерживает чистую сегментацию, чистое разбиение на страницы и сегментацию
в сочетании с разбиением на страницы. UltraSPARC II поддерживает только раз-
биение на страницы. Pentium II использует аппаратное обеспечение для переза-
грузки элемента буфера TLB в случае промаха TLB. UltraSPARC II в случае такого
промаха просто передает управление операционной системе.
Причина этого различия состоит в том, что Pentium II использует 32-битные сег-
менты, а такие маленькие сегменты (только 1 млн страниц) могут обрабатываться
только с помощью страничных таблиц. Теоретически у Pentium II могли бы воз-
никнуть проблемы, если бы программа использовала тысячи сегментов, но так как
ни одна из версий Windows или UNIX не поддерживает более одного сегмента на
процесс, никаких проблем не возникает. UltraSPARC II — 64-битная машина. Она
может содержать до 2 млрд страниц, поэтому таблицы страниц не работают. В буду-
щем все машины будут иметь 64-битные виртуальные адресные пространства, и
схема UltraSPARC II станет нормой. Сравнение Pentium II, UltraSPARC II и че-
тырех других схем виртуальной памяти можно найти в книге [66].