Там, де задіяна операційна система, програми не спілкуються з драйверами пристроїв, принаймні, безпосередньо. Програми розмовляють з абстракціями, які, невідомі їм, врешті-решт розмовляють з драйверами пристроїв через один або кілька шарів абстракції.
Я збираюся пропустити складності сучасних операційних систем і використовувати як приклад CP / M , операційну систему мікрокомп'ютера, розроблену 45 років тому. CP / M являв собою шар торта з трьома шарами:
Програма. Верхній шар - це програма, яка робить щось корисне (обробка тексту, гра в Space Invaders), виконуючи обчислення та введення / виведення. Скажімо, в якийсь момент програма хоче відобразити букву "A", яку бачить користувач. CP / M забезпечує абстракцію, відому як консоль , і саме там повинен шукати користувач, що взаємодіє з програмою. Звичайний спосіб відправити там персонаж - це кілька інструкцій зі складання:
LD C,2 ; Load 2 into register C
LD E,65 ; Load the ASCII code for 'A' into register E
CALL 5 ; Call CP/M's routine for getting things done
(Якщо ви не знайомі з ними, регістри можна розглядати як змінні, що живуть в процесорі.) Ми дістанемося до того, які магічні цифри 2
і 5
все про хвилину. У цьому випадку все, що програма знає, - це те, що є консоль і є спосіб записати її. Він нічого не знає і не піклується ні про що, крім того Це перша з двох абстракцій, які CP / M використовує для вводу / виводу.
BDOS . Адреса, 5
яку викликала програма, є точкою входу для наступного шару, Основної дискової операційної системи або BDOS . BDOS пропонує цілий ряд пронумерованих функцій , схожих на впорядкування номерів з меню ресторану. Ви скажете їй, що хочете вивести консоль, завантаживши C
регістр з номером функції ( 2
для виводу консолі) та E
регістром з символом, який потрібно надіслати. Виведення консолі - це дуже проста операція, і BDOS насправді не має нічого спільного з цим, крім виклику наступного шару.
BIOS. BIOS або Основна система вводу / виводу - це шар, де живе весь кодекс, специфічний для обладнання. У сучасних системах це вважатиметься набором драйверів пристроїв. Як і BDOS, BIOS забезпечує виклики для стандартного набору дуже примітивних операцій, які BDOS використовує для своєї справи. Одна з таких операцій називаєтьсяCONOUT
, яка піклується про те, щоб персонаж запросив програму написати два шари вище, до чого б це не робило обладнання. (На відміну від ПК, речі тоді ще не були однорідними. У кожної системи були різні способи зробити це.) Виведення консолі - це просте проходження BDOS, але для чогось більш складного, як створення файлу на диску, може знадобитися багато BIOS закликає маніпулювати медіа. Знову ж таки, оскільки BIOS має стандартний, абстрактний інтерфейс, BDOS завжди знає, як отримати те, що хоче, і не байдуже, як це робить BIOS.
Вам, напевно, цікаво, чому є дві абстракції (програма-до-BDOS та BDOS-до-BIOS) замість однієї. Відповідь полягає в тому, що CP / M та його BDOS можуть надаватися у двійковій формі виробникам комп'ютерів, вони записують власні BIOS з драйверами пристроїв для їх обладнання, з'єднують ці два разом і передають його як ОС для своїх систем. Це було великою справою, оскільки BDOS підтримувався однією організацією, а тому завжди був відомою кількістю програм для користувачів, що дозволяло запускати одні й ті самі програми на дуже широкому (на той час) різноманітному обладнанні. Ось чому існують операційні системи, і ми не просто пишемо програми, які прямо перекручують обладнання .
Все, що я описав тут, стосується і сучасних операційних систем. Наприклад, Unix абстрагує все як файли. Це дає програмує однаковий набір системних викликів ( open()
, write()
, close()
і т.д.) , щоб повідомити , чи є це диск або послідовний порт. Набір рішень та абстракцій набагато складніший, але він все-таки зводиться до вибору того, який код драйвера пристрою в нижньому шарі потрібно запустити, щоб операція відбулася.