Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 3. Процессы и потоки.doc
Скачиваний:
11
Добавлен:
18.11.2019
Размер:
441.86 Кб
Скачать

Глава 4. Процессы и потоки

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

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

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

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

Уровни irql

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

Высший (ошибка шины,...)

Питание

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

Таймер

Устройство п

Устройство 1

Диспетчерски й/d pc

АРС

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

IRQL

текущего кода

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

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

Мультипрограммирование на основе прерываний 151

полагается запрос на прерывание по сбою питания, и запрос на межпроцессор­ное прерывание.

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

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

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

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

Этот уровень приоритета называется диспетчерским, потому что именно в эту очередь помещаются программные запросы, вызывающие диспетчер пото­ков. Часто при обработке высокоприоритетных прерываний возникает ситуация, требующая перепланирования потоков. Например, при обработке очередного прерывания от таймера нужно проверить, не исчерпан ли квант, выделенный текущему потоку. Другим примером может служить обработка прерывания от контроллера диска после завершения дисковой операции, которую Moiyr ждать несколько потоков. Во всех таких ситуациях в ОС семейства Windows NT пла­нировщик/диспетчер вызывается высокоуровневыми процедурами ядра не прямо посредством вызова процедуры, а косвенно с помощью программного прерывания. Это дает возможность отделить короткую, но требующую быстрой реакции системы процедуру обслуживания высокоприоритетного прерывания (например, наращивание системных часов), от менее критичной операции пере­планирования пользовательских потоков. Прямой вызов; планировщика/дис­петчера потоков такой возможности бы не дал, и критичные запросы прерыва­ния от контроллеров устройств ввода-вывода вынуждены были бы ждать, пока отработает планировщик. При этом планировщик, возможно, выбрал бы для выполнения другой поток, если бы работал после процедур обслуживания ап­паратных прерываний, так как он получил бы свежие сведения О завершении некоторых операций ввода-вывода. Помещение вызова планировщика потоков в очередь позволяет выполнять его только в тех ситуациях, когда в системе от­сутствуют ожидающие аппаратные запросы прерываний.