Категорії драйверів пристроїв 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Категорії драйверів пристроїв



Windows ХР дає змогу використати кілька категорій драйверів режиму ядра. Найбільше поширення останнім часом набули WDM-драйвери [35]. На них зупи­нимося докладніше.

Такі драйвери мають відповідати вимогам стандарту, який називають Win­dows Driver Model (WDM). Його розроблено для драйверів, використовуваних у лінії Windows ХР та останніх версіях Consumer Windows (Windows 98/Ме). Звичайно для переносу таких драйверів між системами достатньо їх перекомпі-лювати, а деякі з них сумісні на рівні двійкового коду. Розрізняють три типи WDM-драйверів.

· Драйвери шини (bus drivers) керують логічною або фізичною шиною (наприк­лад, PCI, USB, ISA). Такий драйвер відповідає за виявлення пристроїв, з'єд­наних із певною шиною.

· Функціональні драйвери (function drivers) керують пристроєм конкретного ти­пу. Драйвери шини надають пристрої функціональним драйверам. Звичайно тільки функціональний драйвер працює з апаратним забезпеченням прист­рою, саме він дає змогу системі використати пристрій.

· Драйвери-фільтри (filter drivers) доповнюють або змінюють поведінку інших драйверів.

Насправді жоден драйвер, відповідно до стандарту WDM, не може цілковито відповідати за керування пристроєм, усі вони доповнюють один одного.

Крім WDM-драйверів, у Windows ХР підтримують такі категорії драйверів ядра: файлових систем, відповідальні за перетворення запитів введення-виведен­ня, що використовують файли, у запити до низькорівневих драйверів пристроїв (наприклад, драйвера жорсткого диска); відображення (display drivers) підсисте­ми Win32, які перетворюють незалежні від пристрою запити GDI-підсистеми в команди графічного адаптера або у прямі операції записування у відеопам'ять; успадковані, розроблені для Windows NT.

На доповнення до драйверів ядра Windows ХР підтримує драйвери режиму користувача. До них, зокрема, належать драйвери принтерів, які перетворюють незалежні від пристрою запити GDI-підсистеми в команди відповідного принте­ра і передають ці команди WDM-драйверу (наприклад, драйверу паралельного порту або універсальному драйверу USB-принтера).

Підтримка конкретного пристрою може бути розділена між кількома драйве­рами. Залежно від рівня цієї підтримки виділяються додаткові категорії драйверів.

· Клас-драйвери (class drivers). Реалізують інтерфейс обробки запитів введення-виведення, специфічних для конкретного класу пристроїв, наприклад драйве­ри дисків або пристроїв CD-ROM.

· Порт-драйвери (port drivers). Реалізують інтерфейс обробки запитів введення-виведення, специфічних для певного класу портів введення-виведення; зокре­ма до цієї категорії належить драйвер підтримки SCSI.

· Мініпорт-драйвери (miniport drivers). Керують реальними пристроями (на­приклад, SCSI-адаптерами конкретного типу) і реалізують інтерфейс, нада­ний клас-драйверами і порт-драйверами.

Структура драйвера пристрою

Розглянемо структуру драйвера пристрою. Вона багато в чому подібна до структури, прийнятої в Linux. Можна виділити основні процедури драйвера.

· Процедура ініціалізації. Звичайно називається DriverEntry, її виконує мене­джер введення-виведення під час завантаження драйвера у систему, і зазви­чай вона здійснює глобальну ініціалізацію структур даних драйвера.

· Процедура додавання пристрою (add-device routine). Вона має бути реалізова­на будь-яким драйвером, що підтримує специфікацію Plug and Play. Менеджер Plug and Play викликає цю процедуру, якщо знаходить пристрій, за який відпо­відає драйвер. У ній звичайно створюють структуру даних, відображувану пристроєм (об'єкт пристрою).

· Набір процедур диспетчеризації (dispatch routines), аналогічних функціям фай­лових операцій у Linux. Ці процедури реалізують дії, допустимі для пристрою (відкриття, закриття, читання, записування тощо). Саме їх викликає менеджер введення-виведення під час виконання запиту.

· Процедура обробки переривання (interrupt service routine, ISR) аналогічна коду верхньої половини оброблювача переривання для Linux. Вона є оброблюва­чем переривання від пристрою, виконується із високим пріоритетом; основ­не її завдання - запланувати для виконання нижню половину оброблювача (DPC-процедуру).

· Процедура відкладеної обробки переривання, DPC-процедура (DPC routine), відповідає коду нижньої половини оброблювача переривання в Linux. Вона ви­конує більшу частину роботи, пов'язаної з обробкою переривання, після чого сигналізує про необхідність переходу до коду завершення введення-виведення. Особливості виклику цих процедур під час виконання операції введення-ви­ведення наведено нижче.

 

 

5.

У Windows ХР на внутрішньому рівні всі операції вве­дення-виведення, відображені пакетами IRP, є асинхронними. Будь-яку опера­цію синхронного введення-виведення відображають у вигляді сукупності асин­хронної операції й операції очікування.

Обробка запиту синхронного введення-виведення до однорівневого драйвера зводиться до такого:

1. Запит введення-виведення перехоплює динамічна бібліотека підсистеми (на­приклад, підсистема Win32 перехоплює виклик функції WriteFile9 ()).

2. Динамічна бібліотека підсистеми викликає внутрішню функцію NtWriteFilе(), що звертається до менеджера введення-виведення.

3. Менеджер введення-виведення розмішує у пам'яті пакет IRP, що описує запит, і відсилає його відповідному драйверу пристрою викликом функції IoCallDriver ().

4. Подальші кроки аналогічні до описаних для Linux.

5. Драйвер витягає дані із пакета IRP, передає їх контролеру пристрою і дає йому команду почати введення-виведення.

6. Драйвер викликає функцію очікування, поточний потік при цьому призупиня­ють. Для асинхронного введення-виведення цей етап не виконують.

7. Коли пристрій завершує операцію, контролер генерує переривання, яке обслу­говує драйвер.

8. Драйвер викликає функцію IoCompleteRequest() для тoгo щоб повідомити мене­джерові введення-виведення про завершення ним обробки запиту, заданого пакетом IRP, після чого виконують код завершення операції.

На двох останніх етапах зупинимося окремо.

Обслуговування переривань

Принципи обробки переривань введення-виведення у Windows ХР майже не від­різняються від розглянутих для Linux. У разі виникнення переривання апаратура викликає оброблювач переривання для даного пристрою. При цьому безпосеред­ній оброблювач (верхня половина) звичайно залишається на рівні переривань пристрою тільки для того щоб поставити на виконання нижню половину (DPC) і завершитися. Основну роботу здійснює, як і в Linux, нижня половина, що вико­нується із меншим пріоритетом (на рівні переривань DPC/dispatch). Після завер­шення обробки драйвер просить менеджера введення-виведення завершити оброб­ку запиту і вилучити із системи пакет IRP.



Поделиться:


Последнее изменение этой страницы: 2017-02-05; просмотров: 273; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.42.196 (0.005 с.)