Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций СПО 31-8-13.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
970 Кб
Скачать
☆

1.4.2. Реализация многозадачного режима в защищенном режиме процессоров фирмы Intel

Реализация защиты ОС от прикладных программ

Защита ОС от разрушения требует наложения на прикладные программы трех типов ограничений:

  • обычным программам запрещается выполнять некоторые команды;

  • обычным программам должны быть недоступны некоторые сегменты, досупные ОС;

  • получение привилегий ОС должно быть возможным только входом в нее в определенных точках входа.

Возможны 2 способа реализации защиты ОС :

  • работа процессора в состояниях супервизор-задача:

  • вызов процедур привилегированного кольца.

1 способ – при необходимости получения услуг от ОС(ввод-вывод) прикладная программа выполняет команду SVC . При этом процессор переключается в режим супервизор. Недостаток – время переключения задач в 7 раз больше врмени вызова процедуры, поэтому в МП Intel используется и второй метод – вызов процедур:

Шлюзы вызова

Для вызова процедур ОС в определенных точках применяются шлюзы вызова. Хранятся в GDT, имеют формат дескриптора

Рисунок 1 – 16 – формат шлюза вызова

Системные и прикладные программы имеют раздельные стеки, при вызове сист программы выполняется перепись n слов из стека прикладной программы в стек системной процедуры.

Вызовы из 0 кольца процедер 3 кольца(из более прив менее прив) запрещены.

    1. Аппаратная поддержка многозадачности.

При переключении задач необходимо сохранение текущего состояния задачи – для этого служит TSS – Task Status Segment. (сохранение регистров ЦП…). Имеется регистр задачи TSS.

Для переключения на задачу необходимо в регистр TSS записать селектор TSS.

Шлюзы задач

Для переключения на задачу из более привилегированного кольца служат шлюзы задач. Их дескрипторы хранятся в GDT.

Рисунок 1-17 –формат шлюза задачи

Аппаратная поддержка многозадачности

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

С каждым потоком связывается сегмент памяти, содержащий информацию для запуска и остановки. Сегмент TSS (Task Status Segment).

Регистр задачи – 16-ти разрядный регистр, в котором содержится сегмент TSS.

GDT

дескриптор TSS

Селектор TSS

Структура TSS:

Селектор вызвавшей задачи

Стек кольца 0 (указатель начала)

Стек кольца 1

Стек кольца 2

Регистры ЦП

Регистры LTD

Дополнительные параметры

Рисунок 1-18 – структура TSS

Стек кольца 0,1,2- указатель на начало стека.

Регистр задачи: селектор текущей задачи (регистр TR)

Обработка прерываний в реальном режиме. Вектора прерываний.

Система прерываний. Прерывания делятся на программные и внешние. Номер прерывания формируется программно (int 21h) или контроллером прерываний. Система прерываний любого компьютера является его важнейшей частью, позволяющей быстро реагировать на события, обработка которых должна выполняться немедленно: сигналы от машинных таймеров, нажатия клавиш клавиатуры или мыши, фатальные ошибки, возникающие при выполнении программы и пр.

1024

CS:IP

Номер

Прерывания 0

Seg off

Рисунок 1-19 схема обработки прерываний в реальном режиме

Пользователь легко может изменить содержимое таблицы векторов и прерываний – нарушение работы ОС (DOS). Серьёзный недостаток!

Обработка прерываний в защищенном режиме

В защищенном режиме – система прерываний имеет дело не с таблицей векторов прерываний, а с таблицей дескрипторов прерываний (IDT – interrupt descriptor table) – доступ к содержимому IDT из пользовательских программ невозможен.

47 IDTR 0

адрес

Размер

Рисунок 1-20 – структура регистра IDTR

Содержимое таблицы IDT:

  1. шлюзы прерываний (interrupt gate)

  2. шлюзы спец. прерываний (trap gate)

  3. шлюзы задач (task gate)

При возникновении прерывания (если они разрешены) – действия ЦП определяются дескриптором; определяемым номером прерывания

Шлюз задачи – выполняет прерывание задач и смену TSS. Обработка выполняется медленнее.

Необходимость в подобном переключении возникает, если, например, разрушен TSS текущей задачи.

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

Если в таблицах дескрипторов памяти (LDT и GDT) находятся дескрипторы сегментов программы, то таблица дескрипторов прерываний 1DT состоит из дескрипторов другого вида, которые называются шлюзами (вентилями). Через шлюзы осуществляется доступ к обработчикам прерываний и исключений. Шлюз, как и дескриптор памяти, занимает 8 байт и в него входит полный адрес (16-разрядный селектор и 32-разрядное смещение) обработчика данного прерывания.

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

Сохранив вектор прерванного процесса, процессор по номеру вектора извлекает из IDT шлюз, определяет адрес обработчика и передает ему управление. Обработчик заканчивается командой iret, возвращающей управление в прерванную программу.

Различные устройства компьютера (таймер» клавиатура и др.) сигнализируют о необходимости программного вмешательства в их работу с помощью сигнала прерывания, который, пройдя через контроллер прерываний, поступает на вход 1NT микропроцессора и инициирует в нем выполнение процедуры прерывания.

В состав этой процедуры входит, в частности, чтение номера вектора, устанавливаемого контроллером прерываний на шине данных компьютера. При этом контроллер прерываний формирует передаваемый в процессор номер вектора путем сложения базового номера, хранящегося п контроллере, с номером линии, по которой поступил запрос от устройства. Номер базового вектора (в принципе в диапазоне 0..255) устанавливается в процессе программной инициализации контроллера. Поскольку в защищенном режиме векторы 0...31 зарезервированы за исключениями, базовые векторы контроллеров прерываний должны быть расположены в диапазоне 32...255.

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

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

Ловушка (trap) обрабатывается процессором после выполнения команды, вызвавшей это исключение, и в стеке сохраняется адрес не этой, а следующей команды. Таким образом, после возврата из обработчика ловушки выполняется не команда, инициировавшая исключение, а следующая за ней команда программы. К ловушкам относятся все команды программных прерываний int.

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

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