Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
прерывания.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
353.28 Кб
Скачать

Код ошибки

При реализации некоторых особых случаев в стек обработчика дополнительно заносится код ошибки (после сохранения адреса возврата). Структура кода ошибки имеет вид:

резерв

Index

TI

IDT

EXT

31 16 15 3 2 1 0

Рисунок 14.13 – Структура кода ошибки

Младшее слово кода ошибки практически совпадает с селектором сегмента или системного объекта. Поле индекса указывает на дескриптор, использование которого вызвало особый случай. Биты TI и IDT указывают на таблицу, в которой находится «виновный» дескриптор.

IDT = 1 → IDT

I

→ GDT

→ LDT

DT = 0

TI = 0

I DT = 0

TI = 1

Установка бита EXT = 1 означает, что особый случай вызван не выполняемой программой, а внешним сигналом прерывания. С использованием кода ошибки обработчик прерывания может проанализировать «виновный» дескриптор, извлекая его из соответствующей таблицы.

В тех случаях, когда обработчик прерывания располагается на другом уровне привилегий (в другом кольце защиты) по сравнению с прерываемой программой, в стеке обработчика, помимо всего прочего, сохраняется адрес вершины стека прерываемой программы в виде пары SS:ESP. Сохранение вершины стека осуществляется до включения в стек содержимого регистра флагов. Как правило, обработчики прерываний – особых случаев стараются размещать на наивысшем уровне привилегий (PL = 0). Возможен также вариант оформления обработчиков в виде подчиненных (конформных) сегментов кода.

3.7. Обобщенная схема обработки прерывания в защищенном режиме

При возникновении прерывания от источника с номером п микропроцессор, находясь в защищенном режиме, выполняет следующие действия:

1. Определяет местонахождение таблицы IDT, адрес и размер которой содержится в регистре IDTR.

2. Складывает значение адреса, по которому размещена IDT, и значение N*8. По данному смещению в таблице IDT должен находиться 8-байтовый дескриптор, определяющий местоположение процедуры обработки прерывания.

3. Переключается на процедуру обработки прерывания.

§ 4. Система прерываний пэвм ibm pc

4.1. Основные сведения

Все прерывания делятся на две группы: прерывания с номера 00h по номер 1Fh называются прерываниями базовой системы ввода-вывода (BIOS Basic Input-Output System); прерывания с номера 20h по номер FFh называются прерываниями DOS. Прерывания DOS имеют более высокий уровень организации, чем прерывания BIOS, они строятся на использовании модулей BIOS в качестве элементов.

Прерывания делятся на три типа: аппаратурные, логические и программные. Аппаратурные прерывания вырабатываются устройствами, требующими внимания микропроцессора: прерывание № 2 - отказ питания; № 8 от таймера; № 9 от клавиатуры; № 12 от адаптера связи; № 14 от НГМД; № 15 от устройства печати и др.

Запросы на логические прерывания вырабатываются внутри микропроцессора при появлении “нештатных” ситуаций: прерывание № 0 при попытке деления на 0; № 4 при переполнении разрядной сетки арифметико-логического устройства; № 1 при переводе микропроцессора в пошаговый режим работы; № 3 при достижении программой одной из контрольных точек. Последние два прерывания используются отладчиками программ для организации пошагового режима выполнения программ (трассировки) и для остановки программы в заранее намеченных контрольных точках.

Запрос на программное прерывание формируется по команде INTn, где n номер вызываемого прерывания. Запрос на аппаратное или логическое прерывание вырабатывается в виде специального электрического сигнала.

В IBM PC используется так называемая векторная система прерываний, в составе которой используется двухуровневая система приоритетов (рисунок 14.14).

Рисунок 14.14 – Система прерываний IBM PC

Здесь арбитр системы прерываний имеет два входа для приема сигналов прерываний от устройств ВК и других источников. Вход NMI имеет более высокий приоритет, чем вход INTR. Кроме того, вход NMI не маскируется, а маскируемый вход INTR маскируется маской прерываний IF из регистра флагов ЦП. Таким образом, аппаратные (внешние) прерывания делятся на два типа: маскируемые и немаскируемые.

Кроме аппаратных прерываний есть и внутренние прерывания. Это прерывания типа отказ (fault) – такого рода прерывание наступает в случаях, когда в результате различных некорректностей невозможно нормальное выполнение команды – прерывание наступает до выполнения команды. Прерывание «ловушка» (trap) – прерывание наступает в результате выполнения команды, например, команды прерывания INT N. Прерывание «аварийное завершение команды» (abort) из-за ошибки аппаратуры. Этот тип прерываний не маскируется.