<< Вернуться у выбору материала

Лекция № 11
Защищенный режим работы микропроцессора (продолжение)

Введите ваш запрос для начала поиска.

Вопросы:

  1. Повторение ключевых моментов
  2. Поддержка сегментированной модели памяти
  3. Поддержка страничной модели памяти
  4. Переход микропроцессора в защищенный режим

Структуры данных защищенного режима

Повторение ключевых моментов

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

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

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

Поддержка сегментированной модели памяти. Дескрипторные таблицы

Микропроцессор аппаратно поддерживает три типа дескрипторных таблиц:

  1. Таблица GDT (Global Descriptor Table) — глобальная дескрипторная таблица. Это основная общесистемная таблица, к которой допускается обращение со стороны программ, обладающих достаточными привилегиями. Расположение таблицы GDT в памяти произвольно; оно локализуется с помощью специального регистра gdtr (48 бит). В таблице GDT могут содержаться следующие типы дескрипторов:
    • дескрипторы сегментов кодов программ;
    • дескрипторы сегментов данных программ;
    • дескрипторы стековых сегментов программ;
    • дескрипторы TSS (Task Segment Status) — специальные системные объекты, называемые сегментами состояния задач;
    • дескрипторы для таблиц LDT;
    • шлюзы вызова;
    • шлюзы задач.
  2. Таблица LDT (Local Descriptor Table) — локальная дескрипторная таблица. Для любой задачи в системе может быть создана своя дескрипторная таблица подобно общесистемной GDT. Для связи между таблицами GDT и LDT в таблице GDT создается дескриптор, описывающий область памяти, в которой находится LDT. Расположение таблицы LDT в памяти также произвольно и локализуется с помощью специального регистра ldtr (16 бит). В таблице LDT могут содержаться следующие типы дескрипторов:
    • дескрипторы сегментов кодов программ;
    • дескрипторы сегментов данных программ;
    • дескрипторы стековых сегментов программ;
    • шлюзы вызова;
    • шлюзы задач.
  3. Таблица IDT (Interrupt Descriptor Table) — дескрипторная таблица прерываний. Данная таблица также является общесистемной и содержит дескрипторы специального типа, которые определяют местоположение программ обработчиков всех видов прерываний. В качестве аналогии можно привести таблицу векторов прерываний реального режима. Расположение таблицы IDT в памяти произвольно и локализуется с помощью специального регистра idtr (48 бит). Элементы данной таблицы называются шлюзами. Отметим, что эти шлюзы бывают трех типов:
    • шлюзы задач;
    • шлюзы прерываний;
    • шлюзы ловушек.

Каждая из дескрипторных таблиц может содержать до 8192 (213) дескрипторов.

Формат селектора сегмента

В защищенном режиме иначе интерпретируется содержимое сегментных регистров.

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

Каждый регистр разбивается на три поля:

Формат дескриптора сегмента

Каждый сегмент описывается соответствующим дескриптором сегмента.

Структурно дескриптор сегмента представляет собой 8-байтовую структуру.

И состоит из следующих полей:

Номер байта в дескрипторе Количество бит в поле Символическое обозначение Назначение и содержание полей дескриптора
0...1 16 limit_l Младшие биты 0...15 20-разрядного поля предела сегмента, который определяет размер сегмента в единицах, определяемых битом гранулярности g
2...4 23 base_l Биты О...23 32-разрядной базы сегмента, которая определяет значение линейного адреса начала сегмента в памяти
5 8 AR Байт, поля которого определяют права доступа к сегменту
6 0...3 limit_2 Старшие биты (16...19) 20-разрядного предела сегмента
6 1 U Бит пользователя (User). Не имеет специального назначения, может использоваться по усмотрению программиста
6 1 - 0 – бит не используется
6 1 D Бит разрядности операндов и адресов: 0 – в программе используются 16-разрядные операнды и режимы 16-разрядной адресации, 1 – в программе используются 32-разрядные операнды и режимы 32-разрядной адресации
6 1 G Бит гранулярности: 0 – размер сегмента равен значению поля limit в байтах, 1 – размер сегмента равен значению поля limit в страницах
7 8 base_2 Биты 24-31 32-разрядной базы сегмента

Обратим внимание на следующее

Таким образом, первый тип защиты - по уровню доступа - реализуется в защищенном режиме благодаря тому, что информация о базовом адресе сегмента и его размере выведена на уровень микропроцессора ? это позволяет аппаратно контролировать работу программ с памятью и предотвращать обращения по несуществующим адресам либо по адресам, находящимся вне предела, разрешенного полем размера сегмента (limit).

Другой тип защиты - по привилегиям - заключается в том, что сегменты неравноправны в правах доступа к ним. Суть этого механизма защиты по привилегиям заключается в том, что конкретный сегмент может находиться на одном из четырех уровней привилегированности с номерами 0, 1, 2 и 3. Самым привилегированным является уровень 0. Существует ряд ограничений на взаимодействие сегментов с различными уровнями привилегий.

Информация о правах доступа к сегменту содержится в специальном байте AR дескриптора.

Формат байта AR дескриптора сегмента

