Режимы управления вводом-выводом

Как известно, имеется два основных режима ввода-вывода: режим обмена с опро­сом готовности устройства ввода-вывода и режим обмена с прерываниями (рис. 5.1).

Режимы управления вводом-выводом - student2.ru

Рис. 5.1. Управление вводом-выводом

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

Режимы управления вводом-выводом____________________________________ 135

требующую, чтобы устройство ввода-вывода выполнило некоторое действие. Напри­мер, если мы управляем дисководом, то это может быть команда на включение двигателя или команда, связанная с позиционированием магнитных головок. Устройство управления исполняет команду, транслируя сигналы, понятные ему и центральному устройству, в сигналы, понятные устройству ввода-вывода. После выполнения команды устройство ввода-вывода (или его устройство управления) выдает сигнал готовности, который сообщает процессору о том, что можно выдать новую команду для продолжения обмена данными. Однако поскольку быстродей­ствие устройства ввода-вывода намного меньше быстродействия центрального процессора (порой на несколько порядков), то сигнал готовности приходится очень долго ожидать, постоянно опрашивая соответствующую линию интерфейса на на­личие или отсутствие нужного сигнала. Посылать новую команду, не дождавшись сигнала готовности, сообщающего об исполнении предыдущей команды, бессмыс­ленно. В режиме опроса готовности драйвер, управляющий процессом обмена дан­ными с внешним устройством, как раз и выполняет в цикле команду «проверить наличие сигнала готовности». До тех пор пока сигнал готовности не появится, драй­вер ничего другого не делает. При этом, естественно, нерационально используется время центрального процессора. Гораздо выгоднее, выдав команду ввода-вывода, на время забыть об устройстве ввода-вывода и перейти на выполнение другой про­граммы. А появление сигнала готовности трактовать как запрос на прерывание от устройства ввода-вывода. Именно эти сигналы готовности и являются сигналами запроса на прерывание (см. раздел «Прерывания» в главе 1).

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

Драйверы, работающие в режиме прерываний, представляют собой сложный ком­плекс программных модулей и могут иметь несколько секций: секцию запуска, одну или несколько секций продолжения и секцию завершения.

Секция запуска инициирует операцию ввода-вывода. Эта секция запускается для включения устройства ввода-вывода или просто для инициализации очередной операции ввода-вывода.

Секция продолжения (их может быть несколько, если алгоритм управления обме­ном данными сложный, и требуется несколько прерываний для выполнения од­ной логической операции) осуществляет основную работу по передаче данных. Секция продолжения, собственно говоря, и является основным обработчиком пре-

136_____________ Глава 5. Управление вводом-выводом в операционных системах

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

Секция завершения обычно выключает устройство ввода-вывода или просто за­вершает операцию.

Управление операциями ввода-вывода в режиме прерываний требует значитель­ных усилий со стороны системных программистов — такие программы создавать сложнее. Примером тому может служить существующая ситуация с драйверами печати. Так, в операционных системах Windows (и Windows 9x, и Windows NT/ 2000) печать через параллельный порт осуществляется не в режиме с прерывани­ями, как это сделано в других ОС, а в режиме опроса готовности, что приводит к 100-процентной загрузке центрального процессора на все время печати. При этом, естественно, выполняются и другие задачи, запущенные на исполнение, но исклю­чительно за счет того, что упомянутые операционные системы поддерживают вы­тесняющую мультизадачность, время от времени прерывая процесс управления печатью и передавая центральный процессор остальным задачам.

Закрепление устройств,

Наши рекомендации