Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
рыбак.docx
Скачиваний:
43
Добавлен:
21.09.2019
Размер:
2.35 Mб
Скачать

2.5.2. Ввод-вывод по опросу флага готовности.

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

2.5.3. Прерывания устройств и их обработка.

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

Смысл прерывания состоит в предоставлении возможности процессору автоматически реагировать на внешние и внутренние воздействия, обусловленные различными причинами. Непредсказуемые во времени события (такие, как окончание операции I/O) могут генерировать прерывания и принуждать машину выполнять программу обработки прерываний (ISR).

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

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

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

При использовании приведенной схемы возникает проблема, заключающаяся в том, что все прерывания применяют одни и те же ячейки для запоминания и восстановления. Поэтому, случись второе прерывание во время выполнения программы обработки первого, будет потеряно старое PSW, так как на его место будет записано PSW очередной прерванной программы. Чтобы этого не происходило, надо запретить новые прерывания, пока не будут обработаны предыдущие. Это можно сделать просто, отведя для этой цели один бит разрешения/запрещения прерываний в PSW, устанавливая его в 1 в старом PSW и сбрасывая в новом. Тогда, как только новое PSW становится текущим, прерывания запрещаются, а при возврате из прерывания (RTI) текущее PSW заменяется старым (сохраняемым), и они снова разрешаются.

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

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