Гордеев А.В. Операционные системы (2-е изд., 2004) (1186250), страница 37
Текст из файла (страница 37)
Поскольку во многих операционных системах драйверымогут обладать свойством реентерабельности (напомним, это означает, что одини тот же экземпляр драйвера может обеспечить параллельное обслуживание сразунескольких однотипных устройств), то в элементе UCB должна храниться либонепосредственно сама информация о текущем состоянии устройства и сами переменные для реентерабельной обработки, либо указание на место, где такая информация может быть найдена. Наконец, важнейшим компонентом элемента таблицыоборудования является указатель на дескриптор той задачи, которая в настоящиймомент использует данное устройство.
Если устройство свободно, то поле указателя будет иметь нулевое значение. Если же устройство уже занято и рассматриваемый указатель не нулевой, то новые запросы к устройству фиксируются посредством образования списка из дескрипторов задач, ожидающих данное устройство.торая таблица предназначена для реализации еще одного принципа виртуализации устройств ввода-вывода — принципа независимости от устройства. Желатель°> Чтобы программисту не приходилось учитывать конкретные параметры (и/или0зМожности) того или иного устройства ввода-вывода, которое установлено (илиУстановлено) в компьютер. Для него должны быть важными только самые общие3Можности, характерные для данного класса устройств ввода-вывода. Например,140Глава 5.
Управление вводом-выводом в операционных системахпринтер должен уметь выводить (печатать) символы или графические изображения. А накопитель на магнитных дисках — считывать или записывать порцию данных по указанному адресу, то есть в координатах C-H-S (Cylinder-Head-Sector —номера цилиндра, головки и сектора) или по порядковому номеру блока данных.Хотя чаще всего программист и не использует прямую адресацию при работе смагнитными дисками, а работает на уровне файловой системы (см.
главу 6). Однако в таком случае уже разработчики системы управления файлами не должнызависеть от того, каких типа и модели накопитель используется в данном компьютере и кто является его производителем (например, HDD IBM IC35L120AVV207-0,WD1200JB или еще какой-нибудь). Важным должен быть только сам факт существования накопителя, имеющего некоторое количество цилиндров, головокчтения-записи и секторов на дорожке магнитного диска. Упомянутые значенияколичества цилиндров, головок и секторов должны быть взяты из элемента таблицы оборудования. При этом для программиста также не должно иметь значения, каким образом то или иное устройство подключено к вычислительнойсистеме. Поэтому в запросе на ввод-вывод программист указывает именно логическое имя устройства.
Действительное устройство, которое сопоставляется виртуальному (логическому), выбирается супервизором с помощью описываемойтаблицы.Итак, способ подключения устройства, его конкретная модель и соответствующийей драйвер содержатся в уже рассмотренной таблице оборудования. Но для тогочтобы связать некоторое виртуальное устройство, использованное программистом,с системной таблицей, отображающей информацию о том, какое конкретно устройство и каким образом подключено к компьютеру, требуется вторая системнаятаблица. Назовем ее условно таблицей виртуальных логических устройств (DeviceReference Table, DRT).
Назначение этой второй таблицы — установление связимежду виртуальными (логическими) устройствами и реальными устройствами,описанными посредством первой таблицы (таблицы оборудования). Другими словами, вторая таблица позволяет супервизору перенаправить запрос на ввод-выводиз приложения в те программные модули и структуры данных, которые (или адреса которых) хранятся в соответствующем элементе первой таблицы. Во многихмногопользовательских системах таких таблиц несколько: одна общая и по однойна каждого пользователя, что позволяет строить необходимые связи между логическими устройствами (символьными именами устройств) и реальными физическими устройствами, которые имеются в системе.Наконец, третья таблица — таблица прерываний — необходима для организацииобратной связи между центральной частью и устройствами ввода-вывода. Эта таблица указывает для каждого сигнала запроса на прерывание тот элемент UCB, который сопоставлен данному устройству.
Каждое устройство либо имеет свою линиюзапроса на прерывание, либо разделяет линию запроса на прерывание с другимиустройствами, но при этом имеется механизм второго уровня адресации устройствввода-вывода. Таким образом, таблица прерываний отображает связи между сигналами запроса на прерывания и самими устройствами ввода-вывода. Как и системная таблица ввода-вывода, таблица прерываний в явном виде может и не присутствовать. Другими словами, можно сразу из основной таблицы прерывании141Основные системные таблицы ввода-выводакомпьютера передать управление на программу обработки (драйвер), связаннуюс элементом UCB. Важно наличие связи между сигналами прерываний и таблицей оборудования.В ряде сложных операционных систем, а к ним следует отнести все современные32-разрядные системы для персональных компьютеров, имеется гораздо большесистемных таблиц или списков, используемых для организации управления операциями ввода-вывода.
Например, одной из возможных и часто реализуемых информационных структур, сопровождающих практически каждый запрос на вводвывод, является блок управления данными (Data Control Block, DCB). НазначениеDCB — подключение препроцессоров к процессу подготовки данных на ввод-вывод, то есть учет конкретных технических характеристик и используемых преобразований. Это необходимо для того, чтобы имеющееся устройство получало некакие-то непонятные ему коды или форматы данных, не соответствующие режиму его работы, а коды и форматы, созданные специально под данное устройство.Теперь такие препроцессоры часто называют высокоуровневыми драйверами, илипросто драйверами, хотя изначально под термином «драйвер» подразумеваласьпрограмма управления операциями ввода-вывода.Взаимосвязи между описанными таблицами изображены на рис.
5.2.Таблицалогических именТаблицаоборудованияТаблицапрерываний1-й элемент1-йисв1-й элемент•..i-й элементj-й UCBh-й элемент•••j-й элементк-й UCBg-й элемент•••п-й UCBРис. 5.2. Взаимосвязи системных таблиц ввода-выводаНам осталось рассмотреть процесс управления вводом-выводом еще раз, теперь сУчетом изложенных принципов (рис. 5.3).•запрос на операцию ввода-вывода от выполняющейся программы поступает насупервизор задач (шаг 1). Этот запрос представляет собой обращение к операционной системе и указывает на конкретную функцию API. Вызов сопровождаетсянекоторыми параметрами, уточняющими требуемую операцию. Модуль операционной системы, принимающий от задач запросы на те или иные действия, часто142Глава 5. Управление вводом-выводом в операционных системяуназывают супервизором задач.
Не следует путать его с диспетчером задач. Супервизор задач проверяет системный вызов на соответствие принятым спецификациям и в случае ошибки возвращает задаче соответствующее сообщение (шаг 1-1)Если же запрос корректен, то он перенаправляется в супервизор ввода-вывода(шаг 2). Последний по логическому (виртуальному) имени с помощью таблицыDRT находит соответствующий элемент UCB в таблице оборудования. Если устройство уже занято, то описатель задачи, запрос которой обрабатывается супервизором ввода-вывода, помещается в список задач, ожидающих это устройство.
Еслиже устройство свободно, то супервизор ввода-вывода определяет из UCB тип устройства и при необходимости запускает препроцессор, позволяющий получитьпоследовательность управляющих кодов и данных, которую сможет правильнопонять и отработать устройство (шаг 3). Когда «программа» управления операцией ввода-вывода будет готова, супервизор ввода-вывода передает управление соответствующему драйверу на секцию запуска (шаг 4). Драйвер инициализируетоперацию управления, обнуляет счетчик тайм-аута и возвращает управление супервизору (диспетчеру задач) с тем, чтобы он поставил на процессор готовую кисполнению задачу (шаг 5).
Система работает своим чередом, но когда устройствоввода-вывода отработает посланную ему команду, оно выставляет сигнал запросана прерывание, по которому через таблицу прерываний управление передается насекцию продолжения (шаг 6). Получив новую команду, устройство вновь начинает ее обрабатывать, а управление процессором опять передается диспетчеру задач,и процессор продолжает выполнять полезную работу. Таким образом, получаетсяпараллельная обработка задач, на фоне которой процессор осуществляет управление операциями ввода-вывода.12Супервизорввода-выводаСупервизорпрограмм1-1ПрикладнаяпрограммаДиспетчерзадач4к ,i.Драйверустройстваввода-вывода(секцияпродолжения)2'Таблица UCB>'DRTТаблицалогических(виртуальных)именустройствввода-вывода•5Элемент UCB•i13>ГУстройствоввода-вывода4iПрепроцессорввода-вывода'—^кДрайверустройстваввода-вывода(секциязапу ска;Рис.
5.3. Процесс управления вводом-выводом6СупервизорпрерыванийСинхронный и асинхронный ввод-вывод143Очевидно, что если имеются специальные аппаратные средства для управлениявводом-выводом (речь идет о каналах прямого доступа к памяти), которые позволяют освободить центральный процессор от этой работы, то в функции центрального процессора будут по-прежнему входить все только что рассмотренные шаги,за исключением последнего — непосредственного управления операциями вводавывода.
В случае использования каналов прямого доступа в память последние исполняют соответствующие канальные программы и освобождают центральныйпроцессор от непосредственного управления обменом данными между памятьюи внешними устройствами.Синхронный и асинхронный ввод-выводЗадача, выдавшая запрос на операцию ввода-вывода, переводится супервизоромв состояние ожидания завершения заказанной операции. Когда супервизор получает от секции завершения сообщение о том, что операция завершилась, он переводит задачу в состояние готовности к выполнению, и она продолжает выполняться.
Эта ситуация соответствует синхронному вводу-выводу. Синхронный ввод-выводявляется стандартным для большинства операционных систем. Чтобы увеличитьскорость выполнения приложений, было предложено при необходимости использовать асинхронный ввод-вывод.Простейшим вариантом асинхронного вывода является так называемый буферизованный вывод данных на внешнее устройство, при котором данные из приложенияпередаются не непосредственно на устройство ввода-вывода, а в специальный системный буфер — область памяти, отведенную для временного размещения передаваемых данных.
В этом случае логически операция вывода для приложения считается выполненной сразу же, и задача может не ожидать окончания действительногопроцесса передачи данных на устройство. Реальным выводом данных из системного буфера занимается супервизор ввода-вывода. Естественно, что выделениебуфера из системной области памяти берет на себя специальный системный процесс по указанию супервизора ввода-вывода. Итак, для рассмотренного случаявывод будет асинхронным, если, во-первых, в запросе на ввод-вывод указано нанеобходимость буферизации данных, а во-вторых, устройство ввода-вывода допускает такие асинхронные операции, и это отмечено в UCB.Можно организовать и асинхронный ввод данных.
Однако для этого необходимо нетолько выделять область памяти для временного хранения считываемых с устройства данных и связывать выделенный буфер с задачей, заказавшей операцию, нои сам запрос на операцию ввода-вывода разбивать на две части (на два запроса),о первом запросе указывается операция на считывание данных, подобно тому какэто делается при синхронном вводе-выводе, однако тип (код) запроса используется другой, и в запросе указывается еще по крайней мере один дополнительныйПараметр — имя (код) системного объекта, которое получает задача в ответ на запрос и которое идентифицирует выделенный буфер.