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

Управление вводом/выводом в операционных системах

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

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

  2. Вызывает соответствующее распределение каналов и контроллеров, определяет очередность в/в. Запрос либо выполняется, либо ставится в очередь;

  3. Инициирует операции в/в – передает управление соответствующим драйверам;

  4. При получении сигналов прерываний по в/в идентифицирует их и передает управление соответствующей программе ISR;

  5. Осуществляет передачу сообщений об ошибках, если таковые происходят в процессе управления в/в;

  6. Посылает сообщение о завершении операции в/в запросившему эту операцию процессу и снимает его с состояния ожидания в/в.

Имеется два основных режима ввода-вывода:

  • режим обмена с опросом готовности устройства в/в;

  • режим обмена с прерываниями – драйверы в этом режиме имеют секцию запуска, одну или несколько секций продолжения и секцию завершения.

Рассмотрим рис.1.

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

Центральный процессор посылает устройству управления команду выполнить некоторое действие устройству в/в. УУ исполняет команду, транслируя полученный сигналы в сигналы, понятные устройству в/в. Но быстродействие устройства в/в намного меньше быстродействия ЦП. Поэтому сигнал готовности от УУ устройства в/в центральному процессору о том, что операция в/в выполнена и можно подавать новую, приходится ожидать долго. До тех пор, пока сигнал готовности не появится, драйвер внешних устройств ничего не делает, при этом нерационально используется время ЦП. Гораздо более выгодно, подав команду на в/в, на время забыть об устройстве в/в и перейти на выполнение другой команды, а сигнал готовности рассматривать как запрос на прерывание от устройства в/в.

Устройства с последовательным доступом (например, принтер) не допускают совместного использования. Для организации использования многими параллельно выполняющимися задачами устройств в/в, которые не могут быть разделяемыми, вводится понятие виртуальных устройств (SPOOLing – имитация работы с устройством в режиме «он-лайн»). Спулинг создает видимость параллельного разделения устройств в/в с последовательным доступом. Например, вычислительному процессу предоставляется виртуальный принтер, т.е. поток выводимых данных направляется в специальный файл на диске, а затем, когда принтер освободится, выводится содержимое этого спул-файла.

Основные системные таблицы ввода-вывода

Каждая ОС имеет, по-крайней мере, три системных таблицы:

  1. Содержит информацию обо всех устройствах в/в, подключенных к вычислительной системе – таблица оборудования, а каждый ее элемент – блок управления устройством в/в (UСB –unit control block) содержит следующую информацию:

    1. тип устройства, конкретная модель, символическое имя, характеристика устройства;

    2. как это устройство подключено (тип интерфейса, через какой порт, линия запроса прерывания и т.д.):

    3. номер и адрес канала в/в:

    4. указание на драйвер, указание секции запуска и секции продолжения драйвера:

    5. и т.д.

      1. Предназначена для реализации еще одного принципа виртуализации устройств в/в – независимости от устройства. Это таблица описания виртуальных логических устройств (DRT – device reference table). Она предназначена для установления связи между виртуальными (логическими) устройствами и реальными устройствами, описанными в таблице оборудования.

      2. Необходима для организации обратной связи между ЦП и устройствами в/в – таблица прерываний, указывает для каждого сигнала запроса на прерывание тот элемент UCB, который сопоставлен данному устройству, подключенному к этой линии запроса на прерывание.

Теперь еще раз, с учетом изложенных принципов и таблиц, рассмотрим процесс управления вводом/выводом (см. рис. 2).

Рис. 2. Процесс управления вводом/выводом

От прикладной программы на супервизор программ поступает запрос на операцию в/в. Он проверяет системный вызов и в случае ошибки возвращает задаче соответствующее сообщение. Если запрос корректен, то он перенаправляется в супервизор ввода/вывода. Последний по логическому имени с помощью таблицы DRT находит соответствующий элемент UCB в таблице оборудования. Если устройство уже занято, то описатель задачи помещается в список задач, ожидающих настоящее устройство. Если же устройство свободно, то супервизор ввода/вывода определяет из UCB тип устройства и при необходимости запускает препроцессор, позволяющий получить последовательность управляющих кодов и данных, которую сможет понять и отработать устройство. Затем управление передается соответствующему драйверу на секцию запуска. Драйвер инициализирует операцию управления, обнуляет счетчик тайм-аута и возвращает управление диспетчеру задач с тем, чтобы он поставил на процессор готовую к исполнению задачу. Система работает своим чередом, но когда устройство в/в отработает посланную ему команду, оно выставляет сигнал запроса на прерывания, по которому через таблицу прерываний управление передается на секцию продолжения. Получив новую команду, устройство вновь начинает ее обрабатывать, а управление процессором опять передается диспетчеру задач, и процессор продолжает полезную работу. Таким образом, получается параллельная обработка задач, на фоне которой процессор осуществляет управление операциями ввода/вывода.

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

Задача, выдавшая запрос на операцию в/в, переводится супервизором в состояние ожидания завершения заказанной операции. Когда супервизор получает от секции завершения сообщение о том, что операция завершилась, он переводит задачу в состояние готовности к выполнению, и она продолжает свою работу. Эта ситуация соответствует синхронному в/в. Он является стандартным для большинства ОС.

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

Средняя скорость работы процессора с оперативной памятью на 2-3 порядка выше, чем средняя скорость передачи данных на магнитных дисках в оперативную память. Чтобы сгладить такое сильное несоответствие в производительности основных подсистем, используется буферирование и/или кэширование данных. Простейшим вариантом ускорения дисковых операций чтения данных можно считать использование двойного буферирования. Его суть заключается в том, что пока в один буфер заносятся данные с магнитного диска, из второго буфера, ранее считанные данные могут быть прочитаны и переданы запросившей их задаче. Аналогичный процесс происходит и при записи данных. Буферирование используется во всех ОС, но помимо буферирования применяется и кэширование. Кэширование исключительно полезно, когда программа неоднократно читает с диска одни и те же данные. После того как они будут помешены в кэш, обращений к диску больше не потребуется и скорость работы программы значительно возрастет.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]