
- •Введение
- •Подсистема ввода-вывода: общие принципы построения и работы
- •1.1. Взаимодействие процессора с внешними устройствами
- •1.2. Прямой доступ к памяти
- •Драйверы
- •Роль драйверов в операционной системе
- •Взаимодействие драйверов с компонентами операционной системы и пользовательскими программами
- •Стек обработки запросов ввода-вывода
- •Основы организации и работы подсистемы ввода-вывода unix
- •2.1. Драйверы в операционных системах семейства unix
- •Стратегическая функция драйвера блочного устройства
- •Функция обработки прерывания
- •Функция опроса устройства
- •Другие функции драйверов
- •Буферизация в символьных драйверах
- •Терминальный драйвер
- •2.2. Потоковая подсистема ввода-вывода в unix
- •Архитектура и принципы работы подсистемы streams
- •Архитектура и работа модулей потока
- •Функция модуля put
- •Функция модуля service
- •Структура сообщения
- •Основы организации и работы подсистемы ввода-вывода windows
- •3.1. Классификаций драйверов Windows
- •Драйверы пользовательского режима
- •Драйверы режима ядра
- •3.2. Объекты подсистемы ввода-вывода
- •Объект файл
- •Объект устройство
- •Объект драйвер
- •Объект пакет запроса ввода-вывода
- •Объект блок стека запросов ввода-вывода
- •3.3. Передача данных между пользовательским адресным пространством и пространством ядра
- •Буферизированный ввод-вывод
- •Прямой ввод-вывод
- •Ввод-вывод под управлением драйвера
- •3.4. Обработка запросов ввода-вывода
- •Прохождение запроса ввода-вывода вниз через стек обработки запросов ввода-вывода
- •Обработка прерывания по завершению ввода-вывода
- •Обратное прохождение запроса ввода-вывода вверх через стек запросов ввода-вывода
- •3.5. Буферизация запросов ввода-вывода
- •Системная очередь запросов
- •Очереди запросов под управлением драйвера
- •3.6. Диспетчер Plug-And-Play, установка и запуск драйверов
- •3.7. Диспетчер электропитания
- •3.8. Среда сетевых драйверов ndis
- •Драйверы среды ndis Минипорт-драйверы сетевых адаптеров
- •Драйверы протоколов
- •Промежуточные драйверы
- •Структура ndis пакета
- •Запросы к сетевым адаптерам
- •3.9. Порты завершения ввода-вывода
- •Заключение
- •Библиографический список
- •Оглавление
- •394026 Воронеж, Московский просп., 14
Драйверы
Ключевыми компонентами подсистемы ввода-вывода являются драйверы. Рассмотрим роль драйверов в операционной системе, а также основы архитектуры драйверов и общие принципы их взаимодействия с компонентами операционной системы и пользовательскими программами.
Роль драйверов в операционной системе
Драйвер – это программный модуль, осуществляющий непосредственное управление внешним устройством. Необходимость использования драйверов связанна с большим разнообразием аппаратной реализации, наборов команд и управляющих регистров даже у однотипных устройств, выполняющих, в общем-то, одинаковые функции.
Согласно современным требованиям, прикладные программы должны быть независимы от особенностей аппаратной реализации внешних устройств и должны выполняться на любой аппаратной платформе, поддерживаемой операционной системой в рамках заданной архитектуры процессора. Операционная система изолирует прикладные программы от аппаратуры, скрывая детали аппаратной реализации. При этом сама операционная система остается аппаратно зависимой. Даже если она по внешнему виду пользовательского интерфейса неотличима на различных аппаратных платформах, она все равно содержит некоторое количество компонентов, ориентированных исключительно на конкретную аппаратную платформу.
Набор существующих аппаратных платформ и периферийных устройств настолько разнообразен, что учесть все варианты в коде операционной системы невозможно. Более того, постоянно разрабатываются и появляются на рынке новые периферийные устройства, появление которых нельзя предвидеть на этапе проектирования операционной системы.
Описанные проблемы стали очевидными уже в первых поколениях операционных систем. Решением стало использование подключаемых программных модулей – драйверов устройств. Драйверы представляют собой компоненты операционной системы, набор которых может быть изменен без модификации базового кода операционной системы. При этом многие современные операционные системы могут динамически подключать и отключать драйверы во время работы, без перезагрузки операционной системы.
Драйвер представляет операционной системе библиотеку функций, которые вызываются операционной системой для выполнения типовых действий с устройством: передача или получение данных, инициализация устройства, завершение работы устройства и т.п. Функции драйвера реализуют стандартизированный для данной операционной системы интерфейс взаимодействия с устройством. Драйверы транслируют высокоуровневые аппаратно независимые запросы ввода-вывода, получаемые от операционной системы или прикладных программ, в специфические для конкретного внешнего устройства низкоуровневые команды, передаваемые в регистры устройства. При смене внешнего устройства необходимо задействовать соответствующий этому устройству драйвер, при этом интерфейс верхнего уровня, определяемый набором функций драйвера, будет сохранен, в результате чего прикладные программы и компоненты операционной системы смогут без изменений работать с новым устройством.
В большинстве случаев драйверы разрабатываются компаниями производителями внешних устройств и поставляются в комплекте с этими устройствами.
Драйверы позволяют операционной системе эффективно решить две ключевые задачи:
реализация аппаратно независимого интерфейса для доступа к внешним устройствам;
организация очереди запросов для одновременного доступа множества процессов к одному и тому же устройству в многозадачных операционных системах.