Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник по Ос иС.doc
Скачиваний:
34
Добавлен:
19.08.2019
Размер:
4.46 Mб
Скачать
    1. Обработка прерываний

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

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

В зависимости от источника прерывания делятся на три класса:

  1. внешние (аппаратные) – могут возникать в результате действий пользователя или оператора за терминалом, или же в результате поступления сигналов от аппаратных устройств (сигналов завершения операции ввода-вывода), или же сигналов от датчиков управляемых компьютеров техническим объектов. Этот класс прерываний является асинхронным по отношению к потоку инструкций прерываемой программы;

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

  3. программные – возникают при выполнении особой команды процессора, выполнение которой имитирует прерывание, то есть переход на новую последовательность инструкции. Не являются «истинными» прерываниями.

Процедуры, вызываемые прерываниями, называются процедурами обслуживания прерываний (interrupt service routine, ISR) или обработчиками прерываний.

Механизм прерываний

Существуют два основных способа, с помощью которых шины выполняют прерывания, в обоих из них процессору предоставляется информация об уровне приоритета прерывания на шине подключения внешних устройств:

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

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

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

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

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

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

Процедуры обработки прерываний и текущий процесс

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

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

Системные вызовы

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

Реализация системных вызовов должна удовлетворять следующим требованиям:

  1. обеспечивать переключение в привилегированный режим;

  2. обладать высокой скоростью вызова процедур ОС;

  3. обеспечивать по возможности единообразное обращение к системным вызовам для всех аппаратных платформ, на которые работает ОС;

  4. допускать легкое расширение набора системных вызовов;

  5. обеспечивать контроль со стороны ОС за корректным использование системных вызовов.

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

ОС может выполнять системные вызовы в двух режимах:

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

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

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

Приоритезация означает, что все источники прерываний делятся на классы и каждому классу назначается свой уровень приоритета запроса на прерывание.

Приоритеты могут обслуживаться как:

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]