Что такое драйвер, типы драйверов и характеристики Что такое драйвер. Что такое драйвер и как его установить на компьютер

Начинающие пользователи ПК, часто задают вопрос, для чего предназначены драйвера?

для чего нужны драйвера

Давайте разберем, для чего все же они нужны. Драйвер — это в принципе программа, которая предназначена обеспечить вашу систему в полной работоспособности, чтобы ваша система работала стабильно. Но увидеть, как драйвер работает, пользователь не может, потому, что все драйвера ведут работу в автономном режиме.

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

Драйвер — это некий помощник для вашей видеокарты, который направляет работу видеокарты в нужное русло и позволяет использовать видеокарту на полную мощность. Так же стоит упомянуть, что для каждой комплектующей запчасти имеется свой драйвер, будь то материнская плата, аудио карта. Причина в том, что у каждой запчасти имеется своя функция и, как следствие, каждое устройство нуждается в своем драйвере.

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

Какие комплектующие не нуждаются в драйверах?

Запчасти, которые не требуют драйвера, являются Жесткий диск, Оптический привод (Дисковод). Причина в том, что таким комплектующим достаточно того, что им предлагает сама ОС. Как только вы подключили Жесткий диск, у вас высветится окно, которое будет распознавать новую запчасть. Как только поиск устройства завершиться, зайдя в (Мой компьютер) вы увидите новое разделение жесткого диска, это и есть ваше новое устройство.

Пользователи знают, что для корректного функционирования абсолютно всех составляющих компьютера, называемых иногда «железом», и некоторых виртуальных устройств в системе должно присутствовать специальное программное обеспечение, называемое драйвером. Но что же такое драйвер устройства? Ответ на этот и некоторые другие вопросы можно найти в материале, приведенном ниже.

Драйвер: это что такое в общем понимании?

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

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

Вопросы установки драйверов устройств

Теперь несколько слов об установке. Поскольку драйвер - это связующее звено между аппаратной частью компьютера и имеющейся программной средой, для каждого устройства такое должно быть установлено в обязательном порядке (иначе работать оно не будет, или его функциональность будет нарушена).

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

Первым делом необходимо просмотреть весь список установленного оборудования в «Диспетчере устройств», который проще всего вызвать командой devmgmt.msc через консоль «Выполнить». Также можно воспользоваться стандартной «Панелью управления» или разделом администрирования через меню ПКМ на значке компьютера.

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

Как и где найти нужный драйвер, если в Windows его нет?

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

Для этого предусмотрены специальные идентификаторы, которые соответствуют конкретному устройству (DEV и VEN). Чтобы их найти, необходимо через ПКМ в меню свойств вызвать раздел свойств и перейти на вкладку сведений, где в информационном списке выбирается ИД оборудования. Самая длинная строка и будет в полной мере соответствовать описанию устройства. Таким образом, тот же сетевой драйвер можно найти в интернете, задав в поиске именно эту комбинацию.

После скачивания драйвер можно установить самостоятельно. Если это EXE-файл - проблем нет, только запускать инсталлятор необходимо от имени администратора.

В случае с INF-файлом драйвер можно установить через меню ПКМ или указать системе установку из указанного места при обновлении драйвера в «Диспетчере устройств».

Использование автоматизированных утилит

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

Здесь на помощь приходят специализированные программные пакеты для автоматического поиска и установки драйверов вроде Driver Booster, DriverPack Solution и им подобные. А вот такие утилиты, определив все устройства, которые присутствуют в компьютерной системе, обращаются не к собственным или сторонним базам данных, а непосредственно к ресурсам производителей оборудования и разработчиков соответствующего программного обеспечения, загружая и устанавливая его без видимого участия самого пользователя (его участие сводится только к тому, чтобы согласиться с предложением инсталляции или обновления). Плюс ко всему, эти программы следят за актуальным состоянием драйверов, постоянно проверяя выход новых версий (чего Windows при всем уважении к этим системам делать не умеет).

Заключение

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

Разнообразный набор драйверов для широкого круга популярных периферийных устройств – непременное условие популярности ОС у пользователей.

Для разработки драйверов производителями внешних устройств необходимо наличие четкого, удобного, открытого и хорошо документированного интерфейса между драйверами и другими компонентами ОС. Драйвер взаимодействует, с одной стороны, с модулями ядра ОС (модулями подсистемы ввода-вывода, модулями системных вызовов, модулями подсистем управления процессами и памятью), а с другой стороны – с контроллерами внешних устройств. Поэтому существует два вида интерфейсов: интерфейс «драйвер-ядро» (Driver Kernel Interface, DKI) и интерфейс «драйвер-устройство» (Driver Device Interface).

Интерфейс «драйвер-ядро» должен быть стандартизован в любом случае. Подсистема ввода-вывода может поддерживать несколько различных интерфейсов DKI/DDI, предоставляя специфический интерфейс для устройств определенного класса. К наиболее общим классам относятся блочные устройства, например, диски, и символьные устройства, такие как клавиатура и принтеры. Может существовать класс сетевых адаптеров и др. В большинстве современных ОС определен стандартный интерфейс, который должен поддерживать все блочные драйверы, и второй стандартный интерфейс, поддерживаемый всеми символьными адаптерами. Эти интерфейсы включают наборы процедур, которые могут вызываться остальной операционной системой для обращения к драйверу. К этим процедурам относятся, например, процедуры чтения блока или записи символьной строки.

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

