Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ГЛАВА 6. Мультипрограммирование на основе прерываний.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
100 Кб
Скачать
☆

Функции централизованного диспетчера прерываний на примере Windows nt. Прерывания на аппаратном уровне.

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

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

Диспетчер прерываний Windows NT ( Trap Handler ) работает с программной моделью прерываний , единой для всех аппаратных платформ , поддерживаемых Windows NT . Все источники прерываний делятся на несколько классов , и каждому классу присваивается уровень запроса прерываний – Interrupt Request Level , IRQL . Этот уровень и представляет приоритет данного класса . ОС программным способом поддерживает внутреннюю переменную , называемую IRQL выполняемого процессором кода , которая по назначению соответствует уровню прерывания процессора .

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

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

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

В Windows NT низший уровень IRQL соответствует обычным потокам ,назначаемым на выполнение диспетчером потоков ( рис 6.1) . Это является некоторым допущением , так как код потоков начинает выполняться процессором не р результате запроса на прерывание , но это допущение хорошо работает , поскольку позволяет любому «настоящему» запросу прерывать код обычного потока .

Уровни IRQL

Высший (ошибки шины …)

Питание

Межпроцессорное прерывание

Таймер

Заблокированные уровни запросов прерываний

Устройство N.

Устройство …

Устройство 1

Диспетчерский/DPC

APC

Низший (обычный код)

Рис.6.1. Диспетчерезация прерываний в Windows NT

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

Прерывания от внешних устройств занимают промежуточные уровни IRQL . Конкретное соотношение между приоритетами внешних устройств определяется приоритетами , задаваемые аппаратной платформой , например уровнем IRQL шины PCI , назначенным устройству .

Особую роль в работе вычислительной системе играет системный таймер : на основании его прерываний обновляются системный часы , определяющие очередной момент вызова планировщика потоков , момент выдачи управляющего воздействия потоком реального времени и многое другое . Ввиду важности немедленной обработки прерываний от таймера , ему в Windows NT дан весьма высокий уровень приоритета – более высокий ,чем уровень любого устройства ввода-вывода .

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

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

Этот уровень приоритета называется диспетчерским , потому что именно в эту очередь помещаются программные запросы, вызывающие диспетчер потоков . Часто при обработке высокоприоритетных прерываний возникает ситуация , требующая перепланирования потоков . Во всех таких ситуациях в Windows NT планировщик/диспетчер вызывается высокоуровневыми процедурами ядра не прямо посредством вызова процедуры , а косвенно , с помощью программного прерывания . Это дает возможность отделить короткую , но требующую быстрой реакции системы процедуру обслуживания высокоприоритетного прерывания от менее критичной операции перепланирования пользовательских потоков .

Второе название диспетчерского уровня , DPC , говорит о том , что на этом уровне ожидают своей очереди отложенные вызовы и других процедур ОС , а не только планировщика/диспетчера. Примером процедур ОС , работающих на высоком приоритетном уровне , являются те части драйверов устройств ввода – вывода , которые выполняют короткие , но критичные ко времени реакции действия . Существуют также части драйверов , которые выполняют менее срочную , но более объемную работу . В Windows NT такие части драйверов оформляют как процедуры , вызываемые с помощью программных прерываний уровня «диспетчерский/DPC» , а само программное прерывание выполняет критичная часть драйвера .

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

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