Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
149
Добавлен:
24.05.2017
Размер:
1.12 Mб
Скачать

5 Аппаратная поддержка ОС Аппаратные средства поддержки мультипрограммирования имеются во всех

современных процессорах. Несмотря на различия в реализации, для большинства типов процессоров эти средства имеют общие черты. Это в полной мере относится и к рассматриваемому ниже популярному семейству 32-разрядных процессоров: 80386, 80486, Pentium, Pentium Рго, Pentium II, Celeron и Pentium III. Более того, средства поддержки операционной системы во всех этих процессорах построены почти идентично,

поэтому далее в тексте для их обозначения используется обобщенный термин

«процессоры Pentium».

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

Pentium выполняет 16-разрядные инструкции и адресует 1 Мбайт памяти.

5.1Программная модель микропроцессора

Ворганизации вычислительного процесса важную роль играют регистры процессора. В процессорах Pentium регистры делятся на несколько групп: регистры общего назначения, регистры сегментов, указатель инструкций, регистры отладки и тестирования, а также регистры математического сопроцессора, выполняющего операции

сплавающей точкой. В процессоре Pentium имеется восемь 32-разрядных регистров

общего назначения eax/ax/ah/al, ebx/bx/bh/bl, edx/dx/dh/dl,

ecx/cx/ch/cl,

ebp/bp, esi/si,

edi/di, esp/sp. Четыре из них, eax/ax/ah/al, ebx/bx/bh/bl,

edx/dx/dh/dl,

ecx/cx/ch/cl

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

используя обозначения ЕАХ, ЕВХ, ЕСХ, ЕDХ, а также к некоторым их частям, как это показано на рис. 5.1. Здесь обозначение АL относится к первому, самому младшему байту регистра ЕАХ, АН (Н — Нigh) — к следующему по старшинству байту, а АХ обозначает оба младших байта регистра. Приставка Е в обозначении этих регистров (а также некоторых других) образована от слова ехtended (расширенный), что указывает на то, что в прежних моделях процессоров Intel эти регистры были 16-разрядными, а затем их разрядность была увеличена до 32 бит. Остальные четыре регистра общего назначения —

ESI, ЕDI, ЕВР и ЕSР — предназначены для задания смещения адреса относительно начала некоторого сегмента данных. Эти регистры используются совместно с регистрами сегментов в системе адресации процессора Pentium для задания виртуального адреса,

который затем с помощью таблиц страниц отображается на физический адрес.

Остальные четыре

регистра

общего

 

 

 

назначения — ESI, ЕDI, ЕВР и ЕSР —

 

 

 

предназначены для задания смещения адреса

 

 

 

относительно

начала

некоторого

сегмента

 

 

 

данных. Эти регистры используются совместно

 

 

 

с регистрами сегментов в системе адресации

 

 

 

процессора Pentium для задания виртуального

 

 

 

адреса, который затем с помощью таблиц

 

 

 

страниц отображается на физический адрес.

 

 

 

1.

Регистры сегментов СS, SS, DS,

 

 

 

 

ЕS, GS и FS в защищенном

 

 

 

 

режиме

ссылаются на

 

дескрипторы

 

Рис. 5.1

 

 

сегментов памяти — описатели, в

 

 

 

 

КОТОРЫХ содержатся такие параметры сегментов, как базовый адрес,

 

размер сегмента, атрибуты защиты и некоторые другие. Регистры сегментов

 

хранят 16-разрядное число, называемое селектором, в котором 12 старших

 

разрядов представляют собой индекс в таблице

дескрипторов сегментов, 1

 

разряд указывает, в какой из двух таблиц, GDТ или LDТ, находится

 

дескриптор, а три разряда поля DPL хранят значение уровня привилегий

 

запроса к данному сегменту (Рис.6. ). Регистр CS предназначен для хранения

 

индекса дескриптора кодового сегмента, регистр SS — дескриптора

 

сегмента стека, а остальные регистры используются для указания на

 

дескрипторы сегментов данных. Все регистры сегментов, кроме CS,

 

программно доступны, то есть в них можно загрузить новое значение

 

селектора соответствующей командой (например, LDS). Значение регистра

 

СS изменяется при выполнении команд межсегментных вызовов Call, и

 

переходов

JМР,

а

также

при

переключении

задач.

 

Указатель инструкций ЕIР содержит смещение адреса текущей

 

инструкции, которое используется совместно с регистром СS для получения

 

соответствующего

 

виртуального

адреса.

 

Регистр флагов EFLAGS содержит 8 признаков состояния,

 

характеризующих результат выполнения операции, 5 системных признаков,

 

