Главная -> Книги

(0) (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32) (33) (34) (35) (36) (37) (38) (39) (40) (41) (42) (43) (44) (45) (46) (47) (48) (49) (50) (51) (52) (53) (54) (55) ( 56 ) (57) (58) (59) (60) (61) (62) (63) (64) (65) (66) (67) (68) (69) (70) (71) (72) (73) (74) (75) (76) (77) (78) (79) (80) (81) (82) (83) (84) (85) (86) (87) (88) (89) (90) (91) (92) (93) (94) (95) (96) (97) (98) (99) (100) (101) (102) (103) (104) (105) (106) (107) (108) (109) (110) (111) (112) (113) (114) (115) (116) (117) (118) (119) (120) (121) (122) (123) (124) (56)

возобновляться так, как будто прерывания вообще не было. Кроме как увеличением времени выполнения факт обслуживания прерывания не должен влиять на прерванную программу. Следовательно, содержимое всех регистров, необходимых подпрограмме обслуживания прерывания, следует временно запоминать. Удобно и просто использовать в качестве такого временного «хранилища» стек.

Практически в каждом процессоре реализована особая структура системы прерываний, а программируемые БИС управления прерываниями еще более увеличивают число разновидностей этой структуры. Однако общая последовательность реакции процессора на сигнал прерывания примерно одинакова и содержит следующие действия}

периферийное устройство генерирует сигнал прерываний, который подается на вход INT процессора; на этой линии по схеме ИЛИ объединяются запросы всех устройств, работающих в режиме прерываний;

процессор заверщает текущую команду и, если прерывания разрещены (не замаскированы), формирует сигнал INTA (или INT АСК) подтверждения прерывания; до получения этого сигнала устройство сохраняет активный уровень сигнала INT;

осуществляется запоминание содержимогоРС и некоторых других внутренних регистров в стеке, причем содержимое PC обычно запоминается автоматически;

процессор идентифицирует прерывающее устройство для перехода к соответствующей подпрограмме обслуживания (наиболее распространенные способы идентификации прерывающих устройств рассмотрены ниже);

выполняется короткая (30-50 байт) подпрограмма обслуживания прерывания, в которой запрограммированы действия по передаче данных, модификации указателей, проверке окончания операций ВВ и др.;

восстанавливается состояйие прерванной программы, для чего запомненное содержимое регистров извлекается из стека;

возобновляется выполнение прерванной программы; это действие инициируется командой возврата из прерывания RTI, являющейся последней командой подпрограммы обслуживания прерывания.

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



После окончания каждой команды программный счетчик адресует ту команду программы, которая выполнялась бы при отсутствии прерывания, поэтому после обслуживания прерывания программа продолжается обычным образом. Объем временно запоминаемой информации определяется особенностями подпрограммы обслуживания прерывания. Как минимум, необходимо запоминать содержимое РС и регистра флажков (признаков), а в предельном случае потребуется запоминать содержимое всех регистров программной модели процессора. Процессы запоминания содержимого внутренних регистров после восприятия сигнала прерывания и восстановления его по окончании подпрограммы обслуживания прерывания называются контекстным переключением (процессора). Скорость контекстного переключения оказывает заметное влияние на производительность ЭВМ, особенно в условиях интенсивных прерываний. Поэтому во многих процессорах предусматриваются средства ускорения контекстного переключения, например команды, которые загружают в стек и извлекают из стека содержимое группы регистров. В идеальном случае контекстное переключение должно требовать минимум команд и времени.

Из анализа действий процессора при восприятии сигнала прерывания следует, что они очень похожи на действия при вызове подпрограммы (рис. 5-4). Однако вызов подпрограммы запрограммирован и полностью предсказуем, а переход к обслуживанию прерывания инициируется внешним сигналом, момент появления которого предсказать невозможно. Тем не менее внешняя аналогия реакции на прерывание и вызова подпрограммы позволяет считать прерывание аппаратным вызовом подпрограммы. Выполняемые при этом вызове действия процессора, связанные с вводом-выводом, ограничиваются только его программными возможностями.

Виды прерываний. Действия процессора при обслуживании запроса прерываний схематически показаны на рис. 5-5. Так как команды ВВ в основной программе отсутствуют, процессор после завершения каждой команды должен проверять наличие сигнала прерывания до перехода к следующей команде. Например, в микропроцессоре КР580 анализ состояния входной линии ШТ осуществляется в такте Т2 последнего машинного цикла каждой команды. Переход к подпрограмме обслуживания прерывания происходит, если только ШТ=1 и прерывания разрешены.



Основная программа

Прерывание


Подпрограмма обслуживания прерывания

Инкремент программного счетчика

Рис. 5-4. Общая реакция на прерывание

Рис. 5-5. Процедура восприятия прерывания

(начало)

Выборка команды

Дешифрация и выполнение


Инициирование обслуживания прерывания

NMl

Регистр команды

Дешифратор команд

1Ш im

lip

Программный счетчик

&

Сигнап инкремента

Строб

R S

Установка

Рис. 5-6. Внутренняя схема прерываний

Процессор реагирует на запросы маскируемых прерываний по линии INT, если установлен внутренний триггер разрешения прерываний INTE, называемый также маской (рис. 5-6). Состояние этого триггера идентифицирует выходной сигнал разрешения прерываний с такой же мнемоникой INTE. Если ШТЕ=0, прерывания запрещены (замас-



(0) (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32) (33) (34) (35) (36) (37) (38) (39) (40) (41) (42) (43) (44) (45) (46) (47) (48) (49) (50) (51) (52) (53) (54) (55) ( 56 ) (57) (58) (59) (60) (61) (62) (63) (64) (65) (66) (67) (68) (69) (70) (71) (72) (73) (74) (75) (76) (77) (78) (79) (80) (81) (82) (83) (84) (85) (86) (87) (88) (89) (90) (91) (92) (93) (94) (95) (96) (97) (98) (99) (100) (101) (102) (103) (104) (105) (106) (107) (108) (109) (110) (111) (112) (113) (114) (115) (116) (117) (118) (119) (120) (121) (122) (123) (124)