Систематизация внешних устройств и интерфейс между базовой подсистемой ввода-вывода и драйверами

Устройства обычно принято условно разделять по преобладающему типу интерфейса на следующие виды:

  • символьные (клавиатура, модем, терминал и т. п.);
  • блочные (магнитные и оптические диски и ленты, и т. д.);
  • сетевые (сетевые карты);
  • все остальные (таймеры, графические дисплеи, телевизионные устройства, видеокамеры и т. п.);

К символьным устройствам обычно относятся устройства

- ввода информации, которые спонтанно генерируют входные данные: клавиатура, мышь, модем, джойстик;

- вывода информации, для которых характерно представление данных в виде линейного потока: принтеры, звуковые карты и т. д.

По своей природе символьные устройства обычно умеют совершать две общие операции: ввести символ (байт) и вывести символ (байт) – get и put.

Блочные устройства, такие как магнитные и оптические диски, ленты и т. п. Для них характерны операции чтения и записи блока информации – read и write, а также операция поиска требуемого блока информации – seek.

Драйверы символьных и блочных устройств должны предоставлять базовой подсистеме ввода-вывода функции для осуществления общих операций.

Помимо общих операций, некоторые устройства могут выполнять операции специфические, свойственные только им – например, звуковые карты умеют увеличивать или уменьшать среднюю громкость звучания, дисплеи умеют изменять свою разрешающую способность.

Для выполнения таких специфических действий в интерфейс между драйвером и базовой подсистемой ввода-вывода обычно входит еще одна функция, позволяющая непосредственно передавать драйверу устройства произвольную команду с произвольными параметрами, что позволяет задействовать любую возможность драйвера без изменения интерфейса. В Unix- это ioctl (от input-output control).

Помимо перечисленных функций в состав интерфейса обычно включают следующие:

· Функцию инициализации или повторной инициализации работы драйвера и устройства – open.

· Функцию временного завершения работы с устройством (может, например, вызывать отключение устройства) – close.

· Функцию опроса состояния устройства (если по каким-либо причинам работа с устройством производится методом опроса его состояния) – poll.

· Функцию остановки драйвера, которая вызывается при остановке операционной системы или выгрузке драйвера из памяти, halt.

Приведенные названия функций являются условными и могут меняться от одной операционной системы к другой, но действия, выполняемые драйверами, характерны для большинства операционных систем, и соответствующие функции присутствуют в интерфейсах к ним.