27
Прерывание. Мультипрограммирование на основе прерываний.
Мультипрограммирование на основе
прерываний. Прерывание - процесс, который возник в результате события внешнего
по отношению к выполняемой программе, или не предусмотренного программой. Этот
процесс порождает выполнение процедур, которых нет в программе, но есть в ОС,
т.е. управление передается некоторым модулям ОС. Цель прерывания - реализация
асинхронного режима работы и распараллеливания. Прерывание похоже на некоторое
выполнение процедур. Отличие: управление передается некоторым заранее созданным
программам, которые находятся в ОС. Типы
прерываний: 1.внешние (аппаратные)- возникают в результате действия
пользователя или от аппаратных устройств
(устройство ввода\вывода завершило операцию) и
подает сигнал на вход процессора. Эти прерывания асинхронные по отношению к
потокам инструкциям от программы. Инструкция выполняется до конца, передается
управление обработчику прерываний, он выполняет действия и отдает управление
дальше программе. 2.внутренние(исключения) - возникают при аварийной ситуации выполнения
инструкции(напр. деление на 0; инструкции не существует). Происходит анализ
команды (ошибки) обработчиком и либо отдает управление обратно программе, либо
снимает программу с действия и отдает управление ОС. 3.программные - происходят
при выполнении особой команды процессора, который имитирует прерывание, чтобы
прейти на новую последовательность команд. Каждому прерыванию присваивается
определенный приоритет. Эти приоритеты ранжируются(делятся)
по званию(важности и срочности) и приоритету. Если один уровень приоритетов, то
все прерывания равны между собой. Для обслуживания, анализирования
приоритетов прерываний существует специальный модуль, который отслеживает
прерывание с наибольшим приоритетом. Механизм прерывания: существует
цепь передачи сигнала. Существует контроллер внешнего устройства, где
появляется сигнал→сигнал
передается на шину подключения внешних устройств→сигнал поступает на
процессор, где есть контроллер прерываний. Существует 2 способа выполнения
прерываний: 1. Векторный - каждый контроллер вырабатывает прерывание со своим №
и приоритетом, и это прерывание поступает на вход контроллера прерываний. Затем
процессор опрашивает действительно ли это устройство вырабатывает прерывание: если
да, то процессор вызывает по №(приоритетом прерывания) нужный обработчик(напр. по таблице векторов прерываний), который выполняет
действие по прерыванию. Ссылки располагают в самом процессоре. 2. Опрашиваемый -
процессор получает через шину информацию только о приоритете прерывания. Для
каждого приоритета может быть несколько устройств(процессор
не знает от какого устройства пришло прерывание), поэтому процессор обращается
к обработчикам. Они обнаруживают, откуда пришло прерывание, и потом нужный
обработчик производит свои действия, которые могут выработать уровень
приоритета. У процессора типа Pentium способ обработки прерываний
векторный, а у шин - опрашиваемый. Приоритизация
- источники прерывания делятся на классы, каждому классу присваивается
определенный уровень приоритетов, могут обслуживаться относительно или
абсолютно. Обслуживаются прерывания с наивысшим приоритетом - относительное
прерывание. Абсолютный тип прерывания - выбирает процессор с наибольшим
приоритетом и обрабатывается до тех пор, пока не появится прерывание большим
приоритетом, тогда меньший приоритет прерывается до того момента, когда он
снова станет максимальным. Маскирование - временный отказ от обработки
прерывания любого класса вне зависимости от уровня приоритета (любые
прерывания). Последовательность действий процессора по обработке прерывания: 1.
При возникновении прерывания происходит аппаратное распознавание типа
прерывания. 2. Если установлено маскирование, то процессор не
обращает внимание и продолжает работу без прерывания. 3. Если
маскирования нет, то процессор находит обработчик и передает управление ему. 4.
Сохраняется некоторая часть контекста прерванного потока, чтобы ядро могло
возобновить этот поток. Сохраняется слово состояния. 5. Загружается новое слово
состояния процесса, новый контекст, которое определяет работу процессора при
обработке прерывания. 6. Маскируются прерывания данного типа и приоритета. 7.
Когда прерывание обработано, надо возобновить работу прерванного потока, с
места где произошло прерывание, загружается слово состояния, контекст(если не наступило нов. прерывание). Прерывания вызываются с помощью инструкции
процедура int. Это используется программно, чтобы: 1. Если создаем
модули, то обращения, переход к ним происходит с наименьшим временем (сократить
время). 2. Возможность перехода в привилегированный режим (передаем управление
самой ОС, т.к. только она может работать в привилегированном режиме). Существует специальный модуль диспетчер
прерываний, чтобы управлять работой прерываний. Он создает и управляет очередью
из прерываний. Когда возникает прерывание, то управление сначала передается
диспетчеру, чтобы узнать приоритет, приоритезацию,
т.е. диспетчер создает и управляет очередью из прерываний. Системный вызов -
позволяет приложению обратится к ОС для выполнения
какого-то действия. Действие оформлено как процедура ОС. Требования к системным
вызовам: 1. Переключение в
привилегированный режим - можно воспользоваться преимуществами ОС. 2. Высокая
скорость вызова процедуры ОС. 3. Возможность расширения набора системных
вызовов. 4. Контроль со стороны ОС за корректным использованием системных
вызовов. Все требования выполняются с помощью прерываний.