управляющих

вводом/выводом, маскируемыми

прерываниями,

отладкой,

переключением между задачами и виртуальным режимом 8086 и один флаг управления df.

Рис. 6.2

В процессоре Pentium имеется пять управляющих регистров — СR0, СR1, СR2, СRЗ и СR4, которые хранят признаки и данные, характеризующие общее состояние процессора.

Рис. 6.3

Регистр СR0 содержит все основные признаки, существенно влияющие на работу процессора, такие как реальный/защищенный режим работы, включение/ выключение страничного механизма системы виртуальной памяти, а также признаки, влияющие на работу кэша и выполнение команд с плавающей точкой. Младшие два байта регистра СRO имеют название Mashine State Word, MSW- слово состояния машины. Это название

использовалось в процессоре 8О286 для обозначения управляющего регистра, имевшего аналогичное назначение. Регистр СR1 в настоящее время не используется

(зарезервирован). Регистры СR2 и СR3 предназначены для поддержки работы системы виртуальной памяти. Регистр СR2 содержит линейный виртуальный адрес, который вызвал страничный отказ (отсутствие страницы в оперативной памяти или отказ из-за нарушения прав доступа). Регистр С3 содержит физический адрес таблицы разделов,

используемой страничным механизмом процессора. В регистре СR4 хранятся признаки,

разрешающие работу так называемых архитектурных расширений, например возможности использования страниц размером 4 Мбайт и т. п.

Регистры системных адресов содержат адреса важных системных таблиц и структур, используемых при управлении процессами и памятью. Регистр GDTR содержит физический 32-разрядный адрес глобальной таблицы дескрипторов сегментов памяти,

образующих общую часть виртуального адресного пространства всех процессов. Регистр

IDTR хранит физический 32-разрядный адрес таблицы дескрипторов прерываний IDТ,

используемой для вызова процедур обработки прерываний в защищенном режиме работы процессора. Кроме этих адресов в регистрах GDTR и IDTR хранятся 16-битные лимиты,

задающие ограничения на размер соответствующих таблиц.

Два 16-битных регистра хранят не физические адреса системных структур, а

значения индексов дескрипторов этих структур в таблице GTD, что позволяет косвенно получить соответствующие физические адреса. Регистр TR содержит индекс дескриптора сегмента состояния задачи ТSS. Регистр LDTR содержит индекс дескриптора сегмента локальной таблицы дескрипторов LDТ сегментов памяти, образующих индивидуальную часть виртуального адресного пространства процесса.

Регистры отладки хранят значения точек останова, а регистры тестирования

позволяют проверить корректность работы внутренних блоков процессора.

 

Средства

поддержки

сегментации

памяти

Средства поддержки механизмов виртуальной памяти в процессоре Pentium позволяют отображать виртуальное адресное пространство на физическую память размером максимум в 4 Гбайт (этот максимум определяется использованием 32разрядных адресов

при работе с оперативной памятью).

Процессор может поддерживать как сегментную модель распределения памяти, так и

сегментно-страничную. Средства сегментации образуют верхний уровень средств управления виртуальной памятью процессора Pentium, а средства страничной организации — нижний уровень. Это означает, что сегментные средства работают всегда, а средства страничной организации могут быть, как включены, так и выключены путем установки однобитного признака

РЕ в регистре СКО процессора. В зависимости от того, включены ли средства страничной организации, изменяется смысл процедуры преобразования адресов, которая выполняется средствами сегментации. Сначала рассмотрим случай работы средств сегментации при отключенном механизме управления страницами.

Виртуальное адресное пространство

При работе процессора Pentium в сегментном режиме в распоряжении программиста имеется виртуальное адресное пространство, представляемое совокупностью сегментов.

Каждый сегмент виртуальной памяти процесса имеет описание, называемое

дескриптором сегмента. Дескриптор сегмента имеет размер 8 байт и содержит все характеристики сегмента, необходимые для проверки правильности доступа к нему и нахождения его в физическом адресном пространстве (рис. 6.3).

Структура дескриптора, которая поддерживается в процессоре Pentium, сложилась исторически. Многое в ней связано с обеспечением совместимости с предыдущими процессорами семейства х86. Именно этим объясняется то, что базовый адрес сегмента

представлен в дескрипторе в виде трех частей, а размер сегмента занимает два поля.

Различаются.

 

три

основных

типа

 

сегментов:

-сегмент

 

 

 

 

 

данных;

-кодовый

 

 

 

 

 

сегмент;

-системный

сегмент

