При проектировании подсистемы управления вводом-выводом определяющим становится следующий принцип: любые операции по управлению вводом-выводом объявляются привилегированными и могут выполняться только кодом самой операционной системы.
Для реализации этого принципа на практике в большинстве современных процессоров вводятся два режима работы: режим пользователя и режим супервизора. Второй режим часто называют привилегированным режимом или режимом ядра. Одной из особенностей указанных режимов является то, что в режиме супервизора выполнение команд ввода-вывода разрешено, а в пользовательском режиме — запрещено. Обращение к командам ввода-вывода в прикладных программах вызывает прерывание, и управление через механизм прерываний передается коду операционной системы.
Три причины, почему пользовательские программы не могут напрямую обращаться к внешним устройствам:
- Необходимость разрешать возможные конфликты в доступе к устройствам ввода-вывода
- Желание увеличить эффективность использования ресурсов ввода-вывода
- Необходимость избавить программы ввода-вывода от ошибок
Управление вводом-выводом обеспечивает модуль операционной системы, который часто называют супервизором ввода-вывода. К основным задачам супервизор ввода-вывода относятся
- Супервизор ввода-вывода получает запросы на ввод-вывод от прикладных задач или от программных модулей самой операционной системы. Эти запросы проверяются на корректность и, если они соответствуют спецификациям и не содержат ошибок, то обрабатываются дальше. В противном случае прикладной задаче выдается соответствующее диагностическое сообщение о некорректности запроса.
- Супервизор ввода-вывода планирует ввод-вывод, определяя очередность предоставления устройств ввода-вывода задачам, затребовавшим эти устройства. При этом запрос на ввод-вывод либо тут же выполняется, либо ставится в очередь на выполнение.
- Супервизор ввода-вывода инициирует операции ввода-вывода, передавая управление соответствующим драйверам, и, в случае управления вводом-выводом с использованием прерываний, передает диспетчеру задач право выделить процессор наиболее привилегированной задаче, стоящей в очереди на выполнение.
- При получении запросов на прерывание от внешних устройств супервизор ввода-вывода обрабатывает эти запросы и передает управление соответствующим программам обработки прерываний.
- Супервизор ввода-вывода осуществляет передачу сообщений об ошибках, если таковые выявляются в процессе управления операциями ввода-вывода.
- Супервизор ввода-вывода посылает сообщения о завершении операции ввода-вывода запросившей эту операцию прикладной программе и сбрасывает признак состояния ожидания ввода-вывода, если программа ожидала завершения операции.
Таким образом, прикладные программы не могут непосредственно связываться с устройствами ввода-вывода. Однако, программа может, установив соответствующие значения параметров в запросе на ввод-вывод, определяющие требуемую операцию и количество потребляемых ресурсов, обратиться к супервизору ввода-вывода, который и запускает необходимые логические и физические операции.
Запрос на ввод-вывод оформляется в виде системного вызова с учетом требований интерфейса прикладного программирования той операционной системы, в среде которой выполняется приложение. Важно отметить, что параметры, указываемые в запросах на ввод-вывод, передаются не только в вызывающих последовательностях, создаваемых по спецификациям API, но и как данные, помещаемые в соответствующие системные таблицы.