Драйвери пристроїв в UNIX

Драйвери в ОС UNIX досить точно відповідають стандартній схемі драйвера, наведеною в п. 2.7. Тим не менше, зважаючи істотних відмінностей у роботі з символьними і з блоковими пристроями, в UNIX розрізняються два основних типи драйверів: символьні та блочні.

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

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

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

До найбільш важливих функцій драйвера ставляться наступні.

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

· Закриття пристрої - операція, протилежна відкриттю.

· Обробка переривання - виконує введення або виведення чергової порції даних, коли пристрій переходить в стан готовності.

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

· Читання даних з пристрою.

· Запис даних на пристрій.

· Виклик стратегії. Це спосіб виконання операцій введення / виводу, характерний для блокових пристроїв. При цьому запит може бути поставлений в чергу. Запит в ряді випадків може бути задоволений шляхом звернення до дискового кешу (див.

п. 2.6.6), без виконання читання або запису на пристрій.

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