Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Модуль2.docx
Скачиваний:
181
Добавлен:
04.06.2015
Размер:
973.92 Кб
Скачать

11.Механизм прерываний. Способы выполнения прерываний. Приоретизация и маскирование прерываний. Диспетчеризация прерываний в операционной системе.

Механизм прерываний. Способы выполнения прерываний. Приоритизация и маскирование прерываний.

Прерывание прерывает «нормальную» работу системы и переводит процессор на выполнение другого потока команд с последующим возвращением к исходному процессу. Механизм реализации прерываний в чём-то схож с процессом вызова процедур, но отличается тем, что:

  1. переключение по команде перехода (вызов процедуры) предусмотрен в коде приложения;

  2. прерывание может произойти в произвольный момент времени и от одного из нескольких возможных источников;

Классы прерываний (в зависимости от источника):

1) внешние (аппаратные): возникают в результате действия пользователей или поступления сигналов от аппаратуры (н-р, завершение операции ввода/вывода). Система после обработки прерывания восстанавливает процесс с того места, на котором он был прерван;

2) внутренние (исключения): происходят синхронно с выполнением программы при появлении аварийной ситуации в ходе исполнения некоторой инструкции (деление на ноль и т.д.);

3) программные: не являются в полном смысле прерываниями; возникают при выполнении особых команд процессора, которые инициируют прерывания;

  • Каждому типу прерыванию присваивается приоритет, в соответствии с которым они классифицируются по степени важности и срочности реакции системы. Прерывания с равными приоритетами относятся к одному уровню приоритета прерываний; Приоритеты могут быть абсолютными или относительными; относительный приоритет может быть вытеснен абсолютным;

  • Прерывания обрабатываются модулями операционной системы, т.к. действия по обработке прерываний относятся к управлению разделяемыми ресурсами системы;

Процедуры, вызываемые для каждого конкретного типа прерывания называются обработчиками прерываний; аппаратные прерывания обрабатываются драйверами соответствующих внешних устройств, а исключения – процедурами ОС, обслуживающими системные вызовы. Кроме того, в ОС может быть реализован диспетчер прерываний, координирующий работу отдельных обработчиков прерываний.

Механизм прерываний поддерживается как аппаратно, так и программно (на уровне ОС). Аппаратная поддержка прерываний имеет особенности, зависящие от типа процессора и всей аппаратной платформы, передающей сигнал запроса на прерывание от внешнего устройства к процессору.

Способы выполнения прерываний

В обоих способах процессор получает информацию о приоритете прерывания на шине подключения внешнего устройства.

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

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

Механизм обработки прерываний

  1. при возникновении сигнала аппаратного прерывания или условий для внутреннего прерывания, происходит первичное аппаратное распознавание типа прерывания. Если прерывания данного типа в настоящий момент запрещены, то процессор продолжает поддерживать естественный ход выполнения команд, иначе, в зависимости от поступившей информации происходит автоматический вызов процедуры обработки прерывания, адрес которой находится в специальной таблице ОС – таблице векторов прерываний. Эта таблица используется для того, чтобы связать адрес обработчика прерывания с номером прерывания;

  2. автоматически сохраняется некоторая часть контекста прерванного процесса, который позволит ядру возобновить его исполнение после обработки прерывания;

  3. временно запрещаются прерывания данного типа, чтобы не было очереди потоков одной и той же процедуры;

  4. после обработки прерываний ядром ОС, контекст прерванного процесса восстанавливается и его работа возобновляется с прерванного места; также снимается блокировка прерываний данного типа.

Приоритезация прерываний.

Аппаратные прерывания вырабатываются устройствами компьютера, когда возникает необходимость их обслуживания. Например, по прерыванию таймера соответствующий обработчик прерывания увеличивает содержимое ячеек памяти, используемых для хранения времени. В отличие от программных прерываний, вызываемых запланировано самой прикладной программой, аппаратные прерывания всегда происходят асинхронно по отношению к выполняющимся программам. Кроме того, может возникнуть одновременно сразу несколько прерываний!

Для того, чтобы система "не растерялась", решая какое прерывание обслуживать в первую очередь, существует специальная схема приоритетов. Каждому прерыванию назначается свой уникальный приоритет. Если происходит одновременно несколько прерываний, то система отдает предпочтение самому высокоприоритетному, откладывая на время обработку остальных прерываний.

Система приоритетов реализована на двух микросхемах Intel 8259. Каждая микросхема обслуживает до восьми приоритетов. Микросхемы можно объединять (каскадировать) для увеличения количества уровней приоритетов в системе.

