Особенности систем прерываний

В любой системе прерываний решаются следующие основные поо-блемы:

1. В какие моменты проверяются входы запросов на прерывание и какими характеристиками должны обладать сигналы прерываний?

2. Каким образом процессор передает управление подпрограммам обработки прерываний?

3. Каким образом процессор сохраняет текущее состояние ЭВМ («статус машины») и восстанавливает его после завершения обработки прерывания?

4. Как процессор определяет источник прерывания?

5. Каким образом процессор отличает высокоприоритетное прерывание (такое, как прерывание «падение напряжения» или «тревога») от низкоприоритетных прерываний (как, например, прерывание от печатающего устройства, сообщающего, что оно готово к приему новых данных)?

6. Как отключить систему прерываний на время, когда выполняются программы, которые не должны прерываться?

Рассмотрим эти проблемы по порядку

Входы запросов на прерывание. Хотя различные системы прерываний значительно отличаются друг от друга, в большинстве таких систем процессор проверяет входы запросов на прерывание только в конце цикла команды, так как возобновление цикла команды с середины потребовало бы сохранения большого количества промежуточных результатов. В качестве стандартного метода проверки входов запросов на прерывания применяется метод, который представлен блок-схемой на рис. 9.6. Отметим, что при использовании данного метода необходимо фиксировать сигнал запроса на прерывание, так как полный цикл команды может быть очень продолжительным. Чтобы правильно распознать этот сигнал, необходимо синхронизировать его с генератором тактовых импульсов процессора. Для этого используется специальный триггер (рис. 9.7).

Число входов запросов на прерывание различно для разных типов процессоров. В табл. 9.1 приведено число входов для некоторых распространенных микропроцессоров. На каждый вход могут, разумеется, поступать сигналы запросов на прерывание от более чем одною источника, так как такие сигналы могут комбинироваться с помощью схемы ИЛИ (рис. 9.8). Если действующее значение сигнала прерывания низкое, то такой сигнал можно получить без использования схем ИЛИ, монтажно комбинируя выходы свободных коллекторов: прерывание будет иметь высокий уровень (т. е. недействующее значение) только тогда, когда все сигналы свободных коллекторов имеют высокий уровень.

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

1. Выполнить команду ПЕРЕХОД К ПОДПРОГРАММЕ (CALL) или РЕСТАРТ (TRAP)1 с заданным адресом. Этот способ используется в процессоре Intel 4040.

2. Выбрать из определенного регистра или определенной ячейки намята новое значение счетчика команд. Такой способ используется ь процессорах RCA CDPI802, National SC/MP и Motorola 6800.

3. Выполнить команду ПЕРЕХОД К ПОДПРОГРАММЕ с адресом, который определяется внешним устройством. Такой способ используется в Signet ics 2650.

>4; Используя выходной ,сигнал «подтверждение запроса на прерывание»* .предоставить шину данных для помещения на нее команды ъцеыщт устройством; как показано на рис; 9.9

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

При применении первого и второго методов процессор может передать управление подпрограмме обработки прерывания и затем вернуть управление исходной программе так же, как он это делает в случае обычных подпрограмм. Любой из, методов работы с подпрограммами, описанных в гл. 3, можно применить и здесь. Команда ПЕРЕХОД ССОХРАНЕНИЕМ АДРЕСА ВОЗВРАТА (JUMP AND MARK PLACE) передает управление подпрограмме обработки прерываний, находя' щейся в ОЗУ. Команда ПЕРЕХОД С ВОЗВРАТОМ (JUMP AND LINK* извлекает адрес Подпрограммы обработки прерываний из регистра. Последняя команда — более быстрая, однако при ее применении резервируется один из регистров и его нельзя использовать обычным образом. Кроме того, без применения дополнительных команд невозможна реализация многоуровневых прерываний. Наиболее гибкой является команда CALL — ПЕРЕХОД К ПОДПРОГРАММЕ, помещающая адрес возврата в стек. Однако ддя выполнения этой команды необходимо либо внешнее ОЗУ, либо расположенный на том же кристалле cteK; в' обоих случаях требуется большее внимание при одновременном использовании ОЗУ (или встроенного стека) как для обычных вызовов подпрограмм, так и для обслуживания прерываний.

