Що таке драйвери і звідки вони взялися?

Дана стаття призначена для людей, яким цікаво як воно насправді влаштовано і чому. Сьогодні мова піде про драйвери.
Багато-багато років тому, коли дерева були великими, комп’ютери були монолітні, тобто були виконані технічно на одній платі. Уявіть собі коробку, в якій змонтовано кілька плат з мікросхемами, конденсаторами, трансформаторами. Все це переплетене купою дротів. Такі машини випускалися серійно та апгрейду не підлягали, бо для цього їх потрібно було перепоювати, а вміли це далеко не все.
Для таких комп’ютерів випускалося окремо під кожну модель: кожна програма точно знала, на якому комп’ютері, з яким набором інструкцій вона буде виконуватися. Тобто якщо програму потрібно було викликати звук – вона генерувала переривання, процесор передавав дані звукового пристрою і звук відтворювався. У той час тільки зароджувалося поняття про операційну систему, в сучасному її розумінні.
Ця ситуація кардинально змінилася з появою IBM-сумісних комп’ютерів. Для тих хто не знає, головна “фішка” цієї архітектури в тому, що комп’ютер перетворюється в своєрідний конструктор. Пристрої конструктивно розводяться по різних платам, розробляються інтерфейси для взаємодії пристроїв між собою. Саме на цьому етапі виникає поняття “пристрій” в сучасному його розумінні. З’являються процесор, материнська плата, звукова плата, відеокарта, дисковод.
Комп’ютер намагаються зробити максимально простим для складання і для апгрейда, все здається просто і логічно… АЛЕ! Як бути з програмним забезпеченням? Звідки програма, запущена на комп’ютері, дізнається з яким пристроєм вона працює? Може на комп’ютері встановлена потужна відеокарта, а може найпростіша? Припустимо ми пишемо текстовий редактор. За допомогою яких програмних засобів організовувати висновок графічного інтерфейсу? Можна, звичайно, “зашити” підтримку всіх існуючих на даний момент відеокарт, однак це багато роботи, плюс як бути, якщо відеокарта побачила світ уже після виходу програмного продукту? Випускати оновлення? Це ж скільки роботи для програмістів фірми, що випускає наш текстовий редактор? Абсолютно очевидно, що це тупиковий шлях.
Архітектори IBM знайшли більш елегантне рішення: API – Application Programm Interface (програмний інтерфейс додатків). Коротко суть ідеї ось у чому: придумується якийсь стандартний “мова”, на якому всі додатки повинні повідомляти команду пристрою, повертаючись до прикладу з відеокартою, придумується набір методів малювання, викликаючи які програма може малювати на екрані якісь примітиви: точку, лінію, прямокутник, текст. З цих методів розробники операційної системи складають цілі бібліотеки і безкоштовно розповсюджують для всіх ключових, на даний момент, мов програмування.
Виходить програмісту, який працює над текстовим редактором, для того щоб намалювати на екрані лінію, зовсім не обов’язково піклуватися про підтримку всіх відомих відеокарт, а достатньо просто написати фрагмент коду, на кшталт:
ДОДАТИ(“библиотека_видеопроцедур”);
НАРИСОВАТЬ_ЛИНИЮ(0,0,100,100);
Таким чином користувальницькі додатки навчилися спілкуватися з операційною системою на стандартній мові, проте це не вирішило проблеми безлічі пристроїв, що володіють різними можливостями. Як операційна система дізнається яким чином подавати команду саме цього пристрою? Ось тут-то і придумали драйвера. Ідея така: нехай операційна система подає спеціальною програмою сигнали на стандартному, для цієї ОС, мовою, а вже ця програма буде давати команди пристрою. Ця програма, драйвер, пишеться для кожного пристрою окремо, тому вона вміє з ним спілкуватися, пишеться і поширюється драйвер фірмою, яка розробила пристрій.
Слово driver можна перевести як “управлятель” в цьому контексті так називають програму, призначену для забезпечення взаємодії операційної системи і пристрої. Шлях, який сигнал проходить від моменту виникнення “бажання” додатка намалювати примітив, до моменту появи його на екрані монітора, можна символічно зобразити так:
1. Додаток викликає API-метод операційної системи.
2. Операційна система звертається до драйвера відеокарти і на стандартній мові дає інструкції з малювання примітиву.
3. Драйвер відеокарти, використовуючи низькорівневий, унікальний для цієї моделі відеокарти, мову, дає їй (відеокарти) інструкції для малювання примітиву.
4. Відеокарта перетворює цифровий сигнал від драйвера в електричний струм, що передається монітора.
5. Монітор, інтерпретуючи сигнал, що прийшов йому, малює зображення.
На перший погляд невиправдана складність, однак використання такої моделі дає безліч переваг, деякі з них, я описав вище.
Сподіваюся, після прочитання цієї статті, читачеві стало зрозуміло що таке драйвер, і чому він виник.
Автор: Kosmich
Оригінал статті: Цератопс.ру
Автор: Kosmich
Оригінал статті: Цератопс.ру