Управление вводом - выводом

Содержание

Слайд 2

Функции подсистемы ввода-вывода
Принципы организации ввода-вывода
Буферизация
Ввод и вывод в ОС UNIX
Ввод и

Функции подсистемы ввода-вывода Принципы организации ввода-вывода Буферизация Ввод и вывод в ОС
вывод Windows 2000

Слайд 3

Функции подсистемы ввода-вывода

Организация параллельной работы устройств ввода-вывода и процессора
Согласование скоростей обмена и

Функции подсистемы ввода-вывода Организация параллельной работы устройств ввода-вывода и процессора Согласование скоростей
кэширование данных
Разделение устройств между процессами
Обеспечение удобного логического интерфейса между устройствами и остальной частью системы
Поддержка широкого спектра драйверов с возможностью простого включения в систему нового драйвера
Динамическая загрузка и выгрузка драйверов
Поддержка нескольких файловых систем
Поддержка синхронных и асинхронных операций ввода-вывода

Слайд 4

Принципы организации ввода-вывода

Синхронный обмен
Обмен по запросу
Обмен с ожиданием готовности
Асинхронный обмен
Прямой доступ к

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

Операция

да

нет

Слайд 5

Буферизация

Операционная система

Буфер

Ввод

Процесс

Буфер

Буфер

Буферизация Операционная система Буфер Ввод Процесс Буфер Буфер

Слайд 6

Ввод и вывод в ОС UNIX

Типы драйверов
Символьные драйверы
Блочные драйверы
Драйверы низкого уровня
Драйверы псевдоустройств

Ввод и вывод в ОС UNIX Типы драйверов Символьные драйверы Блочные драйверы
(/dev/kmem, /dev/ksyms, /dev/mem, /dev/null, /dev/zero)
Адресация драйвера
Старший номер – major number
Младший номер – minor number
Коммутаторы устройств – bdevsw и cdevsw

Слайд 7

Файловая подсистема

Устройства

Драйверы

Файловая подсистема Устройства Драйверы

Слайд 8

Коммутатор устройств

Драйвер

d_open()

d_close()

d_read()

d_write()

. . . . . .. .

Старшее число

xx_open()

{ .

Коммутатор устройств Драйвер d_open() d_close() d_read() d_write() . . . . .
. . . . . . . . . }

xx_read()
{. . . . . .. . . . }

Устройство

Слайд 9

Точки входа

xxopen() – открытие устройства
xxclose() – закрытие устройства
xxread() – чтение данных для

Точки входа xxopen() – открытие устройства xxclose() – закрытие устройства xxread() –
символьного устройства
xxwrite() – запись данных для символьного устройства
xxioctl() – управление символьным устройством
xxintr() – обработка прерываний
xxsrategy() – общая точка входа для операций блочного ввода-вывода, ввод-вывод инициируются прерываниями

Слайд 12

Ввод и вывод Windows 2000

Диспетчер ввода-вывода

Диспетчер кэша

Драйверы файловой системы

Драйверы сети

Драйверы аппаратуры

Ввод и вывод Windows 2000 Диспетчер ввода-вывода Диспетчер кэша Драйверы файловой системы Драйверы сети Драйверы аппаратуры

Слайд 13

Основные модули

Диспетчер кэша. Управляет кэшированием всей подсистемы ввода-вывода.
Отложенная запись. Записи обновляются только

Основные модули Диспетчер кэша. Управляет кэшированием всей подсистемы ввода-вывода. Отложенная запись. Записи
в кэше. На диск записывается только последняя версия обновления.
Отложенное подтверждение. Работа с транзакциями.
Драйверы файловой системы. Работа с томами.
Драйверы сети. Интегрированные сетевые возможности и поддержка распределенных приложений.
Драйверы аппаратуры. Работа с регистрами периферийных устройств.

Слайд 14

Режимы ввода-вывода

Асинхронный режим – приложение инициирует операцию и продолжает работу. Способы оповещения

Режимы ввода-вывода Асинхронный режим – приложение инициирует операцию и продолжает работу. Способы
о завершении.
Сигнал объекту устройства ядра.
Сигнал объекту события ядра.
Оповещение о вводе-выводе.
Порты завершения ввода-вывода
Синхронный режим – приложение блокируется до завершения операции.

Слайд 15

Типы драйверов (WDM)

Драйверы пользовательского режима (UMD)
Драйверы виртуальных устройств (VDD)
Драйверы принтеров
Драйверы режима ядра

Типы драйверов (WDM) Драйверы пользовательского режима (UMD) Драйверы виртуальных устройств (VDD) Драйверы
(KMD)
Драйверы файловой системы
Унаследованные драйверы
Драйверы видеоадаптеров
Драйверы потоковых устройств
WDM - драйверы

Слайд 16

Уровни драйверов

Уровни типа драйверов
Шинные драйверы
Фильтр – драйверы
Функциональные драйверы
Фильтр – драйверы
Фильтр-драйверы шины
Фильтр-драйверы устройства