Номер бита в байте AR Символическое обозначение Значение поля
0 A Бит доступа (Accessed) к сегменту. Устанавливается аппаратно при обращении к сегменту
1 R Для сегментов кода – это бит доступа по чтению (Readable). определяет, возможно ли чтение из сегмента кода при осуществлении замены префикса сегмента: 0 – чтение из сегмента запрещено, 1 – чтение из сегмента разрешено.
W Для сегмента данных – это бит записи: 0 – модификация данных в сегменте запрещена, 1 – модификация данных в сегменте разрешена.
2 C Для сегмента кода – это бит подчинения (Conforming): 0 – обычный сегмент кода, 1 – подчиненный сегмент кода.
ED Для многозадачного режима определяет особенности смены значения текущего уровня привилегий. Для сегментов данных – это бит расширения вниз (Expand Down), служит для различения сегментов стека и данных, а также определяет трактовку поля limit: 0 – сегмент данных, 1 – сегмент стека.
3 I Бит предназначения (Intending): 0 – сегмент данных или стека, 1 – сегмент кода.
4 S Если S = 1 – это бит сегмента (Segment). Для любых сегментов в памяти равен 1. Назначение и порядок использования сегмента уточняется битами C и R. Если S = 0 – это бит системный (System). Такое состояние бита S говорит о том, что данный дескриптор описывает специальный системный объект, который может и не быть сегментом в памяти.
5…6 DPL Поле уровня привилегий сегмента (Descriptor Privilege Level). Содержит численное значение в диапазоне от 0 до 3 привилегированности сегмента, описываемого данным дескриптором.
7 P Бит присутствия (Present): 0 – сегмента нет в оперативной памяти в данный момент, 1 – сегмент находится в данный момент в оперативной памяти. В дескрипторах сегментов, отсутствующих в оперативной памяти (Р = 0), для процессора действителен только байт управления доступом. Остальные байты могут использоваться операционной системой по своему усмотрению. (В частности, они могут использоваться для указания места сегмента на внешних носителях.)

Наиболее важные поля байта AR — это

  1. dpl (2 бита)
  2. биты R/W, C/ED и I, которые вместе определяют тип сегмента.

Поле dpl — часть механизма защиты по привилегиям. Содержит значение 0.. 3 привилегированности сегмента. Тип сегмента определяется тремя битами. Это поле определяет целевое назначение сегмента.

Рассмотрим назначение некоторых комбинаций этих битов.

Комбинации битов Назначение сегмента
000 Сегмент данных, только для чтения
001 Сегмент данных с разрешением чтения и записи
010 Не определена
011 Сегмент стека с разрешением чтения и записи
100 Сегмент кода с разрешением только выполнения
101 Сегмент кода с разрешением выполнения и чтения из него
110 Подчиненный сегмент кода с разрешением выполнения
111 Подчиненный сегмент кода с разрешением выполнения и чтения из него

Замечание. Возможны два принципиально разных вида сегментов: данных и кода. Сегмент стека является разновидностью сегмента данных, но с особой трактовкой поля размера сегмента. Это объясня¬ется спецификой использования стека (он растет в направлении младших ад¬ресов памяти). Таким образом, видно, что поле типа ограничивает использова¬ние объявленных сегментов. В частности, программные сегменты не могут быть модифицированы без применения специальных приемов. Доступ к сегменту данных также может быть ограничен только на чтение.

Поддержка страничной модели памяти

Вспомним, при страничной организации ОП делится на блоки (страницы) фиксированного размера 4 Кб (число, кратное степени двойки, Þ операции сложения можно заменить на операции конкатенации).

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

Таблицы страниц

Есть два типа таблиц страниц:

  1. Таблица каталогов таблиц страниц (PDE - page directiry entry)
  2. Таблица страниц (PTE - page table entry)

Каждая таблица состоит из 1024 (2**10) элементов. Элементами таблиц являются дескрипторы страниц. Размер одного дескриптора - 4б. Þ для хранения одной таблицы необходима одна страница памяти.

Говорят, что осуществляется двухшаговая страничная трансляция адресов.

Рассмотрим составляющие этого механизма.

Для текущей задачи создается одна таблица PDE и одна или более страниц PTE.

Все страницы текущей задачи описаны в таблицах страниц PTE - page table entry.

Одна таблица PTE состоит из 1024 (2**10) элементов - дескрипторов страниц Þ одна таблица страниц описывает пространство памяти в 4 Мб.

Если задаче недостаточно памяти в 4 МБ, создается несколько таблиц PTE.

Пусть текущая задача использует 50 Мб памяти (например, графический редактор) Þ для описания этой памяти надо иметь 14 таблиц PTE.

Для таблиц PTE текущей задачи создается таблица PDE. В ней каждый дескриптор указывает местонахождение одной таблицы PTE. Таблица PDE также состоит из 1024 (2**10) элементов. (Остальные дескрипторы не используются.)

Обратим внимание, что для описания 50 Мб памяти одной задачи требуется 15 страниц = 60Кб памяти (такие потери считаются приемлемыми).

Формат дескриптора страницы

Каждая страница описывается дескриптором (32 бита).

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

Количество битов, отводимое под номер страницы, определяет объем возможной ОП, которой может пользоваться программа.

Остальные биты

Переход микропроцессора в защищенный режим

Вспомним кратко процесс загрузки ОС и подчеркнем момент перехода в защищенный режим.

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

Но прежде чем сделать это, операционная система формирует системные структуры данных (в частности, рассмотренные нами дескрипторные таблицы) для работы в защищенном режиме. Затем может быть осуществлен переход в защищенный режим и выполнение дальнейших действий.

Рейтинг@Mail.ru