Поделиться через


Контекст потока драйвера

Как показано на рисунке Обработка IRPs в многоуровневых драйверах, файловая система является драйвером, состоящим из двух частей:

  1. Драйвер файловой системы (FSD), который выполняется в контексте потока пользовательского режима, вызывающего системную службу ввода-вывода.

    Диспетчер ввода-вывода отправляет соответствующий IRP в FSD. Если FSD настраивает подпрограмму завершения для IRP, ее подпрограмма завершения не обязательно вызывается в контексте исходного потока пользовательского режима.

  2. Набор потоков файловой системы и, возможно, FSP (процесс файловой системы)

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

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

Хотя драйвер самого низкого уровня, показанный на рисунке обработка IRP в многоуровневых драйверах, обрабатывает каждый IRP этапами с помощью набора дискретных функций, предоставляемых драйвером, он не использует системные потоки, как файловая система. Драйвер низкого уровня не нуждается в собственном контексте потока, если только настройка устройства для ввода-вывода не является таким длительным процессом, что он имеет заметное влияние на производительность системы. Немногие низкоуровневые или промежуточные драйверы должны настроить собственные потоки системы, выделенные для драйвера или устройства, и те, которые платят штраф за производительность, вызванный переключениями контекста на их потоки.

Большинство драйверов режимов ядра, таких как драйвер физического устройства в диаграмме обработки IRP в многоуровневых драйверах, выполняются в произвольном контексте потока: в контексте любого потока, который оказывается текущим в момент вызова для обработки IRP. Следовательно, драйверы обычно поддерживают состояние операций ввода-вывода и устройств, которые они обслуживают в определяемой драйвером части объектов устройства, называемого расширением устройства.