44
команду «
проверить наличие сигнала готовности» и, пока сигнал не
появится, драйвер ничего другого не делает. При этом нерационально
используется время центрального процессора. Поэтому выгоднее, выдав
команду ввода-вывода, забыть об УВВ и перейти на выполнение другой
программы, а появление сигнала готовности трактовать как сигнал запроса на
прерывание от устройства ввода-вывода.
Режим обмена с
прерываниями является режимом асинхронного
управления. Чтобы не потерять связь с устройством, может быть запущен
отсчет времени, в течение которого должна быть выполнена команда и
получен сигнал запроса на прерывание. Максимальный интервал времени, в
течение которого УВВ или его контроллер должны выдать сигнал запроса на
прерывание, называют
установкой тайм-аута. Если время истекло, а сигнал
не получен, считается, что связь с УВВ потеряна, управлять им больше нет
возможности, выдается диагностическое сообщение пользователю.
Драйверы, работающие в
режиме прерываний, представляют собой
сложный комплекс программных модулей и могут иметь несколько
секций:
секцию запуска, одну или несколько
секций продолжения и
секцию
завершения. Секция запуска инициирует операцию ввода-вывода. Эта секция
запускается для включения УВВ или просто для инициализации очередной
операции ввода-вывода. Секция продолжения осуществляет основную работу
по передаче данных и является основным обработчиком прерывания. Секция
завершения выключает УВВ или просто завершает операцию.
Многие устройства, прежде всего,
устройства с последовательным
доступом, не допускают совместного использования. Такие устройства могут
стать
закрепленными за процессом на все время его жизни. Это приводит к
тому, что вычислительные процессы не могут выполняться параллельно, так
как ожидают освобождения УВВ. Для
организации совместного
использования многими параллельными задачами неразделяемых УВВ,
вводится понятие
виртуальных устройств. Имитация работы с устройством в
режиме непосредственного подключения к нему называется
спулингом
(
spooling). Основное назначение спулинга – создать видимость разделения
УВВ, которое фактически является устройством с последовательным
доступом и должно использоваться только монопольно и быть закрепленным
за процессом. Каждому вычислительному процессу предоставляется не
реальный, а виртуальный принтер, и поток выводимых символов сначала
направляется в специальный файл на диске (
спул-файл – spool-file) и только
потом, по окончании виртуальной печати, содержимое спул-файла выводится
на принтер. Системные процессы, управляющие спул-файлами, называют
спулером чтения (
spool-reader) или
спулером записи (
spool-writer).
Таблицы ввода-вывода - это
информационные структуры, которые
используются ОС для управления операциями ввода-вывода и отслеживания
состояния ресурсов, занятых в обмене данными. Каждая ОС имеет свои
таблицы ввода-вывода, состав которых может отличаться, хотя в некоторых
системах вместо таблиц создаются списки. Исходя из
принципа управления
45
вводом-выводом исключительно через супервизор ОС и учитывая, что
драйверы УВВ используют механизм прерываний для установления обратной
связи центральной части с внешними устройствами, можно сделать вывод о
необходимости создания следующих системных таблиц (рисунок А.13):
а)
таблица оборудования (
UCB – Unit Control Block) – содержит
информацию обо всех УВВ, подключенных к вычислительной системе;
б)
таблица виртуальных логических устройств (
DRT) – предназначена
для установления связи между виртуальными и реальными устройствами;
в)
таблица прерываний – необходима для организации обратной связи
между центральной частью и УВВ.
Запрос на операцию ввода-вывода от выполняющейся программы
поступает на супервизор задач (рисунок А.14, шаг 1). Этот запрос
представляет собой обращение к ОС и указывает на конкретную функцию
API. Супервизор задач проверяет системный вызов на соответствие принятым
спецификациям и в
случае ошибки возвращает задаче соответствующее
сообщение (шаг 1-1). Если запрос корректен, то он перенаправляется в
супервизор ввода-вывода (шаг 2), который по логическому имени с помощью
таблицы DRT находит соответствующий элемент UCB в таблице
оборудования. Если устройство уже занято, то описатель задачи, запрос
которой обрабатывается, помещается в список задач, ожидающих это
устройство. Если УВВ свободно, то супервизор ввода-вывода определяет из
UCB тип устройства и при необходимости запускает препроцессор,
позволяющий получить управляющие коды и данные, которые сможет
правильно понять и отработать устройство (шаг 3). Когда «программа»
управления операцией ввода-вывода будет готова, супервизор передает
управление соответствующему драйверу на секцию запуска (шаг 4). Драйвер
инициализирует операцию управления, обнуляет счетчик тайм-аута и
возвращает управление диспетчеру задач с тем, чтобы он поставил на
процессор готовую к исполнению задачу (шаг 5). Как только УВВ отработает
посланную ему команду, оно выставляет сигнал запроса на прерывание, по
которому через таблицу прерываний управление передается на секцию
продолжения (шаг 6). Получив новую команду, устройство вновь начинает ее
обрабатывать, а управление процессором опять передается диспетчеру задач,
и процессор продолжает выполнять полезную работу. Результатом является
параллельная обработка задач, на фоне которой процессор осуществляет
управление операциями ввода-вывода.
Различают
синхронный и
асинхронный ввод-вывод данных. Задача,
выдавшая запрос на операцию ввода-вывода, переводится супервизором в
состояние ожидания завершения заказанной операции. Когда супервизор
получает от секции завершения сообщение о том, что операция завершилась,
он переводит задачу в состояние готовности к выполнению, и она продолжает
выполняться. Такая ситуация соответствует
синхронному вводу-выводу,
который является стандартным для большинства ОС. Для увеличения
46
скорости выполнения приложений при необходимости может использоваться
асинхронный ввод-вывод.
Простейшим вариантом является
буферизованный вывод данных на
внешнее устройство, при котором данные из
приложения передаются в
специальный
системный буфер – область памяти, отведенную для временного
размещения передаваемых данных. В этом случае логически операция вывода
для приложения считается выполненной сразу же, и задача может не ожидать
окончания действительного процесса передачи данных на устройство. Для
организации асинхронного ввода следует не только выделить область памяти
для временного хранения считываемых данных и связать выделенный буфер с
задачей, заказавшей операцию, но и сам запрос на операцию ввода-вывода
разбить на две части (первая - на считывание данных, вторая – на завершение
считывания). Асинхронный ввод-вывод характерен для мультипрограммных
ОС, использующих механизм потоков выполнения.
Достарыңызбен бөлісу: