Смекни!
smekni.com

Организация прерываний в ЭВМ (стр. 2 из 4)

6. Перед передачей управления подпрограмме обработки прерывания процессор аппаратными средствами выполнил сохранение счетчика команд и PSW в системном стеке. Но помимо этой информации для возобновления прерванной программы может потребоваться и восстановление состояния других регистров процессора. Поэтому, как правило, первые команды подпрограммы обработки сохраняют в стеке состояния всех остальных регистров процессора, поскольку они могут понадобиться самой подпрограмме и, следовательно, их содержимое к моменту завершения подпрограммы будет изменено. В Приложении рис.2 (а) показано, что при этом происходит. В данном случае пользовательская программа была прервана в тот момент, когда выполняла команду, хранящуюся по адресу N. Аппаратно в стек помещается содержимое счетчика команд, каким оно было в момент завершения выполнения этой команды — N+1, а в счетчик команд заносится начальный адрес подпрограммы обработки Y. Сама подпрограмма затем помещает в стек содержимое регистров процессора, в результате чего указатель стека смещается и после завершения сохранения регистров будет указывать на ячейку Т.

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

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

9. Выполнение команды возврата из прерывания сводится к восстановление из стека слова состояния программы PSW и счетчика команд. В результате состояние регистров процессора полностью восстанавливается в том виде, каким оно было в момент обнаружения прерывания.

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

Проектирование механизма обработки прерываний

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

Сначала рассмотрим проблему идентификации источника прерывания, в практике проектирования компьютерных систем применяется четыре варианта решения:

• включение в состав системной магистрали нескольких линий передачи сигналов прерывания;

• программный опрос;

• последовательное включение источников в цепь распространения сигнала предоставления прерывания (аппаратный опрос);

• арбитраж магистрали.

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

Один из таких подходов предполагает программный опрос источников - модулей ввода-вывода — при получении процессором сигнала запроса прерывания. Опрос выполняется в самом начале выполнения подпрограммы обработки прерывания, сразу же за сохранением состояния регистров процессор стеке. Для того чтобы такой опрос был возможен, в составе системной магистрали должна быть предусмотрена отдельная линия для передачи сигнала опроса (линия TESTI/0), а в наборе команд процессора — соответствующая команда, аргументом которой является адрес модуля ввода-вывода. При выполнении этой команды процессор формирует сигнал опроса на линии TESTI/O, сопровождая его кодом адреса модуля ввода-вывода на линиях адреса. Если опрашиваемый модуль действительно был источником прерывания, он выставляет сигнал подтверждения, который фиксируется в одном из битов слова состояния PSW. Следующая команда условного перехода анализирует этот бит и выполняет переход на ветвь обработки данного прерывания. Опрашивая по очереди все потенциальные источники прерывания, программа может таким образом найти, какой из них был инициатором данного прерывания. Другой вариант реализации этой идеи состоит в том, что в регистре состояния каждого модуля ввода-вывода предусматривается специальный бит, который устанавливается аппаратно, если данный модуль формирует сигнал прерывания. Опрашивая по очереди регистры состояния модулей, программа может выяснить, какой же из них послал сигнал запроса прерывания, и перейти на соответствующую ветвь. Недостаток метода программного опроса тот же, что и программно управляемого ввода-вывода, — процессор теряет время на опрос всех потенциальных источников прерываний.

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

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

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