Какую букву и какой звук сгенерируют устройства, будет зависеть от прошивки, которая хранится в ПЗУ — специальной памяти устройства. Здесь мы приходим к пониманию, что в одном корпусе находится сразу несколько устройств. Подобно тому, как человеческое тело состоит из органов, выполняющих обособленные функции.
В принтере, например, есть печатающая головка, выполняющая печать; знакогенератор, сопоставляющий каждому коду символа определенный графический знак; буферная память, хранящая поступившие коды символов… И так далее.
Звуковая карта также состоит из нескольких устройств: микшера каналов, MIDI-синтезатора, цифро-аналогового преобразователя, усилителя выходного сигнала, аналого-цифрового преобразователя микрофонного входа и др.
Каждый такой набор устройств управляется встроенной в ПЗУ программой — прошивкой. Именно она определяет, что принтер будет печатать русские буквы, а не греческие; а MIDI- синтезатор генерирует звуки рояля, а не виолончели. Соответственно, меняя прошивку, можно менять некоторые функции составного устройства или исправлять ошибки в его работе.
2-й уровень — виртуальное устройство, драйвер
Если в готовом сложном устройстве все простые блоки связаны между собой жестко и нет нужды определять его состав каждый раз при включении, то компьютер — дело иное.
Разные устройства могут быть подключены к компьютеру и отключены от него как в моменты его выключения, так и во время работы. Заранее неизвестно, какие устройства и в какой разъем будут подключены. Эту неизвестность разрешают драйверы — они описывают, какое устройство куда подключено и как обрабатывать данные.
Для примера очень упрощенно можно представить воспроизведение музыки с CD на звуковую карту так:
— луч лазера считывает очередной кусок данных с поверхности диска и передает их в порт CD;
— драйвер CD считывает данные из порта, отделяет полезную информацию от служебной, передает «чистые данные» в память и дает указание считать следующий кусок данных;
— драйвер звуковой карты берет данные из памяти, наделяет их управляющими командами, нарезает на куски и передает их в звуковую карту;
— по переданным данным звуковая карта генерирует звук.
Это очень упрощенный вариант с понятными устройствами.
А пока задумаемся вот о чем: к компьютеру, в принципе, может быть подключено несколько CD-приводов. Возникает проблема их идентификации. А если на звуковую карту попытаются выводить звук несколько программ, то как быть в этом случае? Вот тут-то и приходит на помощь виртуальное устройство.
Виртуальное устройство — это программа, типа драйвера. Она занимает некоторое промежуточное место между драйверами и «решает», какое устройство и как задействовать. Например, звук из нескольких источников для одной реальной звуковой карты виртуальная замикширует (смешает). Виртуальный принтер примет данные для печати и будет хранить их, пока реальный принтер занят. Если к компьютеру подключено несколько однотипных принтеров, то пул (pool) принтеров распределит, какой документ на какой принтер отправить так, чтобы они не перемешались. И так далее. То есть в рамках вышеописанной модели определит, какую обработку произвести над данными, передаваемыми из одного драйвера в другой.
Обращаю внимание на то, что, начиная со 2-го уровня, мы уходим из физического уровня в программный. Программа, как информация, более относится к миру идей. И далее все рассматриваемые уровни будут программными.