Систематизація зовнішніх пристроїв та інтерфейс між базовою підсистемою вводу-виводу і драйверами

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

· символьні (клавіатура, модем, термінал і т. п.);

· блокові (магнітні і оптичні диски і стрічки, і т. д.);

· мережеві (мережеві карти);

· всі останні (таймери, графічні дисплеї, телевізійні пристрої, відеокамери і т. п.);

Таке ділення є вельми умовним. У одних операційних системах мережеві пристрої можуть не виділятися в окрему групу, в деяких інших – окремі групи складають звукові пристрої і відеопристрої і так далі Деякі групи у свою чергу можуть розбиватися на підгрупи: підгрупа жорстких дисків, підгрупа мишок, підгрупа принтерів. Нас такі деталі не цікавлять. Ми не ставимо перед собою мету здійснити систематизацію всіх можливих пристроїв, які можуть бути підключені до обчислювальної системи. Єдине, для чого нам знадобиться ця класифікація, так це для ілюстрації того положення, що пристрої можуть бути розділені на групи по виконуваних ними функціях, і для розуміння функцій драйверів, і інтерфейсу між ними і базовою підсистемою вводу-виводу.

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

До символьних пристроїв зазвичай відносяться пристрої вводу інформації, які спонтанно генерують вхідні дані: клавіатура, миша, модем, джойстик. До них же відносяться і пристрої виведення інформації, для яких характерне представлення даних у вигляді лінійного потоку: принтери, звукові карти і так далі За своєю природою символьні пристрої зазвичай уміють здійснювати дві загальні операції: ввести символ (байт) і вивести символ (байт) – get і put.

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

Драйвери символьних і блокових пристроїв повинні надавати базовій підсистемі вводу-виводу функції для здійснення описаних загальних операцій. Окрім загальних операцій, деякі пристрої можуть виконувати операції специфічні, властиві тільки ним – наприклад, звукові карти уміють збільшувати або зменшувати середню гучність звучання, дисплеї уміють змінювати свою роздільну здатність. Для виконання таких специфічних дій в інтерфейс між драйвером і базовою підсистемою вводу-виводу зазвичай входить ще одна функція, що дозволяє безпосередньо передавати драйверу пристрою довільну команду з довільними параметрами, що дозволяє задіювати будь-яку можливість драйвера без зміни інтерфейсу. У операційній системі Unix така функція отримала назву ioctl (від input-output control).

Окрім функцій read, write, seek (для блокових пристроїв), get, put (для символьних пристроїв) і ioctl, до складу інтерфейсу зазвичай включають ще наступні функції.

Функцію ініціалізації або повторної ініціалізації роботи драйвера і пристрою – open.

Функцію тимчасового завершення роботи з пристроєм (може, наприклад, викликати відключення пристрою) – close.

Функцію опиту стану пристрою (якщо по яких-небудь причинах робота з пристроєм проводиться методом опиту його стану, наприклад, в операційних системах Windows NT і Windows 9x така побудована робота з принтерами через паралельний порт) – poll.

Функцію останову драйвера, яка викликається при останові операційної системи або вивантаженні драйвера з пам'яті, halt.

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