Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

История возникновения прерываний



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

Рис. D.6.1. Алгоритм опроса устройств ввода-вывода на ЭВМ без механизма прерываний.

· программа, выполняемая на ЭВМ, имеет малое число инструкций (до 300 - 500);

· на ЭВМ выполняется только одна программа;

· на ЭВМ нет операционной системы, либо она простая (то есть содержит базовые средства загрузки программ на выполнения и предоставляет минимальные средства для работы с устройствами ввода-вывода);

· скорость счета стала сравнимой со скоростью ввода-вывода;

· программа и ЭВМ находится в монопольном пользовании одного пользователя.

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

§16.2. Прерывания: основные понятия.

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

Программные прерывания обычно называются особыми случаями, или исключениями (exception). Особые случаи возникают, например, при делении на ноль, нарушения при защите по привилегиям, превышении длины сегмента, выходе за границу массива. Как правило, предсказать эти исключения невозможно. Однако встречающаяся в программе 1команда прерывания вполне предсказуема и находится под управлением программиста. Реакция процессора на программное прерывание такое же, как и на аппаратное прерывание, однако его обработка производится 1обработчиком особого случая (exception handler).

Все особые случаи квалифицируются на:

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

Ловушка (trap). Особый случай, который возникает после окончания виноватой программы. После обслуживания ловушки процессор продолжает выполнение программы с команды, находящейся после виноватой. Типичный пример -- команда прерывания INT n в процессорах семейства x86 или прерывание при переполнении.

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

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

 




Поиск по сайту:

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.