Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 3000544.doc
Скачиваний:
26
Добавлен:
30.04.2022
Размер:
14.75 Mб
Скачать

3.2.2. Обмен информацией в режиме прерывания программы

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

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

Для организации работы ЭВМ в режиме прерывания программы в памяти ЭВМ помимо основной программы (программ) размещаются программы обработки прерываний, т.е. программы обслуживания внешних устройств, вызывающих прерывания.

Часть памяти отводится по стек - память магазинного типа, доступ к ячейкам которой осуществляется через регистр-указатель стека по принципу “последние записанные данные первыми считываются”. Такая организация стека необходима для реализации вложенных подпрограмм и прерываний.

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

Алгоритм обработки прерывания выглядит следующим образом.

1. Внешнее устройство, которому необходим обмен информацией с ЭВМ, посылает процессору по специальной линии (общей для всех внешних устройств) сигнал запроса (требования) прерывания.

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

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

4. Получив от процессора сигнал предоставления прерывания, внешнее устройство передает процессору адрес своего вектора прерывания. Адреса векторов прерывания, которые уникальны для каждого внешнего устройства, по сути, являются их идентификаторами.

5. Процессор, получив от внешнего устройства адрес его вектора прерывания, пересылает в свой счетчик команд содержимое ячеек вектора, т.е. адрес программы обслуживания данного ВУ. Выполняя команду, адрес которой находится в его счетчике команд, т.е. первую команду программы обслуживания прерывания, процессор обычным образом начинает выполнение программы обслуживания. Выполнение программы обслуживания ВУ завершается специальной командой "ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ ".

6. Получив команду "ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ", завершающую программу обслуживания, процессор выталкивает (считывает) из стека ранее сохраненный там адрес возврата и пересылает его в свой счетчик команд, затем выталкивает из стека и записывает в свой регистр состояния прежнее слово состояния процессора, полностью восстанавливая тем самым свое состояние.

7. Процессор возобновляет выполнение ранее прерванной программы с точки прерывания.

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

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

Существует возможность программного запрета обслуживания следующего прерывания от ВУ путем установки/снятия определенного разряда (разрядов) регистра состояния процессора при обслуживании текущего прерывания. Запись слова состояния процессора (PSW) может осуществляться специальной командой программным путем. Это обеспечит запрет прерываний, если этот разряд не будет очищен программным путем.

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

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

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

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

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

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

Использование командных прерываний в какой-то мере напоминает подпрограммы, однако является более удобным в программах операционных систем для организации библиотек системных макрокоманд, операций ввода-вывода и других операций, связанных с взаимодействием пользовательских и системных программ. Особенно широко они используются в микро-ЭВМ на базе INTEL 80286.

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