Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Механизмы аппаратной поддержки операционных систем. Учебное пособие
.pdf
Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
Формат шлюза задач :
При вызове задачи через шлюз процессор проверяет право
доступа к шлюзу.
Разрешающее соотношение: CPL <= DPL шлюза задачи
Общая схема переключения задач через шлюз показана на рис.34/
Рис.34 - Переключение задач через шлюз
Вызов задачи через шлюз имеет следующие преимущества по
сравнению с непосредственным переключением:
проверяется только право доступа к шлюзу.
Сам сегмент TSS задачи, на которую выполняется переключение,
может иметь любые привилегии, в том числе и самые высокие. Таким
образом, операционная система может максимально гибко работать с
привилегиями для переключения.
Например, понизив уровень привилегий шлюза, можно
организовать переключения в более привилегированную задачу;
переключить задачу можно по прерыванию
91

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
Если поместить шлюз задачи в дескрипторную таблицу
прерываний, то переключение на эту задачу можно выполнить по
прерыванию.
Это позволяет операционной системе реализовать:
- переключение задач по истечении кванта времени (по таймеру) ;
- вызов сервиса операционной системы по программному
прерыванию Int n для программ реального режима.
Механизм выполнения переключения процессором
Рассмотрим аппаратный механизм переключения процессором
задач на примере непосредственного вызова задачи по команде
CALL селектор сегмента TSS задачи.
1. Процессор проверяет привилегии процесса, в котором
встретилась эта команда.
2. Если требуемое соотношение привилегий: CPL <= DPL
дескриптора сегмента TSS новой задачи не выполняется, генерируется
системное исключение для операционной системы. При успешной
проверке переключение начинается.
3. «Контекст» текущей задачи сохраняется в ее сегменте
состояния TSS .
4. В регистр-селектор TR загружается селектор сегмента TSS
новой задачи.
5. В поле связи TSS новой задачи процессор сохраняет селектор
TSS исходной задачи, чтобы обеспечить возможность обратного
переключения.
6. Считывает «контекст» из сегмента TSS новой задачи в
регистры процессора.
В CS:ЕIP появляется адрес входа в новую задачу. Флаг
вложенности задач NT устанавливается в 1 для правильной
интерпретации команды IRET. Начинается исполнение новой задачи.
92

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
Рис. 35 - Иллюстрация к механизму переключения задач
Вызванная по непосредственному вызову CALL задача должна
быть оформлена, как процедура и заканчиваться командой возврата из
прерывания IRET.
Когда в новой исполняемой задаче встретится команда IRET, она
будет выполняться как обратное переключение задач (см. пункты 2 –5):
- “контекст” текущей задачи сохранится в ее TSS ;
- в регистр TR из поля связи сегмента TSS текущей задачи
загрузится селектор сегмента TSS исходной задачи;
- в регистры восстановится “контекст” исходной задачи.
Замечания:
1. Для вызова задачи может использоваться межсегментный
косвенный CALL или JMP:
CALL / JMP dword ptr Адрес селектора TSS.
Селектор TSS должен быть размещен где-нибудь в сегменте
данных в 4-байтном поле, но само значение селектора задается в
старшем слове этого поля.
Например:
Call dwort ptr adr_sel_TSS
93

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
. . . . . . .
Adr_sel_TSS dw ?
dw значение селектора
2. Вызываемая по CALL задача должна заканчиваться командой
IRET.
Вызываемая по JMP задача – командой «JMP dword ptr адрес
селектора TSS исходной задачи», которая вызовет обратное
переключение.
3. Процессор различает условия исполнения команды IRET по
флагу NT: это возврат из процедуры обработки прерывания или это
обратное переключение задач.
Если при выполнении IRET флаг NT=1, то процессор выполняет
обратное переключение задачи и сбрасывает NT в 0, если не было
другой вложенной задачи (поле связи пусто).
При NT=0 команда IRET выполняется, как возврат из обычного
прерывания.
94

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
8. Организация прерываний в защищенном режиме
Источники и типы прерываний
Классификация прерываний в защищенном режиме аналогична
реальному режиму и приведена на рисунке.
Это внешние аппаратные прерывания, внутренние системные
прерывания и программные прерывания по команде INT.
Рис.36 – Классификация источников и типов прерываний
Аппаратные (внешние) прерывания бывают маскируемые и
немаскируемые.
Маскируемые прерывания поступают на вход INTR процессора.
Эти прерывания можно программно запретить/разрешить с помощью
флага IF. Для установки/сброса флага есть команды - STI и CLI .
Немаскируемые прерывания поступают на вход NMI процессора.
Этот сигнал вызывает прерывание, независимо от состояния флага IF.
Немаскируемые прерывания нельзя программно запретить.
Программные прерывания происходят при выполнении команды
INT n , где n – номер прерывания. Они генерируются процессором, как
ловушки – после выполнения самой команды INT.
В защищенном режиме увеличено количество системных
внутренних прерываний («исключений»). И сами исключения стали
классифицироваться по типам: отказы, ловушки и аварийные
завершения.
95

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
Адрес IDT предел
Системные прерывания процессор генерирует в ответ на
обнаруженные им некорректные ситуации при попытке исполнения
команд, нарушение многочисленных правил доступа к памяти по
привилегиям, адресации памяти и так далее.
Исключения (системные прерывания) делятся на отказы ловушки и
аварийное завершение
Отказом (fault) процессор считает некорректную ситуацию до
начала выполнения текущей команды. Например, после вычисления
адреса операнда не нашлась данная страница в памяти или в файле
свопинга.
Ловушка (trap) – некорректная ситуация после выполнения
команды.
Аварийное завершение(abort) – когда процессору точно не известна
команда, вызвавшая некорректную ситуацию.
По сравнению с реальным режимом в защищенном режиме:
- количество и типы аппаратных прерываний не изменились;
- количество системных прерываний увеличилось;
- изменилось распределение номеров прерываний: 0 – 31 –
«исключения», 32 – 255 – аппаратные и программные прерывания
- изменился способ определения адреса обработчика
прерывания;
- Таблица векторов прерываний называется теперь
«Дескрипторная таблица прерываний» и может размещаться в любой
области памяти. Длина вектора прерывания увеличилась до 8 байтов.
Дескрипторная таблица прерываний
Дескрипторную таблицу прерываний IDT (Interrupt Descriptor
Table) создает операционная система и размещает в произвольном
сегменте памяти.
Ее 32-разрядный адрес и предел смещения в ней операционная
система записывает в 48-разрядный регистр IDTR .
47 16 15 0
IDTR
96

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
Адрес IDT+ 8 *N
7 младший байт 0
Смещение ( 2 младших байта)
Селектор сегмента (2 байта)
0 0
DPL
T Y P E
Смещение (2 старших байта)
Байт доступа
Таблица дескрипторов прерываний IDT содержит последовательно
записанные 8-байтные дескрипторы, каждый из которых имеет свой
номер 0, 1, 2. . . 255.
Количество дескрипторов определяется количеством источников
прерываний. Номер дескриптора соответствует номеру прерывания.
В таблице прерываний могут быть размещены дескрипторы
разных типов: шлюзы прерываний, шлюзы задач и шлюзы ловушек.
Шлюзы задач (см. Переключение задач) включаются в
дескрипторную таблицу прерываний в двух случаях:
- для организации переключения задачи по прерыванию;
- если обработчик прерывания принадлежит другой задаче, что
также требует переключения.
Шлюзы прерывания и ловушек имеют одинаковый формат. Они
содержат адрес обработчика данного прерывания в виде: «селектор
сегмента » и «смещение».
Механизм выполнения прерывания
По номеру прерывания N процессор вычисляет смещение N-го
дескриптора от начала дескрипторной таблицы прерываний, как Адрес
IDT+ 8 *N.
По значениям «селектор сегмента» и «смещение» из дескриптора
процессор вычисляет адрес подпрограммы обработки N-го прерывания.
Рис. 37 - Формат шлюза прерывания и шлюза ловушки
Тип шлюза – задачи, прерывания или ловушка, указан в T Y P E.
97

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
Контроль доступа к шлюзу по привилегиям доступа проверяется
только для программных прерываний, чтобы исключить вызов
системных прерываний из прикладных задач.
Разрешающее соотношение: CPL <= DPL шлюза прерывания.
Поэтому в защищенном режиме прикладные программы не могут
пользоваться программными прерываниями.
Отличие шлюза прерывания от шлюза ловушки состоит в
следующем.
Во время исполнения обработчика прерывания, вызванного через
шлюз прерывания, автоматически запрещаются дальнейшие
прерывания, пока не закончится исполнение обработчика данного
прерывания. Это предпочтительно для аппаратных прерываний.
Во время исполнения обработчика прерывания, вызванного через
шлюз ловушки, дальнейшие прерывания не запрещаются. Что
предпочтительно для программных прерываний.
98

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
10. Программное переключение процессора из
реального режима в защищенный режим
Когда программа, работающая в реальном режиме, переводит
процессор в защищённый режим, она оказывается практически
беспомощной.
Это связано с тем, что в защищённом режиме все системные
структуры иные и воспользоваться ресурсами, предоставляемыми
операционной системой реального режима, в которой запускается такая
программа, невозможно. Недоступными для прикладной программы
окажутся также прерывания BIOS.
После перевода процессора в защищенный режим (сокращенно, P-
Mode), программа должна создать заново новые условия работы,
включая новые драйверы устройств.
Поэтому алгоритм предлагаемой программы таков:
1. Подготовка к переходу в P-Mode
2. Переход в P-Mode.
3. Сообщение на экран о переходе в P-Mode
4. Зацикливание, в результате чего компьютер «повиснет».
Вывод на экран будет происходить в текстовом режиме
посредством прямой записи в видеопамять. Для этого будет описана
отдельная процедура.
Пример должен выполняться из операционной системы MS-DOS,
работающей в режиме реальных адресов. Если попытаться запустить
программу из-под ОС защищённого режима (например, Windows), то
программа работать не будет, так как процессор уже находится в
защищенном режиме.
Первой командой после перехода в защищённый режим должна
быть команда дальнего перехода far jmp, в которой будет указан
селектор дескриптора сегмента кода и смещение в этом сегменте.
При работе в защищённом режиме процессор может использовать
в сегментных регистрах только селекторы существующих
дескрипторов, любые другие значения вызовут исключение защиты.
Команда дальнего перехода заставит процессора обратиться к
таблице GDT, выбрать оттуда дескриптор, селектор которого указан в
команде, и начать выборку команд со смещения, также указанного в
этом адресе.
99

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
Если в GDT, селекторе, смещении или самой команде будет
обнаружена ошибка, то процессор сгенерирует исключение. Поскольку
новая система прерываний не определена, процессор зависнет либо
произойдёт аппаратный сброс.
Если же первая команда не будет дальним переходом, то
процессор произведёт выборку новой команды, используя текущие
значения CS:IP, далее произойдёт системное исключение и зависание.
Процедура создания дескриптора сегмента - set_descriptor.
В программе придется создавать дескрипторы 4-х сегментов: для
кода, данных (где будет храниться выводимая на экран строка), стека
(он будет использоваться для вызова функции вывода текста) и
видеопамяти.
Поскольку все дескрипторы имеют одинаковый формат, имеет
смысл создать процедуру (функцию). Исходный код для этой и для
следующей функции поместим в виде макросов в отдельный файл pmode.lib. В дальнейшем будем просто подключать его к исходным
текстам.
Функция для создания дескриптора приводится в том виде, в
каком она находится в подключаемом файле.
При вызове функции set_descriptor регистры DS:BX должны
содержать адрес GDT, где должен быть создан дескриптор.
После выполнения процедуры регистры DS:BX будут
подготовлены к записи следующего дескриптора.
Файл "pmode.lib":
;-------------------------------------------------------------------------
init_set_descriptor macro
set_descriptor proc near
; Создаём дескриптор в GDT.
; DS:BX - адрес дескриптора
; EAX - адрес сегмента
; EDX - предел сегмента
; CL - байт доступа
push eax
push ecx ; Сохраним в стеке EAX и ECX
push cx ; Сохраняем значение байта доступа
100
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
