Существует 2 способа, с помощью которых шины выполняют прерывания:
- Векторный
- Опрашиваемый
При использовании векторных прерываний устройствам назначается вектор прерываний (электрический сигнал, несущий инфу об определенном номере, закрепленном за определенным устройством). Устройство запрашивает прерывание. Процессор подтверждает запрос и выполняет цикл подтверждения прерывания, в котором устройство должно себя идентифицировать. Для этого оно выставляет свой вектор прерываний, а процессор, используя этот вектор, находит соответствующий обработчик прерываний.
При использовании опрашиваемых прерываний процессор получает от устройства только инф-ю об уровне приоритета прерывания. С каждым уровнем может быть связано несколько устройств, и чтобы определить нужное, процессор вызывает все обработчики прерываний для данного типа приоритета, пока один из них не «распознает» свое прерывание.
Упорядочивание обработки прерываний достигается за счет приоритезации и маскирования
|
|
Приоретизация:
Каждому источнику прерываний назначается класс, каждому классу соответствует свой уровень приоритета.
Приоритеты могут быть:
- относительные (прерывание выбрано на обработку и обрабатывается хоть гром греми)
- абсолютные (прерывание начало обрабатываться, но при поступлении более приоритетного прерывания его обработка прекращается). Это достигается тем, что есть переменная, в которую записывается приоритет прерывания, которое сейчас обрабатывается. С ней сравнивается значение приоритета вновь поступивших прерываний.
Маскирование (собственно, оно есть и в только что описанной схеме приоретизации) – запросы на прерывания маскируются, то есть не обслуживаются. Маскирование предполагает возможность маскирования прерываний любого уровня, вне зависимости от их приоритета.
Диспетчеризация и приоритеты прерываний
Прерывания играют важную роль в работе ОС.И обработка прерываний довольно сложная задача, тк.
- они возникают асинхронно к программе
- связаны с непредвиденными переходами управления
- системные вызовы часто реализуются по прерываниям
- прерывания возникают при возникновении ошибок в программе
- сами модули ОС часто вызывают друг друга по прерываниям
- даже планировщик потоков по сути – системная процедура, вызываемая по прерываниям.
Поэтому прерываниями нужно грамотно управлять.
Этим занимается специальный программный модуль – ДИСПЕТЧЕР ПРЕРЫВАНИЙ.