Подсистема ввода-вывода обеспечивает обмен данными между приложениями и периферийными устройствами
К основным компонентам п/с относятся драйверы и файловая система
Основные задачи:
- Организация параллельной работы устройств и процессора
- Кэширование данных
- Разделение устройств и данных между процессами
- Удобный логический интерфейс
- Простое включение нового драйвера и файловых систем
- Поддержка синхронных и асинхронных операций
Организация параллельной работы устройств и процессора
Каждому устройству ввода-вывода соответствует специальное устройство управления – контроллер. Контроллер работает параллельно с процессором и взаимодействует с прикладными программами через посредство особой программы ОС – драйвера.
Подсистема ввода-вывода обслуживает контроллер в реальном масштабе времени, т.е. на уровне электрических сигналов. Для приемлемого уровня реакции все драйверы разделяются на несколько приоритетных уровней. Для реализации приоритетной схемы используется диспетчер прерываний
Кэширование данных
В общем случае скорость генерации данных и их чтения не совпадают. Для согласования данные вводится буферизация , доступ к которому синхронизируется. Буфер обычно располагается в ОЗУ
При больших объемах ввода — вывода, памяти может не хватать и в таких случаях под буфер используется дисковый файл: спул-файл
Другим решением является оснащение контроллера буферной памятью, соизмеримой с ОЗУ
Буферизация решает и другую задачу — сократить количество реальных обращений к устройствам за счет кэширования (дисковый кэш)
Разделение устройств и данных между процессами
Устройства ввода — вывода могут предоставляться процессам в монопольное или совместное использование.
Устройства типа диск позволяют разграничить доступ с точностью до отдельных порций данных, со своими правами
Другие устройства, например терминал, используется только в монопольном режиме
Принтер не выделяется в монопольное использование, но разграничивает порции выдач разных процессов
Удобный логический интерфейс
Практически все современные ОС поддерживают в качестве основного логического интерфейса файловую модель устройств ввода-вывода, когда любое устройство – последовательность байтов, с которыми можно работать с помощью системных вызовов типа Read, Write
На этой базе строится более сложная модель устройств ввода-вывода, с учетом их специфики
Простое включение новых драйверов
Достоинством любой современной ОС является разнообразие набора драйверов для наиболее популярных устройств и поддержка нескольких файловых систем
Удобный интерфейс между драйверами и другими компонентами ОС, необходим для того, чтобы драйверы писали не только разработчики ОС, но и производители устройств
Существуют два типа интерфейсов:
- “драйвер-ядро” (Driver Kernel Interface, DKI) для взаимодействия с ядром ОС и
- интерфейс “драйвер-устройство” (Driver Device Interface, DDI) для взаимодействия с контроллером
Для поддержки разработки драйверов обычно выпускается пакет DDK (Driver Development Kit)
Поддержка нескольких файловых систем
Данные на дисках организуются в файловые системы (ФС). Свойства ФС во многом определяют свойства ОС (отказоустойчивость, быстродействие, емкость и пр.)
Популярные системы мигрируют из одной ОС в другую (например FAT мигрировала из MS DOS в OS/2, MS Windows, Unix)
Обычно в ОС имеется слой программного обеспечения, отвечающий за простоту подключения новой файловой системы. Например, слой VFS (Virtual File System) в версиях Unix.
Поддержка синхронных и асинхронных операций ввода-вывода.
Операция ввода-вывода может выполнятся по отношению к модулю, запросившему операцию, синхронно и асинхронно, т.е. с ожиданием завершения операции или без ее ожидания.
Системные вызовы ввода-вывода из пользовательского процесса выполняются чаще как синхронные, в связи с тем, что такие операции выполняются долго и потоку все равно придется ждать результата
При микроядерной архитектуре прикладной процесс может запросить и асинхронную операцию ввода-вывода.
Внутренние же вызовы ядра обычно выполняются асинхронно, для свободы дальнейшего поведения ОС
Многослойная модель подсистемы В-В
Многослойная модель подсистемы ввода-вывода
Менеджер ввода-вывода.
В подсистеме ввода-вывода есть модуль общего назначения, который организует работу всех компонентов системы ввода-вывода, это менеджер ввода-вывода. Он образует некую оболочку
Основные задачи менеджера:
- системные вызовы ввода-вывода,
- взаимодействие с контроллером,
- поддержка внутреннего интерфейса взаимодействия модулей ввода-вывода,
- взаимодействие с другими модулями ОС
Пример: среда STREAMS для UNIX