Мегаобучалка Главная | О нас | Обратная связь  


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




Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

 

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

Таблица векторов прерываний (рисунок 14.17) располагается в самых младших адресах оперативной памяти, имеет объем 1 Кбайт и содержит 4байтные элементы (векторы прерываний) - значения сегментного регистра команд (CS) и указателя команд (IP) для 256 обработчиков прерываний. Старшие 2 байта вектора загружаются в сегментный регистр команд CS, а младшие 2 байта - в регистр указателя команд IP. Обращение к элементам таблицы осуществляется по 8-разрядному коду - типу прерывания. Так как таблица всегда имеет нулевой начальный адрес и длину вектора в 4 байта, чтобы определить адрес вектора для прерывания типа i, достаточно просто умножить это значение на 4.

Рисунок 14.17 – Структура таблицы векторов прерываний

Обращение к элементам таблицы осуществляется по 8-разрядному коду – типу прерывания.

Тип прерывания Источник прерывания
Деление на 0
Пошаговый режим выполнения программы
Запрос по входу NMI
Контрольный останов (команда INT 3 ) Переполнение (команда INT 0) Печать экрана
Запрос по входу IRQ0 (системный таймер)
Запрос по входу IRQ1 (контроллер клавиатуры)
Обращение к BIOS
Отсутствие сегмента в оперативной памяти
· · · n Команда INT n 18H Обращение к BASIC, встроенному в ПЗУ 21H Обращение к DOS 22-FF Функции DOS, BASIC, Резерв
Пользовательское прерывание

Примечание: Прерывания 01-1F относятся к BIOS. Прерывания 20-FI относятся к BASIC и DOS



 

Таблица векторов прерываний

 

Таблица векторов начинается с адреса 00000 и содержит 256 четырёхбайтовых элементов, то есть всего 1024 байта (рисунок 14.18). Таким образом, элементы с самыми младшими адресами памяти заняты таблицей адресов прерываний.

Рисунок 14.18– Таблица векторов прерываний.

Каждый элемент таблицы указывает на программу обработки конкретного типа прерывания, причём два младших байта являются смещением, а два старших байта сегментом, и определяют место где расположена программа обработки прерываний. При возникновении прерывания сегмент и смещение устанавливаются соответственно в регистрах CS и IP.

 

Вычисление адреса нужного вектора прерывания по его коду вычисляется очень просто:

Адрес вектора прерывания = КТП*4 (сдвиг на 2 разряда влево).

 

Например, для прерывания 10Н, адрес элемента таблицы равен 00040 (10Н*4=40Н).

+ учебник бройдо с 355

Рисунок 14.19 – Таблица векторов прерываний

 

Таблица дескрипторов

 

В защищенном режиме для вызова обработчика прерывания используется таблица дескрипторов прерываний IDT. Элементами таблицы являются 8-байтные дескрипторы типа шлюз - специальные программные структуры, через которые происходит передача управления обработчику.

Обращение к IDT аналогично обращению к глобальной таблице дескрипторов, где вместо системного регистра GDT R используется регистр IDTR, который определяет размер и базовый адрес таблицы в памяти.

Физический адрес дескриптора шлюза, находящегося в IDT, определяется как сумма базового адреса таблицы и умноженного на 8 типа прерывания (рисунок 14.20).

Рисунок 14.20 – Порядок обращения к таблице дескрипторов прерываний

 

Содержимое регистра IDTr не сохраняется в сегментах TSS и не изменяется при переключении задачи. Программы не могут обратиться к IDT, так как единственный бит TI индикатора таблицы в селекторе сегмента обеспечивает выбор только между таблицами GDT и LDT.

Максимальный предел таблицы дескрипторов прерываний составляет 256*8 - 1 = 2047.

Можно определить предел меньшим, но это не рекомендуется. Если происходит обращение к дескриптору вне пределов IDT, процессор переходит в режим отключения до получения сигнала по входу NMI или сброса.

В IDT могут храниться только дескрипторы следующих типов:

шлюз ловушки,

шлюз прерывания,

шлюз задачи.

Шлюзы ловушки и прерывания сходны со шлюзом вызова, только в них отсутствует поле счетчика WC (рисунок 14.21). Так как прерывание является неожиданным событием и не связано с текущей программой, говорить о передаче параметров их обработчику не приходится.

Рисунок 14.21 – Формат шлюзов ловушки и прерывания

 

Бит S = 0 в байте доступа определяет этот дескриптор как системный объект. Если поле ТИП в байте доступа равно 1110, то это шлюз прерывания, если 1111 - то шлюз ловушки.

Поле уровня привилегий дескриптора DPL, как правило, устанавливается равным 3 с тем, чтобы к обработчику прерываний могли обращаться программы с любого уровня привилегий.

Бит присутствия P может быть равен как 0, так и 1.

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

При входе в обработчик через шлюз ловушки флаг IF не меняется.

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

 

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

 




Читайте также:
Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной...
Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение...
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...



©2015-2020 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (342)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.008 сек.)
Поможем в написании
> Курсовые, контрольные, дипломные и другие работы со скидкой до 25%
3 569 лучших специалисов, готовы оказать помощь 24/7