Подсистема обслуживания драйверов |
Как видно из схемы, начальным этапом является - (1-2-3-4-5) «Регистрация драйвера в системе 3ОС». Этот этап предполагает, что модуль (объект) драйвера создан, загружен в систему 3ОС и коду его инициализации передано управление. Первый шаг (1-2), состоит в посылке запроса IPC объекта драйвера на регистрацию в системе 3ОС, получателем сообщения (1-2) выступает модуль драйвер-менеджера (ДМ). Сообщение регистрации в контейнере IPC запроса (1-2) передает данные, предназначенные не только для регистрации драйвера в ДМ, являющимся его представителем в среде приложений и сервисов, но и для модуля диспетчеризации прерываний (ДП). Эта часть контейнера сообщения продвигается ДМ запросом IPC (3-4) на подключения драйвера в механизм обслуживания прерываний. На данном этапе в любой из веток посылки запросов (1-2, 3-4) может возникнуть ситуация в которой удовлетворение запроса не возможно (не пройден крэш-тест процедуры идентификации, линия запроса прерывания занята обработчиком EXCLUSIVE и т. д.). В этом случае запрос будет перемещен в порядке (2-1, 4-3-2-1) сообщением об ошибке регистрации драйвера, что указано на схеме двунаправленной линией посылки сообщения. Подтверждение регистрации драйвера в механизме распределения сообщений ДП и соответственно в ДМ, должно быть практически мгновенным, так за ним может последовать генерация прерывания в возможно неподготовленный код обработчика. Разрешить эту ситуацию может либо вызов объекта синхронизации Event (5), либо отсутствие подтверждения регистрации как таковое (драйвер с момента подачи запроса на регистрацию, должен находится в состоянии готовности осуществления обработки прерывания).
Следующий этап взаимодействия драйвера с системой (6-7-8-9-10) «Обработка устройства драйвером». Передача управления драйверу (процедуре обработки прерывания) в этом случае осуществляется через прямой вызов ДП сгенерированным прерыванием (6), затем поиск обработчика в ДП с последующим вызовом найденного обработчика (7). Получив управления в процедуру обработки (поток обработки прерывания) драйвер может, либо отложить обработку устройства, выполнив все необходимы для этого процедуры и послав сам себе сообщение IPC о возобновлении обработки (8), либо выполнить обработку устройства немедленно, вернув управление в поток, ожидающий данных от драйвера сообщением IPC (10-11). Кроме этого возможен возврат (7) в ДП в случае, когда порцию данных от драйвера, сработавшего устройства, не заказывало ни одно приложение или сервис 3ОС.
Этап «Взаимодействие приложения с драйвером» (A-B-C) сводится к единственному запросу по IPC на обслуживание (A-B), проходящему через ДМ, который, либо отклоняет его сообщением о невозможности обслуживания (B-A), либо принимает с последующей трансляцией запроса напрямую в драйвер (C) и подтверждением обслуживания через IPC (B-A). Прямое взаимодействие ДМ и драйвера для регистрации в стеке драйвера приложения получателя данных, в этом случае исключает потерю порции данных при первичном подключении приложения получателя.