Пример управления вводом-выводом
Обслуживание ввода-вывода
Организация побайтного ввода-вывода
Последовательность операций, выполняемых каналом ввода-вывода
Канальная программа
Вовлечение ос в управление вводом-выводом
Рабочая область канала ввода-вывода
Очередь запросов на ввод-вывод
Алгоритм обработки прерываний по вводу-выводу
Пример управления вводом-выводом
Основными компонентами подсистемы ввода-вывода являются драйверы, управляющие внешними устройствами, и файловая система. К подсистеме ввода-вывода можно также с некоторой долей условности отнести и диспетчер прерываний, рассмотренный выше. Условность заключается в том* что диспетчер прерываний обслуживает не только модули подсистемы ввода-вывода, но и другие модули ОС, в частности такой важный модуль, как планировщик/диспетчер потоков. Но из-за того, что планирование работ подсистемы ввода-вывода составляет основную долю нагрузки диспетчера прерываний, его вполне логично рассматривать как ее составную часть (к тому же первопричиной появления в компьютерах системы прерываний были в свое время именно операции с устройствами ввода-вывода).
Файловая система ввиду ее сложности, специфичности и важности как основного хранилища всей информации вычислительной системы заслуживает рассмотрения в отдельной главе. Тем не менее, здесь файловая система рассматривается совместно с другими компонентами подсистемы ввода-вывода по двум причинам. Во-первых, файловая система активно использует остальные части подсистемы ввода-вывода, а во-вторых, модель файла лежит в основе большинства механизмов доступа к устройствам, используемых в современной подсистеме ввода-вывода.
Задачи ОС по управлению файлами и устройствами
Подсистема ввода-вывода (Input-Output Subsystem) мультипрограммной ОС при обмене данными с внешними устройствами компьютера должна решать ряд общих задач, из которых наиболее важными являются следующие:
1. Организация параллельной работы устройств ввода-вывода и процессора;
Процессы, происходящие в контроллерах, протекают в периоды между выдачами команд независимо от ОС. От подсистемы ввода-вывода требуется спланировать в реальном масштабе времени (в котором работают внешние устройства) запуск и приостановку большого количества разнообразных драйверов, обеспечив приемлемое время реакции каждого драйвера на независимые события контроллера. С другой стороны, необходимо минимизировать загрузку процессора задачами ввода-вывода, оставив как можно больше процессорного времени на выполнение пользовательских потоков.
Для обеспечения приемлемого уровня реакции все драйверы (или части драйверов) распределяются по нескольким приоритетным уровням в соответствии с требованиями ко времени реакции и временем использования процессора. Для реализации приоритетной схемы обычно задействуется общий диспетчер прерываний ОС.
2. Согласование скоростей обмена и кэширование данных;
Согласование скорости обычно достигается за счет буферизации данных в оперативной памяти и синхронизации доступа процессов к буферу.
Буферизация данных позволяет не только согласовать скорости работы процессора и внешнего устройства, но и решить другую задачу — сократить количество реальных операций ввода-вывода за счет кэширования данных. Дисковый кэш является непременным атрибутом подсистем ввода-вывода практически всех операционных систем, значительно сокращая время доступа к хранимым данным.
3. Разделение устройств и данных между процессами;
Устройства ввода-вывода могут предоставляться процессам как в монопольное, так и в совместное (разделяемое) использование. При этом ОС должна обеспечивать контроль доступа теми же способами, что и при доступе процессов к другим ресурсам вычислительной системы — путем проверки прав пользователя или группы пользователей, от имени которых действует процесс, на выполнение той или иной операции над устройством.
4. Обеспечение удобного логического интерфейса между устройствами и остальной частью системы;
Разнообразие устройств ввода-вывода делают особенно актуальной функцию ОС по созданию экранирующего логического интерфейса между периферийными устройствами и приложениями. Практически все современные операционные системы поддерживают в качестве основы такого интерфейса файловую модель периферийных устройств, когда любое устройство выглядит для прикладного программиста последовательным набором байт, с которым можно работать с помощью унифицированных системных вызовов (например, read и write), задавая имя файла-устройства и смещение от начала последовательности байт.
5. Поддержка широкого спектра драйверов с возможностью простого включения в систему нового драйвера;
Драйвер взаимодействует, с одной стороны, с модулями ядра ОС (модулями подсистемы ввода-вывода, модулями системных вызовов, модулями подсистем управления процессами и памятью и т. д.), а с другой стороны — с контроллерами внешних устройств.
Поэтому существуют два типа интерфейсов: интерфейс «драйвер-ядро» (Driver Kernel Interface, DKI) и интерфейс «драйвер-устройство» {Driver Device Interface, DDF). Интерфейс «драйвер-ядро» должен быть стандартизован в любом случае, а интерфейс «драйвер-устройство» имеет смысл стандартизировать тогда, когда подсистема ввода-вывода не разрешает драйверу непосредственно взаимодействовать с аппаратурой контроллера, а выполняет эти операции самостоятельно.
6. Динамическая загрузка и выгрузка драйверов;
Альтернативой динамической загрузке драйверов при изменении текущей конфигурации внешних устройств компьютера является повторная компиляция кода ядра с требуемым набором драйверов, что создает между всеми компонентами ядра статические связи вместо динамических.
7. Поддержка нескольких файловых систем;
8. Поддержка синхронных и асинхронных операций ввода-вывода.
Операция ввода-вывода может выполняться по отношению к программному модулю, запросившему операцию, в синхронном или асинхронном режимах. Смысл этих режимов тот же, что и для рассмотренных выше системных вызовов, — синхронный режим означает, что программный модуль приостанавливает свою работу до тех пор, пока операция ввода-вывода не будет завершена (рис. 7.1, а), а при асинхронном режиме программный модуль продолжает выполняться в мультипрограммном режиме одновременно с операцией ввода-вывода (рис. 7Л, б). Отличие же заключается в том, что операция ввода-вывода может быть инициирована не только пользовательским процессом — в этом случае операция выполняется в рамках системного вызова, но и кодом ядра, например кодом подсистемы виртуальной памяти для считывания отсутствующей в памяти страницы.
Канал ввода - вывода обеспечивает стандартный интерфейс для подключения разнотипных периферийных устройств к центральному процессору и часто выполняет функции процессора ввода - вывода.
Операции ввода - вывода могут выполняться каналом ввода - вывода в одном из двух режимов: монопольном или мультиплексном. В монопольном режиме периферийное устройство занимает все средства интерфейса ввода-вывода и канала и остаётся функционально связанным с каналом ввода-вывода на всё время передачи данных; никакое другое периферийное устройство не может использовать средства канала ввода-вывода и интерфейса до завершения работы предыдущего устройства. В мультиплексном режиме канал ввода-вывода может обслуживать несколько одновременно работающих периферийных устройств. В этом режиме выполнение операций ввода - вывода расщепляется на короткие интервалы времени, в каждом из которых обмен данными производится с одним из периферийных устройств. Интервалы времени чередуются в соответствии с запросами от периферийных устройств; в течение каждого интервала времени канал ввода-вывода функционально связан с одним периферийным устройством.
В зависимости от выполняемых режимов работы К. в.- в. подразделяются на селекторный, байт-мультиплексный, блок-мультиплексный. Обычно быстродействующие периферийные устройства подключаются к селекторному и блок-мультиплексному каналу, медленные периферийные устройства - к байт-мультиплексному каналу.
Разл. типы К. в.- в., как правило, объединяются и выполняются в виде автономного устройства либо входят в состав центр, процессора, в последнем случае центр, процессор дополнительно выполняет ф-ции К. в.- в.В качестве элементной базы для реализации К. в.-в. используются логические элементы (ТТЛ, ТТЛШ, ЭСЛ) в виде цифровых интегральных схем, ИС запоминающих устройств, электронные компоненты интерфейса ввода - вывода. Для обеспечения высокой пропускной способности при передаче данных применяются быстродействующие ИС.