Меню

Взаимодействие драйвера ос и оборудования



Поддержка широкого спектра драйверов и простота включения нового драйвера в систему

date image2015-10-13
views image504

facebook icon vkontakte icon twitter icon odnoklasniki icon

Достоинством подсистемы ввода-вывода любой универсальной ОС является на­личие разнообразного набора драйверов для наиболее популярных периферийных устройств. Прекрасно спланированная и реализованная операционная сис­тема может потерпеть неудачу на рынке только из-за того, что в ее состав не включен достаточный набор драйверов и администраторы и пользователи выну­ждены искать нужный им драйвер для имеющегося у них внешнего устройства у производителей оборудования или, что еще хуже, заниматься его разработкой. Именно в такой ситуации оказались пользователи первых версий OS/2, и, воз­можно, это обстоятельство послужило в свое время не последней причиной сда­чи позиций этой неплохой операционной системы, богатой на драйверы ОС Win­dows 3.x.

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

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

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

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

Источник

Основы функционирования драйверов в операционных системах Windows

Начнем с того, что в операционных системах Windows все физические устройства условно разделяются на две большие группы: поддерживающие технологию PnP или не поддерживаю щие ее. Соответственно, драйверы, поддерживающие технологию PnP, называют WDM драй верами, а драйверы, не поддерживающие эту технологию – NT драйверами. Это весьма упро щенный подход, но при первоначальном изучении данной темы этого достаточно. Оба типа драйверов в своей основе используют одни и те же функции, но WDM драйвер включает ряд дополнительных функций, позволяющих реализовать возможности технологии PnP (установ ка удаление без перезагрузки, управление энергопотреблением и т. д.). Кроме того, для уста новки и обновления WDM драйвера устройства используется стандартный мастер Windows, знакомый всем пользователям (рис. 7.4):

Мастер обновления

WDM драйвера устройства

Для установки/обновления WDM драйвера требуется наличие INF–файла, в котором опи

саны характеристики драйвера (имя файла, место установки, данные о производителе и т. д.).

Для установки NT драйвера INF файл не нужен, но требуется написать программу, позво ляющую с помощью специальных функций WINAPI включить драйвер в систему. То же самое, в принципе, можно сделать и вручную, прописав соответствующие значения ключей в систем ном реестре. Этот тип драйвера используется для работы с устройствами не PnP, а также при написании драйверов, не работающих с каким либо оборудованием. В частности, NT подоб ный драйвер можно использовать при работе с параллельным, последовательным портом, звуковой картой и другими устройствами в системе. Такой драйвер сравнительно несложно написать, что мы и продемонстрируем в последующих примерах.

Основы функционирования драйверов

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

Читайте также:  Виды оборудования для вина

Это весьма упрощенное описание структуры драйвера, но оно дает представление о том, как работает драйвер устройства. Жизненный цикл функционирования драйвера устройства можно разделить (условно) на три этапа:

2) выполнение операций по запросам операционной системы на ввод вывод данных

(Менеджер ввода вывода);

3) остановка и удаление из системы.

Вначале драйвер устройства должен быть проинициализирован. Процесс инициализации в упрощенном виде показан на рис. 7.5:

Схема инициализации драйвера устройства

Драйвер устройства записан на диске в формате файла с расширением .sys. Для опера ционных систем Windows общепринято располагать файлы драйверов в катклоге windows\ system32\drivers, хотя это вовсе не обязательно. Сведения об установленных драйверах хра

нятся в системном реестре Windows в ключе \registry\machine\system\currentcontrolset\ services. Исторически сложилось так, что записи о системных службах и драйверах хранятся в одном и том же разделе реестра (services). Помимо всего прочего записи содержат тип за пуска драйвера – по нему система определяет, когда нужно загружать драйвер. Здесь есть очень важный момент: при испытаниях работоспособности драйвера желательно не инициа лизировать драйвер в момент загрузки системы, иначе можно вообще не загрузиться, если в драйвере имеется какая либо ошибка.

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

файла в защищенную область памяти и передает управление функции DriverEntry. Основная задача этой функции – проинициализировать поля структур DriverObject и DeviceObject и выпол нить привязку устройства к пространству имен операционной системы, чтобы можно было обращаться к устройству из программы пользователя. Кроме этого, здесь же инициализиру ется массив указателей на функции вида IRP_MJ_XXX, где XXX обозначает операцию.

Например, указатель IRP_MJ_CREATE может ссылаться на функцию, которая будет вызы

ваться при создании (открытии) устройства (например, функцией CreateFile() из программы пользователя). Каждый драйвер может включать различные функции, в зависимости от на значения устройства. Например, в устройство можно только записывать данные, но нельзя читать – в этом случае можно не определять функцию для IRP_MJ_READ или сделать ее в виде программной «заглушки».

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

рацию с устройством? Для этого предусмотрен механизм пакетов запроса ввода вывода (I/O Request Packet, IRP). Например, если программа пользователя выполняет запись данных в устройство при помощи WINAPI функции WriteFile(), то Менеджер ввода вывода операцион ной системы формирует пакет запроса IRP_MJ_WRITE и посылает его драйверу устройства для выполнения. В свою очередь, драйвер устройства вызывает функцию, чей адрес указан при инициализации массива указателей и передает ей управление. Любой NT драйвер, тем не менее, должен обязательно включать обработчики пакетов запроса IRP_MJ_CREATE (откры тие устройства) и IRP_MJ_CLOSE (закрытие устройства).

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

