Режимы управления вводом/выводом
Имеются два основных режима ввода/вывода:
1. Режим обмена с опросом готовности устройства ввода/вывода.
2. Режим обмена с прерываниями.
Пусть, например, управление вводом/выводом осуществляет центральный процессор. Он посылает устройству управления команду выполнить некоторое действие устройству ввода/вывода. Устройство исполняет команду.
Но быстродействие устройства ввода/вывода намного меньше быстродействия центрального процессора (на несколько порядков). Поэтому сигнал готовности устройства к следующей команде процессору приходится очень долго ожидать, постоянно опрашивая соответствующую линию интерфейса. Посылать новую команду, не дождавшись сигнала готовности, бессмысленно.
В режиме опроса готовности драйвер, управляющий процессом обмена данными с внешним устройством, как раз и выполняет в цикле команду “проверить наличие сигнала готовности”. До тех пор пока сигнал готовности не появится, драйвер ничего другого не делает. При этом, естественно, нерационально используется время центрального процессора.
Гораздо выгоднее, выдав команду ввода/ вывода, на время забыть об устройстве ввода/вывода и перейти на выполнение другой программы. А появление сигнала готовности трактовать как запрос на прерывание от устройства ввода/вывода. Именно эти сигналы готовности и являются сигналами запроса на прерывание.
Режим обмена с прерываниями по своей сути является режимом асинхронного управления. Для того чтобы не потерять связь с устройством, может быть запущен отсчет времени, в течение которого устройство обязательно должно выполнить команду и выдать сигнал запроса на прерывание. Максимальный интервал времени, в течение которого устройство ввода/вывода или его контроллер должны выдать сигнал запроса на прерывание, часто называют уставкой тайм-аута.
Если это время истекло после выдачи устройству очередной команды, а устройство так и не ответило, то делается вывод о том, что связь с устройством потеряна, и управлять им больше нет необходимости. Пользователь или задача получают соответствующее диагностическое сообщение.
Драйверы, работающие в режиме прерываний, представляют собой сложный комплекс программных модулей и могут иметь несколько секций: 1) секцию запуска,
2) одну или несколько секций продолжения,
3) секцию завершения.
Секция запускаинициирует операцию ввода/вывода. Эта секция запускается для включения устройства ввода/вывода либо просто для инициации очередной операции ввода/вывода.
Секция продолжения осуществляет основную работу по передаче данных. Она является основным обработчиком прерывания. Интерфейс может потребовать для управления вводом/выводом несколько управляющих команд, а сигнал прерывания у устройства, только один. Поэтому после выполнения очередной секции прерывания супервизор прерываний при следующем сигнале готовности должен передать управление другой секции. Это делается за счет изменения адреса обработки прерывания после выполнения очередной секции.
Секция завершенияобычно выключает устройство ввода/вывода либо просто завершает операцию.
Управление операциями ввода/вывода в режиме прерываний требует больших усилий со стороны системных программистов. Такие программы создавать сложнее, чем те, которые работают в режиме опроса готовности.
Примером тому может служить ситуация с драйверами, обеспечивающими печать. Так, в ОС Windows (и Windows 9x, и Windows NT) драйвер печати через параллельный порт работает не в режиме с прерываниями, как это сделано в других ОС, а в режиме опроса готовности, что приводит к 100%-й загрузке центрального процессора на все время печати. При этом, естественно, выполняются и другие задачи, запущенные на исполнение, но исключительно за счет того, что ОС Windows реализует вытесняющую мультизадачность и время от времени прерывает процесс управления печатью и передает центральный процессор остальным задачам.
Дата добавления: 2020-02-05; просмотров: 622;