Драйвер – это программа/программный модуль, управляющий внешним устройством и содержащий весь зависимый от устройства код.
При реализации запроса драйвера он:
1. Преобразуется из абстрактной формы в конкретную.
2. Передается контроллеру записью в его регистр.
3. Принимается решение о блокировке драйвера.
Драйверы являются частью ядра системы, исполняются в привилегированном режиме и имеют доступ на запись с элементом данных программ и части ядра.
Для каждого класса устройств используется фиксированный набор операций (команд). Базовый набор команд может быть расширен при помощи:
1. Интерпретация данных в пользовательскую программу
2. Использование терминальной БД.
3. Использование фильтров – заключается в использовании промежуточного языка команд интерпретируемого фильтром.
Обработку запроса можно разделить на три фазы:
1. Фаза предобработки:
a. Проверка допустимости параметров
b. Копирование или отображение данных из пользовательского АП в системное
c. Преобразование выводимых данных
d. Обращение к процедурам драйвера и передача запроса
2. Исполнение запросов
3. Постобработка
a. Анализ результата операции
b. Действие по восстановлению в случае неуспеха
c. Копирование или отображение данных в пользовательское АП (преобразование данных)
d. Оповещение программы о завершении запроса
Система ввода/вывода UNIX
Включает в себя драйвер внешних устройств и средство буферизации (буферный пул и комплекс программ по управлению им). Буферы располагаются в области ядра, размер каждого соответствует размеру блоку данных диска. С каждым буфером связана структура данных (заголовок), содержащая:
1. Данные о состояния буфера (занят/свободен, чтения/запись, признак отложенной записи, адрес, ошибки ввода/вывода, ссылка на следующий в очереди к устройству).
2. Данные об устройстве (тип устройства, номер устройства, номер блока на устройстве).
Синхронная запись инициируется функцией bwrite и начинает немедленный обмен данными с физическими устройствами. В процессе может быть предусмотрена собственная реакция на ошибки.
Асинхронная запись инициируется функцией bawrite и так же начинает немедленный обмен данными с устройствами. Но ошибки ввода\вывода переданы в процесс быть не могут.
Отложенная запись инициируется функцией bdwrite, передача данных из системного буфера не производится, а в его заголовке делается отметка, что буфер заполнен и может быть выгружен.