((ЮТ,

Т

и

т.

п.).

дескрипторы сегментов объединяются в таблицы.

Процессор

Pentium для управления

памятью

поддерживает

два

типа

таблиц

дескрипторов

сегментов1:

-глобальная

таблица которая

предназначена

для

описания

сегментов

операционной

системы и общих сегментов для всех прикладных процессов, например сегментов

межпроцессорного взаимодействия;

-локальная таблица дескрипторов, которая содержит дескрипторы сегментов отдельного

пользовательского

процесса.

Таблица GDT одна, а таблиц

LDT столько, сколько в системе выполняется задач

(процессов). При этом в каждый момент времени операционной системой и аппаратными средствами процессора используется только одна из таблиц LDT, а именно та, которая соответствует выполняемому в данный момент пользовательскому процессу. Таблица

GDT описывает общую часть виртуального адресного пространства процессов, а ЦТ — индивидуальную часть для каждого процесса. Таблицы GDT и LDT размещены в оперативной памяти в виде отдельных сегментов. Сегменты LDT и GDT содержат системные данные, поэтому их дескрипторы хранятся в таблице GDT. Таким образом,

таблица GDT наряду с записями о других сегментах содержит запись о самой сёбе, а

также обо всех таблицах LDT.

В каждый момент времени в специальных регистрах GDTR и LDTR хранится информация

о местоположении и размерах глобальной таблицы GDT и активной таблицы LDT

соответственно. Регистр LDTR содержит 32-разрядный физический адрес начала сегмента

LDT в памяти, а также 16-битный размер этого сегмента (рис. 6.4). Регистр LDTR

указывает на расположение сегмента LDT в оперативной памяти косвенно — он содержит индекс дескриптора в таблице GDT, в котором содержится адрес таблицы LDT и ее размер.

б байт

 

 

 

 

Рис.

6.4.

Формат

регистра

GTDR

1 Процессор Pentium поддерживает еще один тип таблицы дескрипторов — таблицу дескрипторов прерываний (IDT). Эта таблица используется системой прерываний.

32

 

16

 

 

 

Базовый

адрес в

Размер

физической

 

сегмента

 

 

 

памяти

сегмента

в байтах

GDT

 

 

 

 

 

 

Процесс обращается к физической памяти по виртуальному адресу,

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

интерпретироваться как номер сегмента, а смещение, как это и следует из его названия,

фиксирует положение искомого адреса относительно начала сегмента. Смещение задается в машинной инструкции, а селектор помещается в один из сегментных регистров процессора. Под смещение отводится 32 бита, что обеспечивает максимальный размер сегмента 4 Гбайт (232).

Селектор извлекается из одного из шести 16-разрядных сегментных регистров процессора (СS, SS, DS, ЕS, FS или GS) в зависимости от типа команды и стадии ее выполнения — выборки кода команды или данных. Например, при обращении к памяти во время выборки следующей команды используется селектор из сегментного регистра кода СS, а при записи результатов в сегмент данных процесса селекторы извлекаются из сегментных регистров данных DS или ES, если же данные записываются в стек по команде PUSH, то механизм виртуальной памяти извлекает селектор из сегментного регистра стека SS, и т. п.

Селектор состоит из трех полей (рис. 6.5):

-индекса, который задает последовательный номер дескриптора в таблице GTD или

LDT (13 бит);

-указателя типа используемой таблицы дескрипторов: GTD или LDT (1 бит);

-требуемого уровня привилегий RPL (2 бита), это поле используется механизмом защиты данных, который будет рассмотрен ниже.

Виртуальное адресное пространство процесса складывается из всех сегментов,

описанных в общей для всех процессов таблице GDT, и сегментов, описанных в его собственной таблице LDT. Разрядность поля индекса определяет максимальное число глобальных и локальных сегментов процесса — по 8 Кбайт (213) сегментов каждого типа,

всего 16 Кбайт сегментов. С учетом максимального размера сегмента — 4 Гбайт — каждый процесс при чисто сегментной организации виртуальной памяти (без включения страничного механизма) может работать в виртуальном адресном пространстве в 64

Тбайт.

Средства поддержки сегментации памяти

Каждый дескриптор в таблицах GTD и LDT имеет размер 8 байт, поэтому максимальный размер каждой из этих таблиц — 64 Кбайт (8 байт Х 8 Кбайт дескрипторов).

Из приведенного описания видно, что процессор Pentium обеспечивает поддержку работы ОС в двух отношениях:

-поддерживает работу виртуальной памяти за счет быстрого аппаратного способа преобразования виртуального адреса в физический;

-обеспечивает защиту данных и кодов различных приложений.

Преобразование адресов

Теперь проследим, каким образом виртуальное пространство в 64 Тбайт отображается на физическое пространство размером в 4 Гбайт. Механизм отображения преобразовывает виртуальный адрес, который представлен селектором, находящимся в одном из сегментных регистров, и смещением, извлеченным из соответствующего поля машинной инструкции, в линейный физический адрес.

Рассмотрим сначала случай, когда виртуальный адрес относится к одному из сегментов, дескрипторы которых содержатся в таблице GTD (рис. 6.6).

1. Значение селектора указывает механизму преобразования адресов,, что виртуальный адрес относится к сегменту, описываемому в таблице GTD. Местона223

Процессор складывает базовый адрес таблицы, взятый из регистра GDT, со сдвинутым на З разряда влево (умножение на 8 в соответствии с числом байтов в одном дескрипторе сегмента значением поля индекса из селектора. Результатом является

физический адрес дескриптора сегмента, к которому относится заданный виртуальный адрес.

2. По вычисленному адресу процессор извлекает из памяти дескриптор нужного сегмента.

З. Выполняется проверка возможности выполнения заданной операции доступа по заданному виртуальному адресу:

О сначала процессор определяет правильность адреса, сравнивая смещение,

заданное в виртуальном адресе, с размером сегмента, извлеченным из регистра GDT. (в

случае выхода адреса за границы сегмента происходит прерывание);

Озатем процессор проверяет права доступа задачи к данному сегменту памяти;

Одалее проверяется наличие сегмента в физической памяти (если бит Р дескриптора равен 0, то есть сегмент отсутствует в физической памяти, то происходит прерывание).

4. Если все три условия выполнены, то доступ по заданному виртуальному адресу разрешен. Выполняется преобразование виртуального адреса в физическим путем сложения базового адреса сегмента, извлеченного из дескриптора, и смещения, заданного

винструкции. Выполняется заданная операция над элементом физической памяти по этому адресу.

В случае, когда селектор в виртуальном адресе указывает не на таблицу GDT, а на таблицу LDT, процедура вычисления физического адреса несколько усложняется. Это связано с тем, что регистр LDTR в отличие от GDTR указывает на размещение таблицы сегментов не прямо, а косвенно. В LDTR содержится индекс дескриптора сегмента LDT.

Поэтому в процедуре преобразования адресов появляется дополнительный этап — определение базового адреса таблицы GDT. На основании базового адреса таблицы GDT,

взятого из регистра GDTR, и селектора, взятого из регистра LDTR, вычисляется смещение в таблице GDT, которое и является адресом дескриптора сегмента LDT.

Из дескриптора извлекается базовый адрес таблицы LTD, и с этого момента работа механизма отображения полностью аналогична описанному выше преобразованию виртуального адреса с помощью таблицы GDT: на основании базового адреса таблицы

LDT и селектора задачи, заданного в одном из сегментных регистров, вычисляется смещение в таблице LDT и определяется базовый адрес дескриптора искомого сегмента.

Из этого дескриптора извлекается базовый адрес сегмента, который складывается со смещением из виртуального адреса, что и дает в результате искомый физический адрес.

Таким образом, для использования сегментного механизма процессора Pentium

операционной системе необходимо сформировать таблицы GDT и LDT, загрузить их в

память (для начала достаточно загрузить только таблицу GDT), загрузить указатели на эти таблицы в регистры GDT и LDTR и выключить поддержку.

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

Виртуальное адресное пространство задачи будет состоять из одного сегмента длиной максимум в 4 Гбайт. Поскольку выгрузка процессов на диск будет осуществляться целиком, виртуальная память вырождается в таком частном случае в свопинг.

Защита

данных

при

сегментной

организации

 

 

памяти

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

-Процессор Pentium поддерживает для каждого процесса отдельную таблицу дескрипторов сегментов LDT. Эта таблица формируется операционной системой на этапе

создания процесса. После активизации процесса в регистр

LDTR

заносится адрес

(селектор) его таблицы LDT. Тем самым система делает недоступным для процесса

локальные сегменты

других процессов, описанные

в их

таблицах

.

-Вместе с тем таблица GTD, в которой хранятся дескрипторы сегментов операционной

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

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

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

-Само по себе наличие отдельных таблиц дескрипторов для каждого процесса еще не обеспечивает надежной защиты процессов друг от друга. Действительно, что мешает одному пользовательскому процессу изменить содержимое регистра Г1)ТК так, чтобы он указывал на таблицу другого процесса? Аналогично никакие значения атрибутов безопасности не смогут защитить от несанкционированного доступа сегменты, описанные

Соседние файлы в папке учебник(см. лекции) Корольковой