Независимости собственных адресных пространств каждой задачи LDT (local description table).
Общее разделяемое адресное пространство для обмена GDT (global description table).
В микропроцессорах Х86 реализована сегментная организация и может подключаться страничная.
Сегментная организация виртуальной памяти
Сегментная организация памяти предполагает наличие двух компонентов памяти:
* виртуальную,
* физическую.
Все пространство виртуальной памяти делится на виртуальные адресные пространства процессов, а виртуальное адресное пространство процессов делится на сегменты в общем случае разного размера.
Отображение виртуальных адресных пространств процессов выполняется через таблицы дескрипторов сегментов.
Смежные сегменты процесса могут получить несмежные сегменты физической памяти.
Адресация памяти в командах программ осуществляется виртуальной парой Selector: offset (номер сегмента, адрес внутри сегмента), которая преобразуется операционной системой в адрес физической памяти.
Процесс преобразования виртуального адреса в физический осуществляется с помощью специальных регистров (GDTR, LDTR, IDTR, TR), доступных только операционной системе, таблиц дескрипторов сегментов (LDT, GDT, IDT) и таблиц контекстов прерванных задач TSS.
После активизации (создании) процесса ОС заносит указатель селектора LDT в таблице GDT в регистр LDTR.
Это делает недоступным LDT процесса для другого процесса.
Использование таблиц локальных дескрипторов LDT позволяет разнести физические адресные пространства отдельных задач без права их обращения к "чужой" памяти, а система привилегий, встроенная в архитектуру процессора, предотвращает несанкционированный вызов задачами защищенных процедур (например, программ операционной системы) или обращение к устройствам ввода-вывода.
|
|
Защита адресных пространств задач выполняется отдельными адресными пространствами и контролем уровней привилегий.
Каждый дескриптор имеет DPL (descriptor privilege level), задающий уровень привилегий сегмента.
В физической памяти могут быть сегменты кода, данных, стека, таблиц дескрипторов сегментов LDT, GDT, IDT, TSS .
Все сегменты физической памяти имеют дескрипторы, которые сведены в таблицы и имеют 8-байтный формат (дескриптор страниц имеет 4 – байтный формат, в Pentium – 8 байт).
Таблицы дескрипторов также сведены в отдельные сегменты.
Имеется три вида дескрипторов сегментов: GDT, LDT, IDT (дескриптор шлюза и TSS находится в GDT).
GDT– глобальная таблица дескрипторов для описания сегментов системного и сегментов общего (межзадачного взаимодействия) назначения (TSS и др.).
Эти сегменты могут использоваться всеми процессами.
Таблица GDT одна.
LDT – локальная таблица дескрипторов сегментов для описания сегментов процессов ( по одной на каждый процесс ).
|
|
В каждый момент времени активной может быть только одна таблица LDT.
Итак, число таблиц GDT одна, а LDT- равна числу процессов.
Разница между GDT и LDT в том, что сегменты, описываемые глобальными дескрипторами, доступны всем задачам, выполняемым процессором, а к сегментам, описываемым локальными дескрипторами, может обращаться только та задача, в которой эти дескрипторы описаны.
Порядок дескрипторов в таблице (кроме нулевого) не имеет значения.
Сегменты активны, если их таблицы в ОЗУ.
IDT ( interrupt description table ) - содержит таблицу 256 векторов прерываний.
В регистрах GDTR и IDTR указываются начальные адреса сегментов с таблицами GDT и IDT.
В регистре LDTR указывается селектор дескриптора таблицы LDT в таблице GDT.
В регистре TR ( task register – регистр задач) – указатель TSS (task state segment .
Для загрузки GDTR предусмотрена специальная привилегированная команда lgdt (load global descriptor table, загрузка таблицы глобальных дескрипторов), которая требует указания в качестве операнда имени псевдодескриптора.
Структуру виртуального адреса команды можно представить в следующем виде:
В реальном режиме в сегментные регистры загружаются базовые адреса сегментов в явной форме.
|
|
Для сегментов данных и стека – программистом командами программы, для сегмента кода это делает ОС.
В защищенном же режиме в сегментные регистры загружаются не сегментные адреса, а селекторы, в состав которого входит номер (адрес) или индекс дескриптора соответствующего сегменту.
Процессор по этому номеру находит нужный дескриптор, в котором записываются базовый адрес сегмента, его длина и некоторые другие характеристики.
К базовому адресу сегмента прибавляется, указанное в конкретной команде смещение (относительный адрес) и формируется адрес ячейки памяти.
Индекс дескриптора записывается в селектор, начиная с бита 3, что эквивалентно умножению его на 8.
Таким образом, можно считать, что селекторы последовательных дескрипторов представляют собой числа 0, 8, 16, 24 и т.д.
Максимальное число глобальных и локальных сегментов (по числу дескрипторов) задачи 213 (по 8 Кбайт) равно 16 К (т.е . либо GDT, либо LDT ).
В процессоре для каждого из сегментных регистров имеется так называемый теневой 96 р. программно – недоступный регистр дескриптора, который имеет формат.
Теневые регистры не доступны программисту; они автоматически загружаются процессором из таблицы дескрипторов каждый раз, когда процессор загружает соответствующий сегментный регистр.
|
|
Именно содержимое теневого регистра определяет область памяти, к которой обращается процессор при выполнении конкретной команды.
Так как доступ к ним быстрее, чем к таблице дескрипторов, то они играют роль КЭШ дескрипторов.
Таким образом, в защищенном режиме программист имеет делос селекторами, т.е. номерами дескрипторов, а процессор - с самими дескрипторами, хранящимися в теневых регистрах.
В реальном режиме теневые регистры заполняются не из таблицы дескрипторов, а непосредственно самим процессором.
В частности, процессор заполняет поле базы каждого теневого регистралинейным базовым адресом сегмента, полученным путем умножения на 16 содержимого сегментного регистра, как это и положено в реальном режиме.
Двухразрядный код 0 и 1 битов селектора указывают требуемый уровень привилегий задачи RPL – request privillege level в пределах 0 – 3.
Уровень привилегированности задачи называют текущим уровнем привилегированности (current privilege level, CPL).
Каждый дескриптор и каждый селектор также имеют свои уровни привилегированности, называемые соответственно уровнем привилегированности дескриптора (descriptor privilege level, DPL) и запрашиваемым уровнем привилегированности (requested privileged level, RPL).
Фактически текущий уровень привилегированности задачи (CPL) представляет собой не что иное, как уровень привилегированности селектора (RPL), загруженного в данный момент в регистр CS.
Бит 2 указывает, какая таблица дескрипторов - GDT или LDT используется для преобразования виртуального адреса ( при 0 - GDT , иначе LDT ).
Биты 3-15 задают адрес (номер) дескриптора сегмента в выбранной таблице дескрипторов.
Процессор по этим адресам находит нужный дескриптор с базовым адресом сегмента и др. данными.
Индекс селектора (3 – 15 ) задает максимальное число дескрипторов в таблицах GDT и LDT, равным 2 ^ 13 = 8 к.
32 – разрядный код смещения offset задает адрес ячейки в сегменте ОЗУ.
Общий вид сегментной адресации памяти можно представить в виде, изображенном на рисунке.
Адрес ОЗУ сегмента равен сумме базового адреса (иногда упоминаемого как номер сегмента), указанного в дескрипторе, и смещения, указанного в компоненте offset команды.
Разрядность offset задает максимальный размер сегмента ОЗУ ( 232 = 4 Гб ).
Как уже отмечалось выше, обращение к сегментам в защищенном режиме возможно исключительно через дескрипторы этих сегментов.
Для доступа к сегменту уровень привилегий, указанный в команде (RPL), должен быть не ниже уровня привилегий сегмента, указанного в дескрипторе сегмента DPL (description privilege level ).
После получения доступа к сегменту уровень привилегий становится текущим (CPL –current privilege level ), который фактически совпадает с RPL, так как RPL >= DPL .
Размер дескриптора сегмента равен 8 байт, и он содержит все характеристики сегмента, необходимые для проверки правильности доступа к нему и нахождения его в физическом адресном пространстве.
Дата добавления: 2018-08-06; просмотров: 371; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!