Прерывания Прерывания – механизм, позволяющий координировать параллельное функционирование отдельных устройств вычислительной системы и реагировать на особые ситуации, возникающие при работе процессора. Прерывания – принудительная передача управления от выполняемой программы к системе, происходящее при возникновении определенного события. Прерывание — это событие, при наступлении которого процессор должен приостановить выполнение текущего процесса, сохранить его состояние и начать выполнять другой процесс, называемый обработчиком прерывания (interrupt handler). После завершения обработчика прерывания состояние прерванного процесса должно быть восстановлено, а в случае фатального прерывания (например, из-за отказа аппаратуры) процессор должен быть перезагружен или остановлен. Основная цель введения прерываний – реализация асинхронного режима работы и распараллеливание работы отдельных устройств вычислительного комплекса. Механизм прерываний реализуется аппаратно-программным способом. Прерывание всегда влечет за собой изменение порядка выполнения команд процессором. Механизм обработки прерываний включает следующие шаги: 1) установление факта прерывания и его идентификация; 2) запоминание состояния прерванного процесса (счетчика команд, содержимого регистров процессора, спецификации режима и др.); 3) аппаратная передача управления подпрограмме обработки прерываний; 4) сохранение информации о прерванной программе, которую не удалось сохранить на шаге 2 с помощью действий аппаратуры, иногда большого объема информации; 5) обработка прерываний; 6) восстановление информации, относящейся к прерванному процессу; 7) возврат в прерванную программу. Шаги 1 – 3 реализуются аппаратно, а шаги 4 –7 программно. Главные функции механизма прерываний: - распознавание или классификация прерываний; - передача управления на обработку прерываний; - корректное возвращение к прерванной программе. Прерывания, возникающие при работе вычислительной системы, можно разделить на два основных класса: - внешние (асинхронные); - внутренние (синхронные). Внешние прерывания вызываются асинхронными событиями, которые происходят вне прерываемого процесса, например: - прерывания от таймера; - прерывания от внешнего устройства (прерывания по вводу/выводу); - прерывания по нарушению питания; - прерывания с пульта оператора вычислительной системы; - прерывания от другого процессора или другой вычислительной системы. Внутренние прерывания вызываются событиями, которые связаны с работой процессора и являются синхронными с его операциями, например: - нарушение адресации; - наличие в поле адреса несуществующей инструкции; - деление на нуль; - переполнение или исчезновение порядка; - ошибка четности; - ошибка в работе различных аппаратных устройств. Собственно программные прерывания происходят по соответствующей команде прерывания, то есть по этой команде процессор производит те же действия, что и при обычных внутренних прерываниях. Данный механизм введен для того, чтобы переключение на системные программные модули происходило не как переход в подпрограмму, а как обычное прерывание. Этим обеспечивается автоматическое переключение процессора в привилегированный режим с возможностью выполнения всех команд. Сигналы, вызывающие прерывания, формируются в процессоре или вне его, они могут возникнуть одновременно. Выбор одного их них происходит на основе приоритетов, установленных для каждого их них. Наивысшим приоритетом обладают прерывания от схем контроля процессора. Учет приоритетов может быть встроен в технические средства или может определяться операционной системой. Программно-аппаратное управление порядком обработки сигналов прерывания позволяет применять различные дисциплины обслуживания прерываний. Распределение прерываний по уровню приоритета (от низкого к высокому): - программные прерывания; - прерывания от внешних устройств: терминалов; - прерывания от внешних устройств: сетевого оборудования; - прерывания от внешних устройств: магнитных дисков; - прерывания от системного таймера; - прерывания от средств контроля процессора. Процессор может обладать средствами защиты от прерываний: - отключение системы прерываний; - маскирование (запрет) отдельных видов прерываний. Программное управление средствами защиты от прерываний позволяет ОС регулировать обработку сигналов прерывания: - обрабатывать сразу при поступлении; - откладывать обработку на некоторое время; - полностью игнорировать. Обычно операция прерывания выполняется только после завершения выполнения текущей команды. Сигналы прерывания возникают в произвольные моменты времени, поэтому к моменту обработки может накопиться несколько сигналов. Сигналам прерывания присваиваются приоритеты, в первую очередь обрабатывается сигнал с более высоким приоритетом. Программное управление специальными регистрами маски (маскирование сигналов прерывания) позволяет реализовать различные дисциплины обслуживания: - с относительными приоритетами, обслуживание не прерывается даже при наличии запросов с более высоким приоритетом. В программе обслуживания данного запроса следует наложить маски на все остальные сигналы прерывания или просто отключить систему прерываний; - с абсолютными приоритетами, обслуживается прерывание с наибольшим приоритетом. В программе обслуживания прерываний следует наложить маски на сигналы прерывания с более низким приоритетом. Возможно многоуровневое прерывание, то есть прерывание программы обработки прерывания, число уровней меняется и зависит от приоритета запроса; - по принципу стека (последним пришел – первым обслужен), запросы с более низким приоритетом могут прервать обработку прерывания с более высоким приоритетом. В программе обслуживания прерываний не следует накладывать маски ни на один сигнал прерывания и отключать систему прерываний. Управление ходом выполнения задач со стороны ОС заключается: - в организации реакций на прерывание; - в организации обмена информацией; - в предоставлении необходимых ресурсов; - в динамике выполнения задачи; - в организации сервиса. Причины прерываний определяет ОС (супервизор прерываний) и выполняет действия, необходимые при данном прерывании и в данной ситуации. При появлении запроса на прерывание система прерываний идентифицирует сигнал и, если прерывание разрешено, управление передается на соответствующую подпрограмму обработки прерываний. Подпрограмма обработки прерываний состоит их трех секций: 1) отключение прерываний, сохранение контекста прерванной программы, установка режима работы системы прерываний; 2) собственно тело программы обработки прерываний; 3) восстановление контекста прерванной ранее программы, установка прежнего режима работы системы прерываний. 1-я и 3-я секции подпрограммы обработки прерываний – служебные, сохраняют и восстанавливают контекст задач. Поскольку эти действия необходимо выполнять практически в каждой подпрограмме обработки прерывания, во многих ОС первые секции подпрограмм обработки прерываний выделяются в специальный системный модуль – супервизор прерываний. Супервизор прерываний выполняет следующие действия: - сохраняет в дескрипторе текущей задачи рабочие регистры процессора, определяющие контекст прерванной задачи; - определяет программу, обслуживающую текущий запрос на прерывание; - устанавливает необходимый режим обработки пребывания; - передает управление подпрограмме обработки прерывания. После выполнения подпрограммы обработки прерывания управление передается супервизору в модуль управления диспетчеризацией задач. Диспетчер задач производит: - выбор готовой к выполнению задачи (в соответствии с дисциплиной обслуживания) - восстановление контекста задачи; - установка прежнего режима работы системы прерываний; - передачу управления выбранной задаче. Из подпрограммы обработки прерывания нет возврата непосредственно в прерванную программу. Если бы контекст прерванной задачи сохранялся в стеке, а не в дескрипторе задачи, то не было бы возможности гибко выбирать на обслуживание задачу, после завершения подпрограммы обработки прерывания. В конкретных процессорах и ОС могут быть изменения и дополнения к рассмотренной дисциплине обслуживания прерываний.