Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 05.docx
Скачиваний:
26
Добавлен:
26.09.2019
Размер:
595.17 Кб
Скачать

Прерывания

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

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

(слайд №8)

В зависимости от источника возникновения сигнала прерывания делятся на:

  • асинхронные или внешние (аппаратные) — события, которые исходят от внешних источников (например, периферийных устройств) и могут произойти в любой произвольный момент: сигнал от таймера, сетевой карты или дискового накопителя, нажатие клавиш клавиатуры, движение мыши. Факт возникновения в системе такого прерывания трактуется как запрос на прерывание (англ. Interrupt request, IRQ);

  • синхронные или внутренние — события в самом процессоре как результат нарушения каких-то условий при исполнении машинного кода: деление на ноль или переполнение, обращение к недопустимым адресам или недопустимый код операции;

  • программные (частный случай внутреннего прерывания) — инициируются исполнением специальной инструкции в коде программы. Программные прерывания как правило используются для обращения к функциям встроенного программного обеспечения (firmware), драйверов и операционной системы.

В большинстве современных компьютеров процессор стараются полностью освободить от необходимости опроса внешних устройств, в том числе и от определения с помощью опроса устройства, сгенерировавшего сигнал прерывания. Устройства сообщают о своей готовности процессору не напрямую, а через специальный контроллер прерываний, при этом для общения с процессором он может использовать не одну линию, а целую шину прерываний. Каждому устройству присваивается свой номер прерывания, который при возникновении прерывания контроллер прерывания заносит в свой регистр состояния и, возможно, после распознавания процессором сигнала прерывания и получения от него специального запроса выставляет на шину прерываний или шину данных для чтения процессором. Номер прерывания обычно служит индексом в специальной таблице прерываний, хранящейся по адресу, задаваемому при инициализации вычислительной системы, и содержащей адреса программ обработки прерываний. Для распределения устройств по номерам прерываний необходимо, чтобы от каждого устройства к контроллеру прерываний шла специальная линия, соответствующая одному номеру прерывания. При наличии множества устройств такое подключение становится невозможным, и на один проводник (один номер прерывания) подключается несколько устройств. В этом случае процессор при обработке прерывания все равно вынужден заниматься опросом устройств для определения устройства, выдавшего прерывание, но в существенно меньшем объеме. Обычно при установке в систему нового устройства ввода-вывода требуется аппаратно или программно определить, каким будет номер прерывания, вырабатываемый этим устройством.

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

В то же время определенные кризисные ситуации в вычислительной системе (например, неустранимый сбой в работе оперативной памяти) должны требовать ее немедленной реакции. Такие ситуации вызывают прерывания, которые невозможно замаскировать или запретить и которые поступают в процессор по специальной линии шины прерываний, называемой линией немаскируемых прерываний (NMI - Non-Maskable Interrupt).

Не все внешние устройства являются одинаково важными с точки зрения вычислительной системы («все животные равны, но некоторые равнее других»). Соответственно, некоторые прерывания являются более существенными, чем другие. Контроллер прерываний обычно позволяет устанавливать приоритеты для прерываний от внешних устройств. При почти одновременном возникновении прерываний от нескольких устройств процессору сообщается номер наиболее приоритетного прерывания для его обслуживания в первую очередь. Менее приоритетное прерывание при этом не пропадает, о нем процессору будет доложено после обработки более приоритетного прерывания. Более того, при обработке возникшего прерывания процессор может получить сообщение о возникновении прерывания с более высоким приоритетом и переключиться на его обработку.

Контроллер прерываний - обслуживает поступающие прерывания от устройств.

  1. Если необработанных прерываний нет, прерывание выполняется немедленно.

  2. Если необработанные прерывания есть, контроллер игнорирует прерывание. Но устройство продолжает удерживать сигнал прерывания на шине до тех пор, пока оно не будет обработано. (слайд №9)

Работа прерываний

Алгоритм работы:

  • Устройство выставляет сигнал прерывания

  • Контроллер прерываний инициирует прерывание, указывая номер устройства

  • Процессор начинает выполнять обработку прерывания, вызывая процедуру

  • Эта процедура подтверждает получение прерывания контроллеру прерываний

В «классическом» варианте имеется 16 прерываний. Часть из них жестко назначена определенным устройствам, остальные же могут использовать карты расширения. (слайд №10)

Номер прерывания

Использование картами

Назначение

0

-

Системный таймер

1

-

Используется контроллером клавиатуры

2

-

Дублирует прерывание 9

3

+

Обычно используется для порта COM2

4

+

Обычно используется для порта СОМ1

5

+

Свободно, часто используется звуковыми картами для совместимости с Sound Blaster Pro, может использоваться контроллером USB

6

-

Используется контроллером флоппи-дисковода

7

+

Обычно используется для порта LPT

8

-

Часы реального времени

9

+

Используется системой расширенного конфигурирования и управления питанием (каскадировано с прерыванием 2), также может использоваться контроллером USB или видеокартой

10

+

Свободно

11

+

Обычно используется видеокартой

12

+

Используется мышью, подключаемой к порту PS/2, при ее отсутствии может использоваться другими устройствами

13

-

Используется сопроцессором

14

+

Обычно используется для первичного канала ЮЕ-контроллера

15

+

Обычно используется для вторичного канала IDE-контроллера

Помимо этого имеется одно немаскируемое прерывание (NMI), имеющее наивысший приоритет. Оно генерируется, когда возникает ошибка чтения данных из памяти, любая другая неисправимая ошибка в системе.

При использовании расширенного контроллера прерываний, атрибута любого современного компьютера, количество прерываний увеличивается до 24, что существенно упрощает наращивание возможностей компьютера за счет карт расширения и интегрированных контроллеров. К тому же современные карты расширения для шин PCI и PCI Express, как, впрочем, и многие аппаратные компоненты компьютера, способны разделять одну линию прерывания с другими устройствами, поэтому часто на одном прерывании «сидит» несколько устройств.

Номер прерывания

Использование картами

Назначение

0

-

Системный таймер

1

-

Используется контроллером клавиатуры

2

-

Дублирует прерывание 9

3

+

Обычно используется для порта COM2

4

+

Обычно используется для порта СОМ1

5

+

Свободно

6

Используется контроллером флоппи-дисковода

7

+

Обычно используется для порта LPT

8

-

Часы реального времени

9

-

Используется системой расширенного конфигурирования и управления питанием (каскадировано с прерыванием 2)

10

+

Свободно

11

+

Обычно используется видеокартой

12

+

Используется мышью, подключаемой к порту PS/2, при ее отсутствии может использоваться другими устройствами

13

-

Используется сопроцессором

14

+

Обычно используется для первичного канала ЮЕ-контроллера

15

+

Обычно используется для вторичного канала ЮЕ-контроллера

16

+

Как правило используется контроллером USB

17

+

Обычно используется интегрированной звуковой подсистемой (АС'97 или HDA)

13

+

Как правило используется контроллером USB

19

+

Как правило используется контроллером USB

20

+

Обычно используется интегрированной сетевой картой

21

+

Свободно

22

+

Свободно

23

+

Обычно используется контроллером USB 2.0

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

(слайд №11)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]