Найти в Дзене

Что вы не знали о драйверах Windows

Что такое драйвер? Сложно дать единственное точное определение для термина драйвер. В самом фундаментальном смысле драйвер - компонент программного обеспечения, который позволяет операционной системе, и устройству связываются друг с другом. Например, предположите, что приложение должно считать некоторые данные из устройства. Приложение вызывает функцию, реализованную операционной системой, и операционная система вызывает функцию, реализованную драйвером. Драйвер, который был записан той же компанией, которая разработала и произвела устройство, знает, как связаться с аппаратными средствами устройства, чтобы получить данные. После того, как драйвер получает данные от устройства, он возвращает данные операционной системе, которая возвращает их приложению. Моё объяснение до сих пор упрощено несколькими способами: • Не все драйверы должны быть записаны компанией, которая разрабатывала устройство. Во многих случаях устройство разработано согласно опубликованному аппаратному стандарту. Это о

Что такое драйвер?

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

Моё объяснение до сих пор упрощено несколькими способами:

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

• Не все драйверы связываются непосредственно с устройством. Для данного запроса ввода-вывода (как чтение данных из устройства), часто есть несколько драйверов, выложенных слоями в стеке (стек можно представить как стопку книг), которые участвуют в запросе. Стандартный способ представить стек с первым драйвером наверху и последним в нижней части.

Некоторые драйверы в стеке могут преобразовывать запрос из одного формата в другой. Эти драйверы не связываются непосредственно с устройством; они просто управляют запросом и передают запрос драйверам, которые ниже в стеке. Один драйвер в стеке, который связывается непосредственно с устройством, называют функциональным драйвером; драйверы, которые выполняют вспомогательную обработку, называют драйверами фильтра.

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

Я мог расширить своё определение драйвера, говоря, что драйвер - любой компонент программного обеспечения, который наблюдает или участвует в передаче информации между операционной системой и устройством.

Далее я дам некоторые понятия для понимания следующего материала.

Непривилегированный режим и привилегированный режим

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

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

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

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

Программные драйверы:

Моё расширенное определение довольно точное, но все еще неполное, потому что некоторые драйверы не связаны ни с каким устройством вообще. Например, предположите, что Вы должны написать программу, у которой есть доступ к базовым структурам данных операционной системы, к которым может получить доступ только код, работающий в привилегированном режиме. Вы можете сделать это, разделив инструмент на два компонента. Первый компонент работает в непривилегированном режиме и представляет пользовательский интерфейс. Второй компонент работает в привилегированном режиме и имеет доступ к базовым данным операционной системы. Компонент, который работает в непривилегированном режиме, называют приложением, и компонент, который работает в привилегированном режиме, называют программным драйвером. Программный драйвер не связан с устройством.

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

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

Моё объяснение до сих пор упрощает определение функционального драйвера. Я сказал, что функциональный драйвер для устройства - один драйвер в стеке, который связывается непосредственно с устройством. Это - истина для устройства, которое соединяется непосредственно с шиной взаимодействия периферийных компонентов (PCI). Функциональный драйвер для устройства PCI получает адреса, которые отображены на порте и ресурсах памяти устройства. Функциональный драйвер связывается непосредственно с устройством при записи в эти адреса. Однако, во многих случаях устройство не соединяется непосредственно с шиной PCI. Вместо этого устройство соединяется с шинным контроллером, который соединен с шиной PCI. Например, принтер с USB подключением соединяется с шинным контроллером (названный хост-контроллером USB), который соединен с шиной PCI. У принтера есть функциональный драйвер, и у хост-контроллера USB также есть функциональный драйвер. Функциональный драйвер для принтера связывается косвенно с принтером, отправляя запрос к функциональному драйверу для хост-контроллера USB. Функциональный драйвер для хост-контроллера USB тогда связывается непосредственно с аппаратными средствами хост-контроллера USB, которые связываются с принтером.

Благодарю за внимание и надеюсь что всё доступно изложил.