Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

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

Читайте также:
  1. II. Дополнительные сигналы командиру вертолета в режиме висения
  2. VI. Обработка и анализ
  3. VI. Обработка и анализ
  4. VI. Обработка и анализ 1 страница
  5. VI. Обработка и анализ 2 страница
  6. VI. Обработка и анализ 3 страница
  7. VI. Обработка и анализ 4 страница

В защищенном режиме – система прерываний имеет дело не с таблицей векторов прерываний, а с таблицей дескрипторов прерываний (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 Гбайт. В этом случае нельзя выйти за пределы сегмента; однако программе реально выделяется в оперативной памяти (в процессе отображения линейных адресов на физические) лишь столько места, сколько она фактически занимает. Выход за пределы объявленного в программе массива приведет к попытке обращения к ячейке оперативной памяти, находящейся за пределами адресов, отображенных на линейное пространство программы. В этом случае будет сформировано страничное нарушение.


Дата добавления: 2015-07-07; просмотров: 196 | Нарушение авторских прав


Читайте в этой же книге: Системное программное обеспечение | Тема 1.2 Назначение, функции и структура операционной системы | Процессы | Получение и использование процессом ссылок на себя | Критические участки | Пример 2 | Поток_1 Поток_2 | Проблема тупиков и методы борьбы с тупиками | Условия возникновения тупика | Дескрипторные таблицы (ДТ). |
<== предыдущая страница | следующая страница ==>
Реализация многозадачного режима в защищенном режиме процессоров фирмы Intel| Системный режим

mybiblioteka.su - 2015-2024 год. (0.007 сек.)