У драйверов устройств есть множество функций:

1. Обработка запросов записи-чтения от программного обеспечения управления устройствами. Постановка запросов в очередь.

2. Проверка входных параметров запросов и обработка ошибок.

3. Инициализация устройства и проверка статуса устройства.

4. Управление энергопотреблением устройства.

5. Регистрация событий в устройстве.

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

7. Проверка правильности завершения операции.

8. Передача запрошенных данных и статуса завершенной операции.

9. Обработка нового запроса при незавершенном предыдущем запросе (для реентерабельных драйверов).

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

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

Затем драйвер может проверить, не используется ли это устройство в данный момент. Если устройство занято, запрос может быть поставлен в очередь. Если устройство свободно, проверяется статус устройства, чтобы понять, может ли запрос быть обслужен прямо сейчас. Может оказаться необходимым включить устройство или запустить двигатель, прежде чем начнется перенос данных. Как только устройство включено и готово, начинается собственно управление устройством.

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

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

Для поддержки процесса разработки драйверов операционной системы выпускается так называемый пакет DDK (Driver Development Kit), представляющий собой набор инструментальных средств-библиотек, компиляторов и отладчиков.

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

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

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

Первоначально термин «драйвер» применялся в достаточно узком смысле – под драйвером понимается программный модуль, который:

Входит в состав ядра ОС, работая в привилегированном режиме;

Непосредственно управляет внешним устройством, взаимодействуя с его контроллером с помощью команд ввода-вывода компьютера;

Обрабатывает прерывания от контроллера устройства;

Предоставляет прикладному программисту удобный логический интерфейс работы с устройством, экранируя от него низкоуровневые детали управления устройством и организации его данных;

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

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

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

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

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

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

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

В модулях подсистемы ввода-вывода, кроме драйверов, могут присутствовать и другие модули, например, дисковый кэш. Достаточно специфичные функции кэша делают нецелесообразным оформление его в виде драйвера, взаимодействующего с другими модулями ОС только с помощью услуг менеджера ввода-вывода. Другим примером модуля, который чаще всего не оформляется в виде драйвера, является диспетчер окон графического интерфейса. Иногда этот модуль вообще выносится из ядра ОС и реализуется в виде пользовательского интерфейса. Таким образом, был реализован диспетчер окон в Windows NT 3.5 и 3.51, но этот микроядерный подход заметно замедляет графические операции, поэтому в Windows 4.0 диспетчер окон и высокоуровневые графические драйверы, а также графическая библиотека GDI были перенесены в пространство ядра.

Аппаратные драйверы после запуска операции ввода-вывода должны своевременно реагировать на завершение контроллером заданного действия путем взаимодействия с системой прерывания. Драйверы более высоких уровней вызываются не по прерываниям, а по инициативе аппаратных драйверов или драйверов вышележащего уровня. Не все процедуры аппаратного драйвера нужно вызывать по прерываниям, поэтому драйвер обычно имеет определенную структуру, в которой выделяется секция обработки прерываний (Interrupt Service Routine, ISR), которая и вызывается от соответствующего устройства диспетчером прерываний.

В унификацию драйверов большой вклад внесла ОС UNIX, в которой все драйверы были разделены на два класса: блок-ориентированные (Block-oriented) и байт-ориентированные (Character-oriented) драйверы. Это более общее деление, чем деление на вертикальные подсистемы. Например, драйверы графических устройств и сетевых устройств относятся к классу байт-ориентированных.

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

Устройства, с которыми работают байт-ориентированные драйверы, не адресуют данные и не позволяют производить операции поиска данных, они генерируют или потребляют последовательность байта (терминалы, принтеры, сетевые адаптеры и т.п.).

Однако не все устройства, управляемые подсистемой ввода-вывода, можно разделить на блок и байт-ориентированные. Для таких устройств (например, таймер) нужен специфический драйвер.

В свое время ОС UNIX сделала очень важный шаг по унификации операций и структуризации программного обеспечения ввода-вывода. В ОС UNIX все устройства рассматриваются как виртуальные (специальные) файлы, что дает возможность использовать общий набор базовых операций ввода-вывода для любых устройств независимо от их специфики. Подобная идея реализована позже в MS-DOS, где последовательные устройства – монитор, принтер и клавиатура – считаются файлами со специальными именами: con, prn, con.

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

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

Как? Давайте разберемся!

Что это - драйвер?

Драйвер - это небольшая программа, посредством которой ОС "понимает", какие устройства подключены к в системном блоке, зачем они нужны, как ими управлять и так далее. Эти программы создаются самими производителями устройств.

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

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

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

Альтернативные варианты поиска

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

