Для чого потрібний драйвер?

Драйвер пристрою – це така програма керування кожним пристроєм вводу-виводу, підключеним до комп'ютера. Контролер кожного пристрою має набір регістрів, щоб давати керованому пристрою команди і зчитувати його стан. Наприклад, програма управління диском повинна знати про сектори, доріжки, циліндри, головки, їх переміщення в часі.

Драйвер пристрою – це така програма управління кожним пристроєм вводу-виводу, підключеним до комп'ютера

Драйвер зазвичай пишеться виробником і поширюється разом із пристроєм. Оскільки для кожної операційної системи потрібні спеціальні драйвери, виробники пристроїв зазвичай постачають драйвери для кількох найбільш популярних операційних систем. Кожен драйвер пристрою підтримує один тип або максимум клас близьких пристроїв.

Щоб отримати доступ до апаратної частини пристрою, тобто до регістрів контролера драйвер пристрою повинен бути частиною ядра операційної системи. Але можна створити і драйвер, що працює в просторі користувача. Це дозволило б ізолювати ядро від драйверів, а драйвери один від одного.

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

У більшості операційних систем визначено два стандартні інтерфейси, один з яких повинен підтримувати всі блокові драйвери, а другий - всі символьні.

Драйвер пристрою виконує кілька функцій:

  1. обробка абстрактних запитів читання та запису незалежного від пристроїв та розміщеного над ними програмного забезпечення;
  2. ініціалізацію пристрою;
  3. управління енергоспоживанням та реєстрацією подій;
  4. перевірка вхідних параметрів. Якщо вони не відповідають певним критеріям, драйвер повертає помилку.
  5. перевірку використання пристрою на даний момент. Якщо пристрій зайнятий, запит може бути поставлений у чергу. Якщо пристрій вільний, перевіряється його стан. Як тільки пристрій готовий, може починатися власне керування – видача серії команд. Саме в драйвері і визначається послідовність команд, залежно від того, що має бути зроблено. Визначившись із командами, драйвер починає записувати їх у регістри контролера пристрою.

Після того, як драйвер передав усі команди контролеру, ситуація може розвиватися за двома сценаріями. У багатьох випадках він повинен чекати, поки контролер не виконає для нього певну роботу, тому він блокується, поки переривання від пристрою його не розблокує. В інших випадках операція завершується без затримок, і драйверу не потрібно блокуватися.

Після завершення операції драйвер повинен перевірити, чи операція завершилася без помилок. Якщо все гаразд, драйверу пристрою, можливо, доведеться передати дані програмного забезпечення. Потім він повертає деяку інформацію програмі, що викликає, про завершення операції.

Драйверам не дозволяється звертатися до системних викликів, але часто буває необхідно взаємодіяти з іншим ядром. Для цього їм можна викликати деякі системні процедури, наприклад, для виділення їм апаратно фіксованих сторінок пам'яті як буфери, а також для повернення цих сторінок назад ядру операційної системи.

Інструменти