Тема 2.2. Обработка прерываний
Прерывания являются основной движущей силой любой ОС. Периодические прерывания от таймера вызывают смену процессов в мультипрограммной ОС, а прерывания от устройств ввода- вывода управляют потоками данных, которыми вычислительная система обменивается с внешним миром.
Система прерываний позволяет ОС реагировать на внешние события, происходящие асинхронно вычислительному процессу: сигнал готовности устройств ввода - вывода, аварийные сигналы аппаратуры вычислительной системы и т.д.
В зависимости от источника прерывания делятся на 3 больших класса:
Внешние прерывания, связанные с сигналами от внешних устройств (аппаратные) могут возникать в результате действий пользователя или в результате поступления сигналов от аппаратных устройств – сигналов завершения операций ввода- вывода, вырабатываемых контроллерами внешних устройств (принтер, HDD и др.), или же сигналов датчиков управляемых компьютером технических объектов.
Данный класс прерываний является асинхронным по отношению к потоку инструкций прерываемой программы. Аппаратура процессора работает так, что асинхронные прерывания возникают между выполнением двух соседних инструкций, при этом система после обработки прерывания продолжает выполнение процесса, уже начиная со следующей инструкции.
Внутренние прерывания (исключения), возникающие в результате ошибок вычислений, происходят синхронно выполнению программы при появлении аварийной ситуации в ходе исполнения некоторой инструкции программы (внутри выполнения).
Пример: деление на 0, обращение к несуществующему адресу.
Программные прерывания, представляющие собой удобный способ вызова процедур ОС.
Отличаются от 1 и 2-ых тем, что по своей сути не являются “истинными” прерываниями. Возникают при выполнении особой команды процессора, выполнение которой имитирует прерывание, т.е. Переход на новую последовательность инструкций.
Прерываниям приписывают приоритет, с помощью которого они ранжируются по степени важности и срочности.
Механизм прерываний поддерживается аппаратными средствами компьютера и программными средствами ОС.
Аппаратная поддержка прерываний имеет свои особенности, зависящие от типа процессора и других аппаратных компонентов, передающих сигналы запроса прерываний от внешнего устройства к процессору (таких как контроллер ВУ, шины подключения ВУ, контроллер прерываний, являющийся посредником между сигналами шины и процессора).
Особенности аппаратной реализации прерываний оказывают влияние на средства программной поддержки прерываний, работающие в составе ОС,
Прерывания обычно обрабатываются модулями ОС. Процедуры, вызываемые по прерываниям, называются обработчиками прерываний или процедурами обслуживания прерываний. Аппаратные прерывания обрабатываются драйверами соответствующих внешних устройств, исключения - специальными модулями ядра, а программные прерывания – процедурами ОС, обслуживающими системные вызовы. Кроме этих модулей в ОС может находиться диспетчер прерываний, который координирует работу отдельных обработчиков прерываний. Существует два основных способа выполнения прерываний:
Векторный, когда в процессор передается номер вызываемой процедуры обработки прерывания. Это целое число в диапазоне о 0до 255, указывающее на одну из 256 программ обработки прерываний, адреса которых хранятся в таблице обработчиков прерываний.
Вектор прерываний представляет собой электрический сигнал, выставляемый на соответствующие шины процессора и несущий в себе информацию об определенном, закрепленном за данным устройством номере, который идентифицирует соответствующий обработчик прерываний.
Опрашиваемый, когда процессор вынужден последовательно опрашивать потенциальные источники запуска прерываний.
Последовательность действий аппаратных и программных средств по обработке прерываний
Обобщенно последовательность действий аппаратных и программных средств по обработке прерываний можно описать следующим образом:
При возникновении сигнала (для аппаратных прерываний) или условия (для внутренних прерываний) прерывания, происходит первичное аппаратное распознавание прерывания. Если прерывания данного типа в настоящий момент запрещены (например, приоритетной схемой, т.е. при обслуживании запросов прерываний из разных классов выбирается запрос, имеющий высший приоритет), то процессор продолжает естественный ход выполнения команд. В противном случае в зависимости от поступившей в процессор информации (уровня прерывания, вектора прерывания или условия внутреннего прерывания) происходит автоматический вызов процедуры обработки прерывания, адрес которой находится в таблице векторов прерываний, размещенной либо в регистрах процессора, либо в определенном месте оперативной памяти.
Автоматически сохраняется некоторая часть контекста прерванного процесса, которая позволяет возобновить исполнение процесса после обработки прерывания: значения счетчика команд, слова состояния процесса, несколько регистров общего назначения, которые требуются программе обработки прерываний.
Одновременно с загрузкой адреса процедуры обработки прерываний в счетчик команд может автоматически выполняться загрузка нового значения слова состояния машины, которое определяет режим работы процессора при обработке прерывания, в т.ч. работу в привилегированном состоянии.
Прерывания практически во всех мультипрограммных ОС обрабатываются в привилегированном режиме работы модулями ядра, т.к. при этом нужно выполнить ряд критических операций, от которых зависит жизнеспособность системы, - управлять внешними устройствами, планировать потоки и т.д.
Временно запрещаются прерывания данного типа, чтобы не образовалась очередь вложенных друг в друга потоков одной и той же процедуры.
После того, как прерывание обработано ядром ОС, прерванный контекст восстанавливается, и работа процесса возобновляется с прерванного места.
Часть контекста восстанавливается аппаратно по команде возврата из прерываний (например: адрес следующей команды и слово состояния процессора) а часть – программным способом.
Контрольные вопросы
Что такое прерывание? Когда оно было введено в действие и с какой целью?
Из каких этапов состоит механизм обработки прерывания?
Можно ли запретить все прерывания на время работы обработчика прерываний? Почему?
К какому типу прерываний относятся прерывания клавиатуры? Прерывания таймера? Возникновение деления на ноль в ходе выполнения программы? Обращение к запрещённой странице памяти, занятой кодом ОС?
Приведите примеры аппаратных прерываний.
Могут ли в ходе нормальной работы программы возникать исключительные ситуации? Почему?
Какие существуют способы реализации механизма аппаратных прерываний? В чём их различие?
Что такое маскирование прерываний и для чего оно может применяться?
Каким образом можно реализовывать различные дисциплины обслуживания прерываний с помощью маскирования?
В чём различия между дисциплиной обслуживания прерываний с относительными приоритетами и с абсолютными?
Где содержится информация об уровне приоритета текущего обработчика прерываний?
Каковы функции супервизора прерываний?
Чем отличается реализация механизма прерывания в мультипрограммной системе от однопрограммной системы?
Когда происходит возврат к выполнявшейся до поступления сигнала прерывания программе в мультипрограммной системе?
|