Уровни приоритетов обозначаются сокращенно IRQ0 - IRQ15.

Примеры приоритетов прерываний:

  • IRQ0 – прерывание системного таймера (самый высокий приоритет)

  • IRQ1 – прерывание от клавиатуры (и т.д.)

Маскирование прерываний.

Часто при выполнении критических участков программ для того, чтобы гарантировать выполнение определенной последовательности команд целиком приходится запрещать прерывания. Это можно сделать командой CLI (clear interruptions). Ее нужно поместить в начало критической последовательности команд, а в конце расположить команду STI (set interruptions), разрешающую процессору воспринимать прерывания. Команда CLI запрещает только маскируемые прерывания, немаскируемые всегда обрабатываются процессором. К немаскируемым прерываниям относят несколько источников аппаратных прерываний, которые не могут быть маскированы и обрабатываются всегда (н-р, от системного таймера).

Если вы используете запрет прерываний с помощью команды CLI, следите за тем, чтобы прерывания не отключались на длительный период времени, так как это может привести к нежелательным последствиям. Например, будут отставать часы.

Если вам надо запретить не все прерывания, а только некоторые, например, от клавиатуры, то для этого надо воспользоваться услугами контроллера прерываний: выдачей в этот контроллер определенной управляющей информации можно замаскировать прерывания от отдельных устройств. Для этого предназначен специальный регистр IMR (interruption mask register), который отвечает за маскирование прерываний от отдельных источников и представляет собой битовую маску. Каждому биту соответствует один источник прерываний, который можно маскировать.

Диспетчеризация прерываний в операционной системе.

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

Операционная система не может терять контроль над ходом выполнения системных процедур, вызываемых по прерываниям. Она должна упорядочивать их во времени так же, как планировщик упорядочивает многочисленные пользовательские потоки. Кроме того, сам планировщик потоков является системной процедурой, вызываемой по прерываниям (аппаратным — от таймера или контроллера устройства ввода-вывода, или программным — от приложения или модуля ОС). Поэтому правильное планирование процедур, вызываемых по прерываниям, является необходимым условием правильного планирования пользовательских потоков. В противном случае в системе могут возникать, например, такие ситуации, когда операционная система будет длительное время заниматься не требующей мгновенной реакции задачей управления стримером, архивирующим данные, в то время, когда высокоскоростной диск будет простаивать и тормозить работу многочисленных приложений, обменивающихся данными с этим диском. Еще один пример такой ситуации иллюстрирует рис. 4.12. В данном случае обработчик прерываний принтера блокирует на длительное время обработку прерывания от таймера, в результате чего системное время на некоторое время «замирает» и поток 2, критически важный для пользователя, не получает управление в запланированное время. Остроту проблемы несколько смягчает то обстоятельство, что во многих случаях обработка прерывания связана с выполнением всего нескольких операций ввода-вывода и поэтому имеет очень небольшую продолжительность. Тем не менее ОС всегда должна контролировать ситуацию и выполнять критичную работу вовремя, а не полагаться на волю случая. Для упорядочения работы обработчиков прерываний в операционных системах применяется тот же механизм, что и для упорядочения работы пользовательских процессов — механизм приоритетных очередей. Все источники прерываний обычно делятся на несколько классов, причем каждому классу присваивается приоритет. В операционной системе выделяется программный модуль, который занимается диспетчеризацией обработчиков прерываний. Этот модуль в разных ОС называется по-разному, но для определенности будем его называть диспетчером прерываний. 

При возникновении прерывания диспетчер прерываний вызывается первым. Он запрещает ненадолго все прерывания, а затем выясняет причину прерывания. После этого диспетчер сравнивает назначенный данному источнику прерывания приоритет и сравнивает его с текущим приоритетом потока команд, выполнявмого процессором. В этот момент времени процессор уже может выполнять инструкции другого обработчика прерываний, также имеющего некоторый приоритет. Если приоритет нового запроса выше текущего, то выполнение текущего обработчика приостанавливается и он помещается в соответствующую очередь обработчиков прерываний. В противном случае в очередь помещается обработчик нового запроса.

ПРИМЕЧАНИЕ 

Приоритет обработчиков прерываний не совпадает в общем случае с приоритетом потоков, выполняемых в обычной последовательности, определяемой планировщиком потоков. По отношению к обработчикам прерываний любой поток, который назначен на выполнение планировщиком, имеет самый низкий приоритет, так что любой запрос на прерывание всегда может прервать выполнение этого потока.