- •Введение
- •Подсистема ввода-вывода: общие принципы построения и работы
- •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
Функция обработки прерывания
Если внешнее устройство генерирует прерывания при наступлении определенных событий, например, прерывание при готовности новых данных или прерывание при завершении запрошенной операции ввода-вывода, то драйвер должен предоставлять системе соответствующую функцию обработки прерывания.
Поскольку UNIX является многозадачной системой, частный обработчик прерывания драйвера не может устанавливаться непосредственно на вектор прерывания, т.к. при этом не может гарантироваться корректное отслеживание приоритетов прерываний и не может гарантироваться вызов всех обработчиков прерывания, зарегистрированных различными драйверами устройств, разделяющими общее аппаратное прерывание.
Вектор прерывания ссылается на общесистемный обработчик прерывания, который запрещает прерывания с приоритетом меньшим или равным возникшему прерыванию, и вызывает частные обработчики драйверов как обычные функции.
Тем не менее, функция обработки прерывания драйвера выполняется в контексте прерывания, при запрещенных прерываниях меньшего или равного приоритета. Длительные действия обработчика прерывания драйвера могут существенно снизить производительность системы или привести к пропуску других прерываний. Кроме того, действия, которые могут привести к возникновению менее приоритетных прерываний, например, работа с виртуальной памятью, недопустимы в обработчиках прерываний.
Поэтому функция обработки прерывания должна завершаться как можно быстрее, использовать исключительно неподкачиваемую память и выполнять только критичные по времени операции с аппаратурой, оставляя всю остальную обработку вторичному обработчику, выполняемому как обычный процесс операционной системы.
Функция опроса устройства
Количество каналов прерываний, поддерживаемых процессором, является ограниченным, и хотя современные операционные системы допускают разделение прерывания несколькими устройствами, использования прерываний для некоторых медленных символьных устройств может быть невыгодным.
Для устройств, по каким-либо причинам не поддерживающих прерывания, в драйверах UNIX предусмотрена функция опроса устройства.
При необходимости, функция опроса устройства регистрируется драйвером в таблице коммутаторов символьных устройств, и вызывается системой по таймеру через точку входа d_poll коммутатора символьных устройств.
Так как драйвер должен быть достаточно универсальным и позволять использовать различные программно-аппаратные конфигурации компьютера, в реальных драйверах функция опроса обычно вызывает функцию обработки прерывания. Функция опроса вызывается системой на каждое прерывание аппаратного таймера (обычно 100 раз в секунду), но для сохранения высокого уровня производительности системы, функция опроса вызывает функцию обработки прерывания реже, например, на каждое десятое прерывание таймера.
Другие функции драйверов
Помимо рассмотренных выше функций, реальные драйверы могут предоставлять еще множество функций, расширяющих возможности устройства или системы в целом.
Например, для некоторых устройств может потребоваться возможность горячего (без перезапуска системы) подключения и отключения устройств. В этом случае необходимо предусмотреть в драйвере функцию оповещения драйвера о подключении или внезапном отключении устройства.
Сами драйверы удаляемых устройств могут быть динамически загружаемыми, и от таких драйверов требуется функция инициализации при загрузке и функция освобождения ресурсов при выгрузке драйвера.
Для повышения удобства или эффективности использования, некоторые драйверы могут отображать данные на виртуальное адресное пространства процесса, что требует введение в драйвер соответствующей функции, и т.п.