Лекция 4. Обработка прерываний. Синхронизация процессов. Задачи.

Внешние прерывания (асинхронные, аппаратные прерывания)

Внутренние прерывания (синхронные, программные прерывания)

программируемое прерывание

У процесса, находящегося в состоянии выполнения, возникает необходимость прерывания процессом самого себя:

  • обращение к услугам ОС (системный вызов);
  • потребность работы с ресурсами (получить ресурс, отказаться от ресурса, выполнить над ресурсом некоторые действия (например, в/в));
  • необходимость каких-либо действий в отношении других процессов (порождение, уничтожение, синхронизация).

прерывания, связанные с работой процессора и являющиеся синхронными с его операциями:

  • арифметическое переполнение;
  • исчезновение порядка в операциях с плавающей точкой;
  • обращение к защищенной области ОП и т.д.

 

Вызываются событиями, которые не связаны с выполняющимся процессом (события возникают вне выполняющегося процесса без его ведома, т.е. асинхронно).

  • прерывания от внешних устройств ввода-вывода;
  • прерывания от таймера;
  • прерывания от другого процессора и т.д.

 

  1. Обработка прерываний.

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

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

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

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

 

Рис. 4.1. Обработка прерываний

 

Существует комбинированный подход, сочетающий векторный и опрашиваемый типы прерываний. Такой подход реализован на основе процессоров Intel Pentium. Контроллер прерываний отображает поступающий от шины сигнала IRQ (Interrupt request) на определенный номер вектора прерываний. Вектор представляет собой число, указывающее на одну из 256 программ обработки прерываний, адреса которых хранятся в таблице обработчиков прерываний. В том случае, когда к каждой линии IRQ подключается только одно устройство, процедура прерываний работает как чисто векторная. Однако при совместном использовании одного уровня IRQ несколькими устройствами обработка прерываний реализуется по схеме опрашиваемых прерываний. В данном случае необходимо выполнить опрос всех устройств, подключенных к данному уровню IRQ.

 

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

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

 

Обычно обработка прерывания выполняется только после завершения выполнения текущей команды.

 

Выбор прерывания для обработки осуществляется на основе приоритетов и очередей прерываний.

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

 

Чтобы обработать сигналы прерывания в порядке очереди, им присваиваются приоритеты.

Сигнал с более высоким приоритетом обрабатывается в первую очередь, обработка остальных сигналов прерывания откладывается.

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

 

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

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

 

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

 

По принципу стека, по дисциплине LCFS (Last Come First Served — последним пришел, первым обслужен), то есть запросы с более низким приоритетом могут прерывать обработку прерывания с более высоким приоритетом. Для этого необходимо не накладывать маску ни на один из сигналов прерывания и не выключать систему прерываний.

 

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