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