Подсистемы ввода-вывода имеет иерархическую структуру.
Обобщенная структура подсистемы ввода-вывода:
Рисунок 4.9 – Обобщенная структура подсистемы ввода-вывода
При этом
- нижние слои включают индивидуальные драйверы, написанные для конкретных физических устройств,
- верхние слои управляют этими устройствами и предоставляют общий интерфейс для устройств, обладающих общими характеристиками (например для принтеров определенного производителя или для всех матричных принтеров и т. п.)
Программное обеспечение ввода-вывода делится не только на горизонтальные слои, но и на вертикальные. Это объясняется тем, что для разнообразных внешних устройств трудно обеспечить единообразие в разбиении функций управления на слои.
Для согласования работы слоев предусмотрен менеджер ввода-вывода
Его организующие функции распределены по всем уровням, образуя оболочку.
Задачи такого менеджера:
- Верхний слой менеджера составляют системные вызовы ввода-вывода, которые принимают от пользовательских процессов запросы на ввод-вывод и переадресуют их соответствующим модулям и драйверам, а также возвращают процессам результаты операций ввода-вывода.
- Нижний слой менеджера реализует непосредственное взаимодействие с контроллерами внешних устройств, экранируя драйверы от особенностей аппаратной платформы. Этот слой принимает от драйверов запросы на обмен данными с регистрами контроллеров в некоторой обобщенной форме, а затем преобразует эти запросы в зависящий от аппаратной платформы формат. Диспетчер прерываний, рассмотренный выше, может входить в состав менеджера ввода-вывода или же представлять собой отдельный модуль ядра.
- менеджер созданет среды для остальных компонентов подсистемы, облегчающую их взаимодействие друг с другом. Эта задача может быть решена за счет создания некоторого стандартного внутреннего интерфейса взаимодействия модулей ввода-вывода между собой
- менеджера ввода-вывода организует взаимодействие модулей ввода-вывода с модулями других подсистем ОС, таких как подсистема управления процессами, виртуальной памятью и другими.
Примерами подобного менеджера является среда STREAMS, существующая во многих версиях операционной системы UNIX.