ТОП 10:

Символьні, блокові та мережні драйвери пристроїв



Ще одна важлива класифікація драйверів уперше з'явилася в UNIX і відтоді її широко використовують, оскільки вона добре відображає специфіку різних при­строїв. Пристрої та драйвери відповідно до цієї класифікації розділяються на три категорії: блокові або блок-орієнтовані (block-oriented, block), символьні або байт-орієнтовані (character-oriented, character) і мережні (network).

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

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

♦ Окремою категорією є мережні пристрої, які надаються прикладним програ­мам у вигляді мережних інтерфейсів зі своїм набором допустимих операцій, які відображають специфіку мережного введення-виведення (наприклад, не­надійність зв'язку). Деякі ОС реалізують у вигляді мережних драйверів не тільки засоби доступу до пристроїв, але й мережні протоколи.

 

Відокремлення механізму від політики за допомогою

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

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

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

 

Способи виконання операцій введення-виведення

Зовнішній пристрій взаємодіє із комп'ютерною системою через точку зв'язку, яку називають портом (port). Якщо кілька пристроїв з'єднані між собою і можуть об­мінюватися повідомленнями відповідно до заздалегідь визначеного протоколу, то кажуть, що вони використовують шину (bus).

Як відомо, пристрої зв'язуються із комп'ютером через контролери. Є два базо­ві способи зв'язку із контролером: через порт введення-виведення (I/O port) і ві­дображувану пам'ять (memory-mapped I/O). У першому випадку дані пересила­ють за допомогою спеціальних інструкцій, у другому — робота із певною ділян­кою пам'яті спричиняє взаємодію із контролером.

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

Спілкування із контролером через порт звичайно зводиться до використання чотирьох регістрів. Команди записують у керуючий регістр (control), дані — у ре­гістр виведення (data-out), інформація про стан контролера може бути зчитана із регістра статусу (status), дані від контролера — із регістра введення (data-in). Ядро ОС має реєструвати всі порти введення-виведення і діапазони відображува­ної пам'яті, а також інформацію про використання пристроєм порту і діапазону.

Опитування пристроїв

Припустимо, що контролер може повідомити, що він зайнятий, увімкнувши біт busy регістра статусу. Застосування повідомляє про команду записування вми­канням біта wr і te командного регістра, а про те, що є команда — за допомогою біта сгеасіу того самого регістра. Послідовність кроків базового протоколу взаємодії з контролером (квітування, handshaking), наведено нижче.

1. Застосування у циклі зчитує біт busy, поки він не буде вимкнутий.

2. Застосування вмикає біт write керуючого регістра і відсилає байт у регістр ви­ведення.

3. Застосування вмикає біт сгеасіу.

4. Коли контролер зауважує, що біт сгеасіу увімкнутий, то вмикає біт busy.

5. Контролер зчитує значення керуючого регістра і бачить команду write. Після цього він зчитує регістр виведення, отримує із нього байт і передає пристрою.

6. Контролер очищує біти сгеасіу і busy, показуючи, що операція завершена.

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

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







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

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