Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОСиСП / ОС лекции.doc
Скачиваний:
28
Добавлен:
24.02.2016
Размер:
875.52 Кб
Скачать

Управление вводом-выводом

Виртуальные устройства

ОС конструирует ресурсы высокого уровня - виртуальные устройства и предоставляет пользователю интерфейс для работы с ними. Можно в общем случае определить четыре метода, которые могут использоваться ОС для конструирования виртуальных устройств

  • Метод закрепления однозначно отображает виртуальное устройство на реальное устройство, применение этого метода порождает все проблемы, связанные с использованием монопольных ресурсов.

Метод разделения применим к устройством, ресурс которых является делимым. В этом случае ресурс устройства разбивается на части, каждая из которых закрепляется за одним процессом.

  • Метод спулинга заставляет процесс обмениваться данными не с реальным устройством, а с некоторой буферной областью в памяти (оперативной или внешней). Обмен же данными между буфером и реальным устройством организует сама ОС. Буферизация прозрачна для процессов и может создавать у них иллюзию одновременного использования устройства - если каждому процессу выделен свой буфер.

  • Метод моделирования не связан с реальными устройствами вообще. Устройство моделируется ОС чисто программными методами. Естественным применением этого метода является отработка приемов работы с устройствами, отсутствующими в конфигурации данной вычислительной системы. Часто ОС удобно представлять некоторые свои ресурсы как метафоры (подобия) устройств - это также моделируемые устройства.

Интерфейсы устройств

При всем многообразии ВУ ЭВМ и способов управления ими их программные интерфейсы могут быть сведены к трем основным моделям, определяющимся способом подключения устройств к ЭВМ:

  • Регистры устройств. Устройство может иметь большое число регистров, которые, однако, сводятся к трем основным типам: регистры состояния, регистры управления, регистры данных. Регистры устройств являются расширением адресного пространства ЭВМ. Расширение это может быть как явным - с доступом при помощи команд работы с памятью типа MOV, так и неявным - с отдельной адресацией портов ввода-вывода и доступом при помощи специальных команд типа IN/OUT. Сложные по управлению устройства подсоединяются к ЭВМ через контроллеры ввода-вывода, один контроллер может обслуживать несколько однотипных устройств. С точки зрения программного интерфейса регистры контроллера выглядят для программы так же, как и регистры устройств.

  • Прямой доступ к памяти (ПДП, DMA - direct memory access). Контроллер ПДП работает параллельно с ЦП и обменивается данными прямо с ОП, минуя ЦП. Сам контроллер ПДП выглядит для программы как устройство с доступом через регистры. Программа, которая инициирует прямой обмен должна его запрограммировать. Об окончании обмена программа может узнать либо по прерыванию, либо опрашивая регистр состояния контроллера. Контроллер ПДП обычно содержит собственную буферную память для сглаживания разницы в быстродействии устройства и ОП.

  • Каналы ввода-вывода. Каналы являются универсальными процессорами ввода-вывода, к одному каналу могут быть одновременно подсоединены контроллеры разных устройств. Работа канала во многом похожа на работу контроллера ПДП: канал программируется, а затем запускается операция, в ходе которой канал обеспечивает прямой обмен с ОП, минуя ЦП. Но программирование канала состоит в передаче ему канальной программы, которая размещается в ОП. Получив свою программу, канал далее выполняет ее самостоятельно, сигнализируя прерываниями об окончании операций или об особых ситуациях. Аппаратура каналов применяется в мейнфреймах System/390.

  • Процессоры ввода-вывода - универсальные процессоры с собственным ПО (включая ОС), выполняющие функции контроллера ввода-вывода. Интерфейс процессора ввода-вывода не похож на интерфейс устройства в обычном понимании. Взаимодействие ОС с процессором ввода-вывода происходит через механизм обмена сообщениями, поддерживаемый микроядром. Данные могут передаваться как в составе сообщения, так и выбираться процессором ввода-вывода непосредственно из ОП. Впервые процессоры ввода-вывода были применены в суперкомпьютерах, но с тех пор они перестали быть прерогативой суперсистем и постепенно внедряются в системы ординарные (например, в AS/400).

Драйверы устройств

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

Логически являясь частью ОС, драйверы, тем не менее, оформляются как отдельные модули. Поскольку каждый драйвер однозначно связан с устройством определенного типа (а возможно, и данной модификации), то и состав набора драйверов зависит от конфигурации аппаратных средств. Кроме того, как правило, должна быть обеспечиваться возможность подключения к системе новых ВУ без внесения изменений в ОС. При модульности драйверов это достигается простым добавлением нового драйвера к системному ПО. Драйверы загружаются в память либо при загрузке системы, либо (реже) - динамически, при возникновении потребности в них. Выбор драйверов для загрузки выполняется либо по явным указаниям в процедуре инициализации ОС, либо неявно - по имеющимся таблицам конфигурации системы, либо полностью автоматически - путем опроса при загрузке всех установленных устройств, опознания их и подключения соответствующих драйверов. Последний принцип получил название plug and play.

Модификация данных. Потоки

В целом ряде случаев данные, передаваемые из процесса на устройство или в обратном направлении, должны быть дополнительно преобразованы. Примерами таких преобразований могут быть: сжатие данных; криптографическое кодирование данных; кодирование данных, повышающее надежность из передачи и хранения; согласование с форматами сетевых протоколов; и т.д. Выполнение этих функций может быть заложено непосредственно в драйвер устройства. Однако, такой вариант снижает мобильность драйвера.

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

Буферизация

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

В зависимости от целевой направленности ОС, она может обеспечивать буферизацию сама (например, через потоки) или предоставлять эту функцию процессам.