Уровни драйверов Уровни типа драйверов Шинные драйверы Фильтр – драйверы Функциональные драйверы
и классовый фильтр-драйвер
Функциональный драйвер
Вышестоящие фильтр-драйверы устройства и классовый фильтр-драйвер

Слайд 17

Компоненты подсистемы ввода-вывода

Приложения

Windows сервисы

Службы WMI

Диспетчер PnP пользовательского режима

Процедуры WDM WMI

Диспетчер PnP

Диспетчер электропитания

Диспетчер

Компоненты подсистемы ввода-вывода Приложения Windows сервисы Службы WMI Диспетчер PnP пользовательского режима
ввода-вывода

Подсистема ввода-вывода

Драйверы

HAL

Пользовательский режим

Слайд 18

Базовая схема обработки запроса ввода-вывода

API пользовательского режима

Системные сервисы ввода-вывода (Ntxxx)

Диспетчер ввода-вывода (IOxxx)

Драйверы

Базовая схема обработки запроса ввода-вывода API пользовательского режима Системные сервисы ввода-вывода (Ntxxx)
устройств режима ядра

HAL функции доступа к устройствам ввода-вывода

Функции поддержки драйверов (IO, Ex, Ke, Mm, Hal, FsRtl и др.)

Слайд 19

Основные процедуры драйвера

Процедуры диспетчеризации

Процедура добавления устройства

Инициализирующая процедура

Процедура инициализации ввода-вывода

Процедура обслуживания прерываний

DPC- процедура

Подсистема

Основные процедуры драйвера Процедуры диспетчеризации Процедура добавления устройства Инициализирующая процедура Процедура инициализации
ввода-вывода

Слайд 20

Объект «драйвер»

Номер функции 1

Номер функции 2

Номер функции n

Управление устройством

Инициализация ввода-вывода

Выгрузка драйвера

Отмена

Чтение

Запись

Объект «драйвер» Номер функции 1 Номер функции 2 Номер функции n Управление

Слайд 21

NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath);
{ DriverObject->DriverUnload = AddDevice;
DriverObject->DriverExtension->AddDevice =

NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath); { DriverObject->DriverUnload = AddDevice; DriverObject->DriverExtension->AddDevice
AddDevice;
DriverObject->MajorFunction[IRP_MJ_PNP] = DispatchPnP;
DriverObject-> MajorFunction[IRP_MJ_POWER] = DispatchPower;
. . . . . . . . . . .
return STATUS_SUCCESS;
}
void XxxUnload(IN PDRIVER_OBJECT DriverObject);

Слайд 22

NTSTATUS XxxAddDevice(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT PhisicalDeviceObject);

Основные задачи функции
Вызывается функция IoCreateDevice
Регистрируются один

NTSTATUS XxxAddDevice(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT PhisicalDeviceObject); Основные задачи функции Вызывается функция
или несколько интерфейсов устройств
Инициируется объект расширения устройства и поля Flags объекта устройства
Вызывается IoAttachDeviceToDeviceStack для включения нового устройства PDEVICE_OBJECT IoAttachDeviceToDeviceStack( IN PDEVICE_OBJECT SourceDevice, IN PDEVICE_OBJECT TargetDevice);

Слайд 23

Недостатки WDM

Сложность написания драйверов
Большое количество разных моделей минипортов
Большинство драйверов могут выполняться только

Недостатки WDM Сложность написания драйверов Большое количество разных моделей минипортов Большинство драйверов
в режиме ядра
Обилие различных драйверных моделей приводит к трудности при тестировании и верификации кода драйверов

Слайд 24

Цели WDF

Простота написания драйверов и гибкость для быстрой адаптации к новым возможностям

Цели WDF Простота написания драйверов и гибкость для быстрой адаптации к новым
системы
Драйверная модель не должна зависеть от основных компонентов ОС
Драйверная модель должна обеспечивать, чтобы один исполняемый файл драйвера работал на разных версиях ОС
Драйверная модель должна быть расширяемой
Драйверная модель должна позволять большинству драйверов работать в пользовательском режиме
Драйверная модель должна поддерживать написание драйверов на языке высокого уровня

Слайд 25

Объекты KMDF

WDFDRIVER – объект драйвера
WDFDEVICE – объект устройства
WDFQUEUE – очередь запросов ввода-вывода
WDFINTERRUPT

Объекты KMDF WDFDRIVER – объект драйвера WDFDEVICE – объект устройства WDFQUEUE –
– представляет ресурсы прерывания
WDFREQUEST – запрос ввода-вывода
WDFMEMORY – буфер для запроса ввода вывода

Слайд 26

UMDF объекты

IWDFObject – базовый тип WDF-объекта
IWDFDriver – объект драйвера
IWDFDevice – объект устройства
IWDFFile

UMDF объекты IWDFObject – базовый тип WDF-объекта IWDFDriver – объект драйвера IWDFDevice
– объект файла
IWDFIoQueue – очередь запросов ввода-вывода
IWDFIoTarget – целевой драйвер запроса ввода-вывода
IWDFMemory – предоставляет доступ к области памяти