
- •7. Ввод-вывод
- •7.1. Доступ к устройствам ввода-вывода
- •7.2. Прерывания
- •7.2.1. Аппаратное обеспечение для поддержки прерываний
- •7.2.2. Запрет и разрешение прерываний
- •7.2.3. Обслуживание нескольких устройств
- •7.2.4. Управление запросами устройств
- •7.2.5. Исключения
- •7.2.6. Прерывания в операционных системах
- •7.3. Механизм прерываний процессора Pentium
- •7.4. Прямой доступ к памяти
7.2.5. Исключения
Прерывание — это событие, которое приостанавливает выполнение текущей программы и запуск некоторой другой. До сих пор речь шла лишь о прерываниях, которые вызывались запросами, получаемыми в процессе ввода-вывода. Однако механизм прерываний используется и во множестве других ситуаций.
Любое событие, которое приводит к прерыванию, обычно называют исключением. Следовательно, примерами исключений могут служить и прерывания ввода-вывода. Ниже будет рассмотрен ряд других типов исключений.
Восстановление после ошибок
Правильная работа аппаратных компонентов компьютера обеспечивается множеством различных технологий. Например, в основной памяти ряда компьютеров содержится код контроля ошибок, позволяющий выявлять таковые в сохраняемых данных. Если произойдет ошибка, управляющие схемы обнаружат ее и проинформируют об этом с помощью прерывания процессор.
Процессор может прервать выполнение программы и в том случае, если в ходе реализации ее команд обнаружит ошибку или какую-либо нестандартную ситуацию. Например, заданный в команде код операции может не соответствовать ни одной из существующих команд, а арифметическая команда может попытаться осуществить деление на 0.
Если обработка исключения инициируется в результате подобной ошибки, процессор действует точно так же, как в случае запроса прерывания. Он приостанавливает выполнение текущей программы и запускает программу обработки исключения. Эта программа выполняет действия, необходимые для восстановления после ошибки (если это возможно), или информирует о ней пользователя. Как вы помните, в случае прерывания ввода-вывода процессор завершает выполнение текущей команды программы и лишь после этого начинает обработку прерывания. Однако если прерывание происходит из-за ошибки, выполнение текущей команды, как правило, завершить невозможно, поэтому процессор немедленно приступает к обработке исключения.
Отладка
Еще один важный тип исключений используется при отладке программ. Обычно в состав системного программного обеспечения входит программа под названием отладчик, помогающая программисту находить ошибки в коде. С помощью исключений отладчик реализует две важные функции: пошаговое выполнение программы (трассировку) и определение точек останова.
Когда процессор функционирует в режиме трассировки, после выполнения каждой команды программы происходит исключение, которое обрабатывается отладчиком. Отладчик дает возможность пользователю проанализировать содержимое регистров, памяти, различных устройств. По завершении работы отладчика выполняется следующая команда программы, после чего отладчик активизируется снова. Пока реализуется программа-отладчик, исключения трассировки запрещены.
Похожую возможность предоставляют программисту точки останова, с той лишь разницей, что выполняемая программа останавливается не после каждой команды, а только в определенных, выбранных им точках. Для этого обычно применяется команда, называемая ловушкой или программным прерыванием. Выполнение этой команды приводит к тем же результатам, что и получение запроса аппаратного прерывания. При отладке программы пользователь может прервать ее выполнение после команды i.. Отладчик сохранит команду i + 1 и заменит ее командой программного прерывания. Когда выполняемая программа достигнет этой точки, она будет прервана и активизируется программа-отладчик. Это позволит пользователю проанализировать содержимое памяти и регистров. Когда пользователь будет готов продолжить выполнение отлаживаемой программы, отладчик восстановит сохраненную команду под номером i +1 и выполнит команду возврата из прерывания.
Исключения защиты
Для защиты операционной системы компьютера от разрушения пользовательскими программами некоторые команды разрешено выполнять только тогда, когда процессор работает в режиме супервизора. Такие команды называются привилегированными. Так, когда процессор работает в пользовательском режиме, он не выполняет команд, изменяющих уровень приоритета процессора или позволяющих пользовательской программе обращаться к тем областям памяти компьютера, которые выделены для других пользователей. Попытка выполнить такие команды приводит к исключению защиты, в ответ на которое процессор переходит в режим супервизора и начинает реализацию соответствующей подпрограммы операционной системы.