Компьютер без утилит управления попросту не будет знать, что с ней делать. Вы не сможете выйти в Интернет и скачать все прочие утилиты. Такая же история будет с аудиоустройством - если звуковой драйвер отсутствует, то вы никак не насладитесь любимой музыкой, голосовым общением или просмотром фильмов перед сном.
А вот если вам интересно, где можно скачать нужный и рабочий драйвер, то ответ прост - напрямую от разработчика.


Именно поэтому вам необходимо по очереди вбивать в поисковик названия всех устройств, подключенных к вашему ПК, и скачивать. Желательно с официальных сайтов, так как:

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

Где они могут храниться на компьютере?

Если на вашем ПК установлена Windows, то папку с уже установленными программами можно найти здесь:

  • 32-битные ОС - C:\windows\system32\drivers;
  • 64-битные ОС - C:\windows\syswow64\drivers.

Все файлы легко отличить, они имеют особые расширения - *.sys, *.vxt, *.dll или *.inf.


Мало знать, где хранятся в Windows драйвера, важно уметь правильно ими пользоваться. Если вы точно знаете, что переустановка неизбежна, но возможности достать утилиты для всех устройств нет, то может помочь простой совет: просто установите программу Driver Genius. С ее помощью легко создать резервную копию всех необходимых файлов, после чего переустановить их на обновленном ПК.

Тут есть нехилый "подводный камень": драйвера могут оказаться устаревшими. Особенно это касается графических, ведь производители работают очень интенсивно, постоянно предлагая что-то новое.
Возможно, утилиты прекрасно работали ранее, но новая Windows ясно скажет вам: а подай-ка мне свежие, с этими работать не буду. И придется обновлять драйвера.

Зачем это нужно? Чтобы пользоваться всеми подключенными устройствами и не испытывать дискомфорта.

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

PS: Интересное видео "Установка драйверов в один клик"

Дорогой читатель! Вы посмотрели статью до конца.
Получили вы ответ на свой вопрос? Напишите в комментариях пару слов.
Если ответа не нашли, укажите что искали .

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

Код прикладной программы исполняется в пользовательском режиме работы процессора. В этом случае имеется ряд серьезных ограничений на доступ к памяти, аппаратному обеспечению и привилегированным инструкциям процессора. Когда возникает необходимость в преодолении этих ограничений, прикладная программа обращается к ядру ОС, код которого исполняется процессором в режиме ядра. Режим ядра лишен всех упомянутых ограничений. Для расширения функциональных возможностей ядра как раз и служат драйверы ядра (kernel mode drivers). Как они работают?

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

Под вызовом драйвера здесь подразумевается не обычный вызов функции, а передача так называемого запроса в/в. Более подробно см. лекцию 6.

Различают несколько классов драйверов:

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

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

Типы драйверов и характеристики

[Дополнительная информация] Ifs kit Help\Kernel-Mode Drivers\Design Guide\Part1 General Kernel Mode\Windows 2000 and WDM drivers\Kinds of driversили в DDK.

В NTсуществует 2 типа драйверов: драйверы пользовательского режима и драйверы режима ядра. В дальнейшем, говоря «драйвер», мы будем подразумевать драйверы режима ядра. Такие драйверы являются частью исполнительной системы, а более точно – элементами диспетчера в/в (архитектура NT и ее компоненты будут обсуждаться в лекции 2). Как следует из названия, при работе драйвера режима ядра процессор находится в режиме ядра (RING 0) – см. любой справочник по защищенному режиму работы процессора.

Драйвер NT располагается в файле с расширением.sys и имеет стандартный PE-формат (PE - Portable Executable).

Драйверы реализованы как самостоятельные модули с четко определенным интерфейсом взаимодействия с ОС. Все драйверы имеют определенный системой набор стандартных функций драйвера (standard driver routines) и некоторое число внутренних функций, определенных разработчиком.

Все драйверы режима ядра можно разбить на 3 типа:

    Драйверы высшего уровня (highest level drivers)

    Драйверы промежуточного уровня (intermediate drivers)

    Драйверы низшего уровня (lowest level drivers)

Как мы увидим в дальнейшем, такое разбиение обусловлено многоуровневой моделью драйверов (layered driver model). Для сохранения общности изложения, монолитный драйвер можно включить в эту схему, хотя он не использует многоуровневую архитектуру. В этом случае он будет «гибридом» – драйвером, принадлежащим одновременно к нескольким типам. Например, монолитный драйвер, имеющий интерфейс с приложением и осуществляющий доступ к оборудованию, будет одновременно и драйвером высшего, и драйвером низшего уровня.

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

    Драйверы файловой системы

    Сетевые драйверы

Отдельно необходимо упомянуть архитектуру WDM – Windows Driver Model. Эта архитектура позволяет создавать драйверы для Windows 98и Windows 2000, совместимые на уровне двоичного кода.

Можно привести следующие характеристики драйверов:

    Поддержка динамической загрузки и выгрузки (однако могут быть исключения)

    Необходимость следовать определенным протоколам взаимодействия с системой, нарушение которых чаще всего ведет к BSOD

    Возможность «наслоения» драйверов поверх друг друга. В Win2K эта возможность возведена в абсолют, хотя монолитные драйверы все еще поддерживаются

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