Як влаштований комп'ютер? Перший і другий рівні - фізичний і віртуальний
У минулій статті була розглянута загальна ідея обчислювального пристрою - Об'єкта метафізичного світу. У цій ми розглянемо втілення комп'ютера у фізичному світі.
1-й рівень - фізичний
На фізичному рівні комп'ютер працює як набір пристроїв: процесор і пам'ять - основний пристрій, звукова плата - інше, принтер - третє, і т.д. Пристрої між собою обмінюються байтами через центральну шину. Причому, залежно від пристрою, один і той же байт буде викликати різні дії. Наприклад, принтер надрукує символ, а звукова карта видасть певний звук, ніяк не пов'язаний з символом з принтера.
Яку букву і який звук згенерують пристрої, залежатиме від прошивки, яка зберігається в ПЗУ - спеціальної пам'яті пристрою. Тут ми приходимо до розуміння, що в одному корпусі знаходиться відразу декілька пристроїв. Подібно до того, як людське тіло складається з органів, що виконують відокремлені функції.
У принтері, наприклад, є друкуюча головка, що виконує печать- знакогенератор, сопоставляющий кожному коду символу певний графічний знак-буферна пам'ять, що зберігає надійшли коди символів ... І так далі.
Звукова карта також складається з декількох пристроїв: мікшера каналів, MIDI-синтезатора, цифро-аналогового перетворювача, підсилювача вихідного сигналу, аналого-цифрового перетворювача мікрофонного входу та ін.
Кожен такий набір пристроїв управляється вбудованою в ПЗУ програмою - прошивкою. Саме вона визначає, що принтер друкуватиме російські літери, а не греческіе- а MIDI- синтезатор генерує звуки рояля, а не віолончелі. Відповідно, змінюючи прошивку, можна міняти деякі функції складеного пристрою або виправляти помилки в його роботі.
2-й рівень - віртуальний пристрій, драйвер
Якщо в готовому складному пристрої всі прості блоки пов'язані між собою жорстко і немає потреби визначати його склад кожного разу при включенні, то комп'ютер - справа інше.
Різні пристрої можуть бути підключені до комп'ютера і відключені від нього як в моменти його виключення, так і під час роботи. Заздалегідь невідомо, які пристрої і в який роз'єм будуть підключені. Цю невідомість дозволяють драйвери - вони описують, який пристрій куди підключено і як обробляти дані.
Для прикладу дуже спрощено можна уявити відтворення музики з CD на звукову карту так:
- Промінь лазера зчитує черговий шматок даних з поверхні диска і передає їх в порт CD;
- Драйвер CD зчитує дані з порту, відокремлює корисну інформацію від службової, передає «чисті дані» в пам'ять і дає вказівку вважати наступний шматок даних;
- Драйвер звукової карти бере дані з пам'яті, наділяє їх керуючими командами, нарізає на шматки і передає їх в звукову карту;
- За переданими даними звукова карта генерує звук.
Це дуже спрощений варіант зі зрозумілими пристроями.
А поки задумаємося ось про що: до комп'ютера, в принципі, може бути підключено кілька CD-приводів. Виникає проблема їх ідентифікації. А якщо на звукову карту спробують виводити звук кілька програм, то як бути в цьому випадку? Ось тут-то і приходить на допомогу віртуальний пристрій.
Віртуальний пристрій - Це програма, типу драйвера. Вона займає деяке проміжне місце між драйверами і «вирішує», який пристрій і як задіяти. Наприклад, звук з декількох джерел для однієї реальної звукової карти віртуальна замікшірует (змішає). Віртуальний принтер прийме дані для друку і буде зберігати їх, поки реальний принтер зайнятий. Якщо до комп'ютера підключено кілька однотипних принтерів, то пул (pool) принтерів розподілить, який документ на який принтер відправити так, щоб вони не перемішалися. І так далі. Тобто в рамках вищеописаної моделі визначить, яку обробку призвести над даними, переданими з одного драйвера в інший.
Звертаю увагу на те, що, починаючи з 2-го рівня, ми йдемо з фізичного рівня в програмний. Програма, як інформація, більш належить до світу ідей. І далі всі розглянуті рівні будуть програмними.