Лекция №10
Защищенный режим работы микропроцессора
Вопросы
1.
Основные
характеристики реального режима.
2.
Ключевые
моменты защищенного режима.
3. Системные
регистры микропроцессора
·
регистры управления
·
регистры управления памятью (системных адресов)
·
регистры отладки
Впервые защищенный режим появился в микропроцессоре
i80286 фирмы Intel. Именно этот режим позволяет полностью использовать
все возможности, предоставляемые микропроцессором.
Все современные многозадачные операционные системы
работают только в этом режиме. Поэтому для понимания всех процессов,
происходящих в компьютере во время работы многозадачной операционной системы,
необходимо знать основы функционирования микропроцессора в защищенном режиме.
Мы подробно рассмотрим архитектуру микропроцессора
в защищенном режиме и основные правила программирования этого режима.
Вспомним основные
характеристики реального режима.
Любой современный
микропроцессор, находясь в реальном режиме, очень мало отличается от старого
доброго i8086. Это лишь его более быстрый аналог с увеличенным
(до 32 бит) размером всех регистров, кроме сегментных. Чтобы получить доступ
ко всем остальным архитектурным и функциональным новшествам микропроцессора,
необходимо перейти в защищенный режим.
В реальном режиме работы микропроцессора
·
объем
адресуемой памяти - 1 Мб (=2**20, у них 20-разрядная шина адреса)
·
поддерживается
выполнение всего одной программы Þ нет потребности в
организации защиты программ от взаимного влияния
·
поддерживается
сегментированная модель памяти
·
сегмент
имеет длину не более 64 Кбайт
·
адрес
сегмента располагается в одном из сегментных регистров
·
отсутствуют
аппаратные средства контроля доступа к сегменту Þ любая программа может
обратиться к любому адресу в памяти.
Формирование физического
адреса происходит по правилам реального режима:
для определения физического
адреса команды содержимое сегментного регистра CS умножается на 16 за счет
добавления справа (к младшим битам) четырех нулей, после чего к полученному
значению прибавляется содержимое указателя команд (регистр IP).
Получается двадцатибитовое значение (20-разрядная шина адреса).
Теперь рассмотрим
ключевые моменты защищенного режима.
В защищенном режиме изменились
принцы работы микропроцессора с памятью.
Память по-прежнему является
сегментированной, но изменяются функции и номенклатура программно-аппаратных
компонентов, участвующих в сегментации.
Вспомним, что прежде всего режим должен обеспечивать
многозадачность. Для обеспечения совместной работы нескольких задач необходимо
защитить их от взаимного влияния, а также регулировать взаимодействие между
ними в случае необходимости.
Для решения этих проблем сегментам присваиваются
определенные атрибуты, такие, что часть контроля за доступом к сегментам можно
переложить на сам микропроцессор.
Любой сегмент памяти в защищенном режиме описывается
дескриптором сегмента.
Дескриптор сегмента имеет размер 8 байт и
содержит следующие атрибуты:
·
расположение
сегмента в памяти;
·
размер
сегмента;
·
уровень
привилегий — определяет права данного сегмента относительно других сегментов;
·
тип
доступа — определяет назначение сегмента;
·
и
другие.
Обратим внимание, что в
защищенном режиме микропроцессор поддерживает два типа защиты — по
привилегиям и доступу к памяти. В отличие от реального режима в защищенном
режиме программа уже не может запросто обратиться по любому физическому адресу
памяти. Для этого она должна иметь определенные полномочия и удовлетворять ряду
требований.
Все дескрипторы собираются
вместе в одну из 3 дескрипторных таблиц. В какую именно таблицу должен быть
помещен дескриптор, определяется его назначением. Адрес, по которому
размещаются эти дескрипторные таблицы, может быть любым; он хранится в
специально предназначенном для этого адреса системном регистре.
! |
Формирование физического адреса происходит по
правилам защищенного режима, поэтому программы, созданные для реального режима
функционировать в защищенном не могут.
Адреса задаются 32-битовыми значениями. Возможна
страничная трансляция адресов.
Системные регистры микропроцессора
Эти регистры обеспечивают
работу защищенного режима. Их также можно рассматривать как часть архитектуры
микропроцессора, которая намеренно оставлена видимой для того, чтобы квалифицированный
системный программист мог выполнить самые низкоуровневые операции.
Системные регистры можно разделить на три группы:
·
четыре
регистра управления;
·
четыре
регистра системных адресов;
·
восемь
регистров отладки.
! |
Большинство
из системных регистров программно доступны.
Регистры управления
В группу регистров управления входят 4 регистра:
сгО, сг1, сг2, сгЗ.
Эти регистры предназначены для общего управления
системой (определяют режимы работы микропроцессора). Они 32-битовые.
Регистры управления доступны только программам с
уровнем привилегий 0.
Хотя микропроцессор имеет четыре регистра
управления, доступными являются только три из них; исключается сг1, функции
которого пока не определены (он зарезервирован для будущего использования).
Регистр сг0 содержит системные флаги,
управляющие режимами работы микропроцессора и отражающие его состояние
глобально, независимо от конкретных выполняющихся задач.
Регистр сг0 используется при страничной
модели организации памяти.
Назначение системных флагов:
·
ре (Protect Enable), бит 0 — разрешение
защищенного режима работы.
·
Состояние
этого флага показывает, в каком из двух режимов — реальном (ре=0) или
защищенном (ре=1) - работает микропроцессор в данный момент времени.
·
mp (Math Present), бит 1 — наличие
сопроцессора. Всегда 1.
·
ts (Task Switched), бит 3 — переключение задач.
Процессор автоматически устанавливает этот бит при переключении на выполнение
другой задачи;
·
am (Alignment Mask), бит 18 — маска
выравнивания. Этот бит разрешает (am =1) или запрещает (am =
0) контроль выравнивания;
·
cd (Cache Disable), бит 30 — запрещение
кэш-памяти. С помощью этого бита можно запретить (cd = 1) или разрешить (cd = 0)
использование внутренней кэш-памяти (кэш-памяти первого уровня);
·
pg (PaGing), бит 31 — разрешение (pg = 1) или запрещение (pg =
0) страничного преобразования.
Регистр сг2 используется при страничной организации оперативной
памяти для регистрации ситуации, когда текущая команда обратилась по адресу, содержащемуся
в странице памяти, отсутствующей в данный момент времени в памяти.
В такой ситуации в микропроцессоре возникает
исключительная ситуация 14, и линейный 32-битный адрес команды, вызвавшей это
исключение, записывается в регистр сг2. Имея эту информацию, обработчик исключения
14 определяет нужную страницу, осуществляет ее подкачку в память и возобновляет
нормальную работу программы.
Регистр сгЗ также используется при страничной организации
памяти. Это так называемый регистр каталога страниц первого уровня. Он
содержит 20-битный физический базовый адрес каталога страниц текущей задачи.
Этот каталог содержит 1024 32-битных дескриптора,
каждый из которых содержит адрес таблицы страниц второго уровня. В свою
очередь, каждая из таблиц страниц второго уровня содержит 1024 32-битных
дескриптора, адресующих страничные кадры в памяти. Размер страничного кадра —
4 Кбайт.
Регистры
системных адресов (регистры управления памятью)
Они предназначены для
защиты программ и данных в мультизадачном режиме работы микропроцессора.
При работе в защищенном режиме микропроцессора
адресное пространство делится:
· на глобальное — общее
для всех задач;
·
локальное — отдельное для каждой задачи.
Этим разделением и
объясняется то, что в архитектуре микропроцессора присутствуют следующие
системные регистры:
·
регистр
таблицы глобальных дескрипторов gdtr (Global Descriptor
Table Register)
имеет размер 48 бит и содержит
1)
базовый
адрес глобальной дескрипторной таблицы GDT (32-битовый)
2)
и
предел - размер (в байтах) таблицы GDT (16-бит);
·
регистр
таблицы локальных дескрипторов ldtr (Local Descriptor
Table Register) имеет
размер 16 бит и содержит указатель на локальную таблицу сегментов текущей
задачи.
·
регистр
таблицы дескрипторов прерываний idtr (Interrupt Descriptor
Table Register)
имеет размер 48 бит и содержит
1) базовый адрес дескрипторной
таблицы прерываний IDT (32-битовый)
2)
предел -
размер (в байтах) таблицы GDT (16-бит);
·
регистр
задачи tr (Task Register) (16-битовый) указывает на дескриптор в таблице GDT,
позволяющий получить доступ к дескриптору текущей задачи - этот дескриптор
описывает текущий сегмент состояния задачи
(TSS — Task Segment Status). Этот сегмент создается для каждой задачи в системе.
Основное назначение сегментов TSS — сохранять текущее
состояние задачи в момент переключения на другую задачу.
Регистры отладки
Эти регистры предназначены
для аппаратной отладки. Средства аппаратной отладки впервые появились в
микропроцессоре i486. Аппаратно микропроцессор содержит 8 регистров отладки, но
реально из них используются только 6.
Регистры dr0, dr1, dr2, dr3 имеют разрядность 32 бит и предназначены для задания линейных адресов
четырех точек прерывания. Используемый при этом механизм следующий: любой
формируемый текущей программой адрес сравнивается с адресами в регистрах dr0..
.dr3, и при совпадении генерируется исключение отладки 1.
Регистр dг6 называется регистром состояния
отладки. Биты этого регистра устанавливаются в соответствии с причинами,
которые вызвали возникновение последнего исключения 1. Перечислим эти биты и их
назначение:
b0 — если этот бит=1, то
последнее исключение (прерывание) возникло в результате достижения контрольной
точки, определенной в регистре dr0;
b1 — аналогично b0, но для
контрольной точки в регистре dr1;
b2 — аналогично b0, но для
контрольной точки в регистре dr2;
b3 — аналогично b0, но для
контрольной точки в регистре dr3;
bd (бит 13) служит для защиты
регистров отладки;
bs (бит 14) = 1, если
исключение 1 было вызвано состоянием флага tf = 1 в регистре eflags;
bt (бит 15) = 1, если
исключение 1 было вызвано переключением на задачу с установленным битом
ловушки в TSS t = 1.
Все остальные биты в этом
регистре заполняются нулями. Обработчик исключения 1 по содержимому dr6
должен определить причину, по которой произошло исключение, и выполнить
необходимые действия.
Регистр dг7 называется регистром управления
отладкой. В нем для каждого из четырех регистров контрольных точек отладки
имеются поля, с помощью которых можно уточнить следующие условия, при которых
следует сгенерировать прерывание:
·
место
регистрации контрольной точки — только в текущей задаче или в любой задаче.
Соответствующие биты занимают младшие восемь бит регистра dг7 (по два бита на
каждую контрольную точку (фактически, точку прерывания), задаваемую регистрами dr0, dr1, dr2, dr3). Первый бит из каждой пары — это так называемое локальное
разрешение, его установка говорит о том, что точка прерывания действует, если
она находится в пределах адресного пространства текущей задачи. Второй бит в
каждой паре определяет глобальное разрешение, которое говорит о том, что
данная контрольная точка действует в пределах адресных пространств всех задач,
находящихся в системе;
· тип доступа, по которому
инициируется прерывание: только при выборке команды, при записи или при
записи/чтении данных. Биты, определяющие природу возникновения прерывания,
локализуются в старшей части данного регистра.