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

Прерывания представляют собой механизм, позволяющий координировать параллельное функционирование отдельных устройств в вычислительной системе и реагировать на особые состояния, возникающие при работе процессора путем передачи управления от выполняемой программы к ОС и далее к соответствующему программному обработчику.
Идея прерываний возникла в середине 50-х годов. Прерывания позволили реализовать асинхронный режим работы и параллельную работу устройств вычислительного комплекса независимо от архитектуры.
Обработка прерывания включает в себя следующие элементы:
1)    Установка факта прерывания и его идентификация.
2)    Запоминание состояния прерванного процесса (часть контекста).
3)    Аппаратная передача управления обработчику прерывания.
4)    Запоминание той части контекста, которую не смогли запомнить на шаге 2.
5)    Обработка прерывания путем вызова соответствующей подпрограммы.
6)    Восстановление информации, обратной шагу 4.
7)    Восстановление информации, обратной шагу 2.

Шаги 1-3 и 7 делаются аппаратно, шаги с 4 по 6 – программно, причем шаги 4, 6 выполняет ядро ОС, шаг 5 – драйвер.
Прерывания делятся на два класса: внешние и внутренние.
Внешние прерывания вызываются асинхронными событиями, которые происходят вне текущего процессора (таймера и т.д.). Внутренние прерывания вызываются событиями, которые связаны с работой процессора и синхронны с его операциями (деление на ноль, нарушение адресации и т.д.).
Программное прерывание (внутреннее) по соответствующей команде прерывания переходит с одного уровня защиты процессора на другой.
Сигналы, вызывающие прерывание, могут возникнуть одновременно (внутри  одного такта частоты процессора). Выбор одного из них осуществляется на основе приоритетов. Учет приоритета может быть аппаратным, программным и смешанным. Наличие сигнала прерывания не обязательно должно вызывать прерывание.
Процессор может обладать средствами защиты от прерываний, а именно отключение сигнала прерываний, маскирование отдельных сигналов прерываний. Это позволяет ОС управлять возникновением прерываний на основе различных дисциплин обслуживания:
1)    С относительным приоритетом. Обслуживание не прерывается даже при наличии запросов с более высоким приоритетами. После окончания обслуживания данного прерывания обслуживается запрос с наименьшим приоритетом.
2)    С абсолютным приоритетом. Всегда обслуживается прерывание с наивысшим приоритетом. Возможно прерывание прерывания (или многократное прерывание).
3)    По принципу стека. Обслуживание прерывания, пришедшего последним (LCFSLast Come First Served).
Виды 2 и 3 требуют полного запрета прерываний на шагах 1-4, 6, 7.

В многопользовательской системе обработка прерываний строится сложнее, чем в однопользовательской.

Комментариев нет:

Отправить комментарий