Систематизация внешних устройств и интерфейс между базовой подсистемой ввода-вывода и драйверами
Система типов устройств является далеко не полной и не строго выдержанной. Устройства принято разделять по преобладающему типу интерфейса на следующие типы:
а) символьные (клавиатура, модем, терминал и т.п.);
б) блочные (магнитные и оптические диски и ленты, и т.д.);
в) сетевые (сетевые карты);
г) все остальные (таймеры, графические дисплеи, телевизионные устройства, видеокамеры и т.п.);
Следует отметить, что такое деление является весьма условным. В некоторых операционных системах сетевые устройства могут не выделяться в отдельную группу, в некоторых – отдельные группы составляют звуковые устройства и видеоустройства и т.д. Некоторые группы в свою очередь могут разбиваться на подгруппы: подгруппа жестких дисков, подгруппа мышей, подгруппа принтеров.
Ограничимся рассмотрением только двух групп устройств: символьных и блочных. Символьные устройства – это устройства, которые умеют передавать данные только последовательно байт за байтом, а блочные устройства – это устройства, которые могут передавать блок байт как единое целое.
К символьным устройствам обычно относятся устройства ввода информации, которые спонтанно, т.е. во времена непредсказуемые КС, генерируют входные данные: клавиатура, мышь, модем, джойстик. К ним же относятся и устройства вывода информации, для которых характерно представление данных в виде линейного потока: принтеры, звуковые карты и т.д.
К блочным устройствам обычно относятся магнитные и оптические диски, ленты и др.
Драйвера символьных и блочных устройств должны предоставлять базовой подсистеме ввода-вывода функции для осуществления операций ввода-вывода.
Обычно в состав интерфейса между базовой подсистемой ввода-вывода и драйверами включают следующие функции:
а) функция чтения блока информации (для блочных устройств) – read,
б) функция записи блока информации (для блочных устройств) –write,
в) функция поиска требуемого блока информации (для блочных устройств) – seek.
г) функция ввода символа (байта) (для символьных устройств) – get.
д) функция вывода символа (байта) (для символьных устройств) – put.
е) функция для специфических операций, позволяющая непосредственно передать драйверу устройства произвольную команду с произвольными параметрами (например, звуковые карты умеют увеличивать или уменьшать среднюю громкость звучания, дисплеи умеют изменять свою разрешающую способность) – ioctl (input-output control).
ж) функцию инициализации или повторной инициализации работы драйвера и устройства – open;
з) функцию временного завершения работы с устройством (может, например, вызывать отключение устройства) – close;
и) функцию опроса состояния устройства (если по каким-либо причинам работа с устройством производится методом опроса его состояния – например, в операционных системах Windows так построена работа с принтерами через параллельный порт) – poll;
к) функцию останова драйвера, которая вызывается при останове операционной системы или выгрузке драйвера из памяти, - halt.
Приведенные выше названия функций, конечно, являются условными и могут меняться от одной операционной системы к другой, но действия, выполняемые драйверами, характерны для большинства операционных систем, и соответствующие функции присутствуют в интерфейсах к ним.