• При применении третьего й четвертого методов' загрузка адреса перехода или команды внешней аппаратурой может вызвать множество проблем, связанных с синхронизацией и управлением. Разумеется, внешнее оборудование не должно препятствовать выполнению обычного цикла памяти; вместе с тем модули памяти не должны мешать внешней аппаратуре, когда последняя получает управление шиной. Следует обратить внимание на то, что по сигналу «подтверждение запроса на прерывание» (см. рис. 9.9) адрес перехода или команда помещается внешним устройством на,шину данных, а для обычных данных (из памяти) шина данных по этому сигналу оказывается недоступной. Очевидно, что в данном случае гораздо проще использовать адреса или команды длиной в одно слово, чем адреса или команды, состоящие из нескольких слов. Все или только некоторые разряда помещаемого на шину слова могут устанавливаться ТТЛ- или МОП-шифраторами. Однако, если пользоваться только адресами и командами длиной в одно слово, то число различных входных комбинаций будет весьма ограниченным; кроме того, адрес длиной в. одно, слово может противоречить принципу страничной организации памяти. Для устранения указанных недостатков следует испояьзовоть~та«ое £0аехание-’регистров и цепей. задержки, с помощью которого можно помещать на шину данных команды длиной в несколько слов. Требуемое для этого оборудование может входить в состав специальных контроллеров на БИС.

Сохранение и восстановление состояния процессора. Большинство процессоров автоматически сохранйет некоторую информацию о состоянии, предшествовавшем прерыванию, — это является составной частью стандартной реакции процессора на прерывание. Все процессоры сохраняют значение счетчика команд, но некоторые ЦП сохраняют и другую информацию. Например, Motorola 6800 сохраняет в стеке содержимое всех своих регистров. Этот способ, впрочем, удобен только тогда, когда регистры содержат полезную информацию; в противном случае напрасно расходуется память и время процессора. С помощью специальных команд, таких как ПРОГРАММНОЕ ПРЕРЫВАНИЕ (SOFTWARE INTERRUPT), РЕСТАРТ (TRAP) или ОЖИДАНИЕ ПРЕРЫВАНИЯ (WAIT FOR INTERRUPT), можно сохранить содержимое регистров программным способом; команды ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ (RETURN FROM INTERRUPT, RETURN FROM TRAP) восстанавливают содержимое регистров в конце подпрограммы обработки прерывания.

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

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

2. Запоминание содержимого регистров в стеке, расположенном в памяти. Этот метод прост, так как указатель стека содержит адрес, по которому хранится требуемая информация; допустимы также и многоуровневые прерывания. Основное неудобство состоит в том, что возможно переполнение стека. Адрес возврата также хранится в стеке; поэтому в случае необычного выхода из подпрограмм потребуется выполнение значительного числа операций со стеком.

3. Переход к другому набору регистров. В некоторых процессорах, таких как Zilog Z-80 и Signetics 2650, имеется двойной набор регистров. Подпрограмма обработки прерывания может просто использовать другой набор. Этот способ быстрее, чем оба описанных выше, но его применение означает, что некоторые регистры процессора не всегда доступны. Метод не допускает многоуровневых прерываний, так как имеются только два набора регистров. Процессор Texas Instruments 9900 в качестве поля регистров использует назначаемую область памяти; поэтому при прерывании достаточно изменить содержимое регистра-ука-зателя.

Состояние ЭВМ, естественно, должно быть восстановлено до окончания процедуры обработки прерывания. При использовании стека необходимо восстановление информации в порядке, обратном тому, в котором информация сохранялась. При использовании других методов применяется восстановление в прямом порядке.

Число регистров, которые следует сохранить, зависит от набора регистров, используемых основной программой и подпрограммой обработки прерывания. Если основная программа просто ожидает возникновения прерывания, то нет необходимости сохранять и восстанавливать какие-либо регистры. Программа обработки прерывания не обязана сохранять регистры, которыми она не пользуется. Для таких процессоров, как Motorola 6800, число регистров которых невелико, подпрограммы обработки прерываний должны сохранять и восстанавливать все регистры. Использование этой процедуры не требует значительных затрат времени и не вызывает трудностей при программировании. При составлении подпрограмм обработки прерываний для процессоров, подобных Intel 8080 или Fairchild F-8, имеющих много регистров, программисту следует тщательно выбирать регистры, которые следует сохранить. В противном случае время реакции на прерывание может оказаться слишком большим.


 



http://tuning-jeep.ru/ пороги на киа мохаве обвес и пороги.