Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС_лекция.docx
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
1.49 Mб
Скачать

Система ввода/вывода unix

Включает в себя драйвер внешних устройств и средство буферизации (буферный пул и комплекс программ по управлению им). Буферы располагаются в области ядра, размер каждого соответствует размеру блоку данных диска. С каждым буфером связана структура данных (заголовок), содержащая:

  1. Данные о состояния буфера (занят/свободен, чтения/запись, признак отложенной записи, адрес, ошибки ввода/вывода, ссылка на следующий в очереди к устройству).

  2. Данные об устройстве (тип устройства, номер устройства, номер блока на устройстве).

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

Асинхронная запись инициируется функцией bawrite и так же начинает немедленный обмен данными с устройствами. Но ошибки ввода\вывода переданы в процесс быть не могут.

Отложенная запись инициируется функцией bdwrite, передача данных из системного буфера не производится, а в его заголовке делается отметка, что буфер заполнен и может быть выгружен.

Организация связи ядра с драйвером

1.Таблица входа драйверов блок ориентированных устройств

2. Таблица входов драйверов байт-ориентированных устройств

Индексный дескриптор специального файла содержит класс устройства, тип устройства и номер. Каждый тип устройства на соответствующую строку таблицы, соответствующую конкретному драйверу. Номер устройства передается драйверу в качестве параметра.

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

Драйвер блок-ориентированного устройства в общем случае состоит из секции закрытия/открытия файлов и секции стратегии. В таблице входа драйверов так же указаны адреса таблиц устройств rkrab, содержащих информацию об состоянии устройств.

29112012 Лекция 11 Подсистема ввода/вывода Windows

Функции диспетчера ввода/вывода:

  1. Создание пакетов запроса ввода/вывода (IRP – I/O Request Packet) и направление их соответствующему драйверу.

  2. Удаление и освобождение пакетов после завершения операций.

  3. Взаимодействие с диспетчером виртуальной памяти для предоставления файловым системам функции ввода/вывода с записью данных в память.

  4. Мониторинг загруженных файловых систем и их вызов по требованию.

  5. Предоставление поддержки синхронного и асинхронного ввода/вывода.

  6. Управление буфером для операции ввода/вывода.

Высокоуровневые функции диспетчера объединены в программный интерфейс ввода/вывода I/O API. Драйверы устройств аналогичны драйверам файловых систем. В отличие от драйверов устройств, драйверы ФС:

  1. Всегда вызываются в контексте потока, запрашивающего операцию ввода/вывода.

  2. Взаимодействуют с диспетчерами КЭШа и виртуальной памяти для буферизации данных.

  3. Драйверы фильтров ФС реализуют логические функции шифрования, удаленного хранения и так далее.

Каждый драйвер устройства взаимодействует с тремя типами объектов:

  1. Объект драйвера – создается выполняемым модулем при загрузке драйвера. Содержит таблицу вызовов драйвера с адресами его процедур.

  2. Объект устройства – представляет физическое устройство и описывает его характеристики. Может быть трех типов:

    1. Объект физического устройства PDO – Physical Driver Object. Представляет устройство, подключенное к шине, и создается драйвером шины. Постоянно поддерживает связь с устройством.

    2. Объект функционального устройства FDO – Functional Device Object. Создается драйвером класса устройств и драйвером порта.

    3. Объект фильтра устройства DO – Filter Device Object. Устройство для драйвера фильтра.

  3. Пакеты запросов ввода/вывода – используются для взаимодействия драйверов устройств в режиме ядра и выделяют в невыгружаемой памятью.

Элементы стека пакета IRP представляют собой структуры данных для отдельных драйверов, обрабатывающих IRP. Каждый драйвер получает закрытую область данных в стеке пакетов.