Взаимодействие драйвера устройства с программой пользователя рассмотрим на приме

ре чтения данных из устройства ввода вывода (рис. 7.6).

На этом рисунке показана в упрощенном виде операция чтения данных устройства из приложения пользователя. Приложение пользователя вызывает функцию ReadFile(), переда вая ей дескриптор открытого устройства. Затем Менеджер ввода вывода, работающий в ре жиме ядра, по дескриптору устройства определяет, для какого драйвера следует формиро вать запрос IRP_MJ_READ и подготавливает пакет запроса. Далее вызывается функция обра ботки, соответствующая полученному запросу, которая выполняет необходимые действия по чтению данных из устройства. Здесь нужно отметить, что даже драйвер никогда не выполняет напрямую операций с портами ввода вывода устройства, а передает управление уровню ап паратных абстракций, реализованному в виде библиотечных функций в библиотеке hal.dll. Фактически здесь «заканчивается» аппаратная «независимость» всех операций и операции проводятся на уровне конкретных аппаратных средств.

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

Чтение данных из приложения пользователя

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

Сейчас мы на практике посмотрим, как можно реализовать простые драйверы устройств и, чтобы почувствовать, как это работает, создадим простейший драйвер.

Источник: Магда Ю. С. Компьютер в домашней лаборатории. – М.: ДМК Пресс, 2008. – 200 с.: ил.

Источник

Драйверы – «дрова» и их роль в операционной системе

Дата: 2020-08-28 • Просмотров: 1681 • Статьи

Драйверы –

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

Читайте также:  Причины износа машин и оборудования

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

  1. При установке на новый персональный компьютер операционной системы. Данный этап является наиболее сложным в связи с необходимостью изучения составляющих элементов устройства и поиска соответствующих им драйверов. Наиболее распространен вариант поиска драйверов в интернете и скачивания их с сайтов производителей соответствующих устройств. Также можно найти и скачать драйвер по коду устройства на нашем сайте — driverslab.ru. Для доступа к интернету необходимо предварительно установить драйвер на сетевую карту. После установки драйвера на сетевой проводной или беспроводной адаптер у системы появится доступ к сети и если у Вас, например, Windows 10, то эта ОС может загрузить «дрова» в автоматической режиме.
    Кроме того, поиск и установку драйверов можно произвести автоматически посредством таких программ, как DriverPack Solution, DriverHab, Driver Updater и других, что значительно удобнее. Программа формируют список необходимых драйверов на основе анализа системы с целью обеспечения ее оптимальной работы. Затем программа автоматически устанавливает эти драйвера.
  2. В случае переустановки операционной системы, которая может быть вызвана утратой ее функциональных возможностей или желанием пользователя.
  3. В случае обновления операционной системы с целью расширения ее функциональных возможностей по практической необходимости или желанию пользователя.
  4. В случае отсутствия либо неправильного функционирования отдельных драйверов при установленной операционной системе. При этом прежде всего следует просмотреть состояние уже инсталлированных драйверов в диспетчере устройств. Через данное меню можно осуществить и загрузку недостающих драйверов.

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

Источник

Контроллеры и драйверы

Каждое устройство ввода-вывода вычислительной системы – диск, принтер, монитор и т. п. – снабжено специализированным блоком управления, называемым контроллером. Контроллер взаимодействует с драйвером– системным программным модулем, предназначенным для управления данным устройством (рис. 2.5).

Рис. 2.5. Взаимодействие устройства ввода-вывода с операционной системой

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

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

Драйвер взаимодействует, с одной стороны, с модулями ядра операционной системы (модулями подсистемы ввода-вывода, модулями системных вызовов, модулями подсистемы управления процессами и памятью и т.д.), а с другой стороны – с контроллером внешних устройств. Поэтому существует два типа интерфейсов: интерфейс «драйвер – ядро» и интерфейс «драйвер – устройство».

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

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

Читайте также:  Сайт оборудования для клиник

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

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

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

· входит в состав ядра операционной системы, работая в привилегированном режиме;

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

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

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

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

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

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

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

Разделение на аппаратные и высокоуровневые драйверы можно продемонстрировать на примере подсистемы сетевых устройств. Аппаратными драйверами у них являются драйверы сетевых адаптеров, которые выполняют функции низкоуровневых канальных протоколов (Ethernet, Frame Relay, ATM и др.). Эти драйверы выполняют простые функции – организуют передачу кадров данных между компьютерами одной физической сети.

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

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

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

Для унификации представления различных файловых систем в подсистеме ввода-вывода может использоваться общий драйвер верхнего уровня, играющий роль диспетчера нескольких драйверов файловых систем. На рис. 2.6 в качестве примера показана структура драйверов дисковой подсистемы, реализованная в диспетчере VFS (Virtual File System), применяемом в операционных системах UNIX.

Рис. 2.6. Пример многослойной структуры драйверов дисковой подсистемы

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

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

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

Источник