Россия |
Реализация базовых функций z/OS
Управление вводом-выводом
В основе системы организации ввода-вывода в z/OS лежит канальная архитектура и связанные с ней аппаратные компоненты, описанные в главе 2. На уровне операционной системы представлены две группы средств, обеспечивающих поддержку выполнения операций ввода-вывода: средства описания и конфигурирования устройств и средства управления потоками данных.
Для описания конфигурации подключенного оборудования и устройств ввода-вывода, а также их динамической реконфигурации используются упоминавшиеся ранее диалоговые компоненты HCD или HCM. Результатом их применения является построение набора данных IODF (Input/Output Definition File), в котором определены параметры устройств ввода-вывода, используемые канальной подсистемой и z/OS. Канальная подсистема получает необходимую для работы информацию с помощью программы для описания оборудования IOCP (Input/Output Configuration Program), которая на основе IODF формирует конфигурационный набор данных параметров оборудования, подключенного к канальной подсистеме IOCDS (Input/Output Configuration Data Set). z/OS использует содержимое IODF на этапе начальной загрузки и инициализации (см. выше).
Управление потоками данных при вводе-выводе построено на основе гибкой многоуровневой модели [ 5.7 ] . На рис. 5.13 показана типичная схема обработки запросов ввода-вывода на примере приложения, использующего данные, хранящиеся на устройстве DASD.
Приложение MYPRG, представленное в адресном пространстве AS, запускается с помощью пакетного задания, которое содержит описание используемого набора данных с именем MYDATA (оператор DD ). Операции ввода-вывода представлены в тексте приложения в виде макровызовов OPEN, GET, PUT, CLOSE. На языках высокого уровня данные макровызовы генерируются компилятором при обращении к соответствующим функциям ввода-вывода. Макровызов OPEN выполняется перед началом процесса ввода-вывода для построения специальных управляющих блоков - блока управления данными DCB (Data Control Block) и блока размещения данных DEB (Data Extent Block). DCB содержит информацию о параметрах набора данных (имя, тип, устройство и т.п.), представленную в специальном одноименном макровызове DCB. Эти параметры могут быть дополнены и откорректированы в операторе языка управления заданиями DD, связанном с соответствующим DCB. DEB содержит информацию о размещении набора данных, включая адрес устройства и характеристики выделенного набору данных пространства внешней памяти.
Указанные управляющие блоки используются при выполнении операций ввода-вывода, которые осуществляются с помощью макровызовов чтения (ввода) GET и записи (вывода) PUT. Исполнение макросов GET/PUT начинается с передачи управления программе метода доступа, указатель на которую хранится в DCB. Метод доступа (access method) представляет собой своеобразный интерфейс между приложением и его данными, благодаря которому приложение работает на логическом уровне представления данных, вне зависимости от их физической организации. Программа метода доступа размещается в области LPA адресного пространства и берет на себя выполнение множества важных функций, таких как:
- создание буферов ввода-вывода в адресном пространстве приложения;
- синхронизация операций ввода-вывода;
- построение канальной программы;
- оптимизация характеристик производительности контроллера (например, за счет организации кэширования данных);
- сжатие и распаковка данных;
- восстановление программ при возникновении ошибок;
- обмен данными с приложением.
В z/OS поддерживается несколько методов доступа, предназначенных для обслуживания наборов данных и устройств определенного типа. Чаще всего используются следующие методы доступа:
- QSAM, BSAM - для обработки последовательных наборов данных и разделов библиотек;
- BPAM - для обработки библиотечных наборов данных (PDS и PDSE);
- VSAM - для обработки наборов данных VSAM;
- OAM - для обработки не разделенных на логические записи потоков данных (объектов), хранящихся в СУБД DB2 и на оптических носителях;
- VTAM - для организации сетевого ввода-вывода.
Каждый из представленных методов доступа реализует собственный алгоритм записи/чтения данных и располагает специфическим набором макрокоманд и утилит для организации ввода-вывода.
Наряду с выполнением представленных выше функций программа метода доступа создает управляющие блоки IOB и ECB. Управляющий блок ввода-вывода IOB (Input/Output Block) содержит указатели на все связанные с данной операцией ввода-вывода управляющие блоки и, самое важное, - на канальную программу. Канальная программа (channel program) создается программой метода доступа и состоит из последовательности канальных команд CCW, описывающих всю процедуру ввода-вывода, включая адреса области памяти, куда (откуда) пересылаются данные, а также объем передаваемых данных (см. п. 2.2).
Далее через вызов соответствующего SVC прерывания управление передается драйверу, который реализует интерфейс между методом доступа и супервизором ввода-вывода IOS. Блок управления событиями ECB (Event Control Block) служит для синхронизации работы метода доступа и драйвера. Когда в следующий раз метод доступа получит управление от диспетчера, он с помощью макровызова WAIT будет ждать сигнала от драйвера о завершении операции ввода-вывода.
Для большинства методов доступа, не использующих наборы данных VSAM, применяется так называемый драйвер EXCP (EXecute Channel Program), вызываемый одноименной макрокомандой. Драйвер резервирует в основной памяти страницы, которые будут использоваться для перемещения данных и размещения канальной программы и объявляет их фиксированными (неперемещаемыми) на время выполнения операций, корректируя соответствующим образом адреса канальной программы.
Затем управление передается супервизору ввода-вывода IOS (Input Output Supervisor), который обеспечивает взаимодействие z/OS c канальной подсистемой, выполняя следующие функции:
- проверка доступности устройства и определение оптимального канального пути;
- формирование очереди ожидания, если есть запросы от других приложений;
- запуск канальной программы с помощью машинной команды SSCH.
Канальная подсистема выполняет канальную программу, обеспечивая физический перенос данных между основной памятью и устройством с помощью аппаратного контроллера (CU) и канальных путей. Завершая операцию, канальная подсистема формирует прерывание ввода-вывода, предварительно записав код завершения операции в специальный управляющий блок IRB (Interrupt Response Block). Обработчик прерывания через SRB-запрос запускает программу оповещения супервизора ввода-вывода IOS, которая передает управление драйверу. Драйвер сигнализирует методу доступа о завершении операции ввода-вывода, который, в свою очередь, получив управление от диспетчера, возвращает управление пользовательскому приложению. После этого приложение, наконец, может продолжить свою работу. При наличии ошибок могут срабатывать программы восстановления, представленные в составе супервизора.
Следует отметить, что данный пример демонстрирует общие принципы обработки запросов на ввод-вывод средствами операционной системы z/OS, хотя в отдельных случаях могут быть некоторые отличия от представленной схемы.