В операционных системах мэйнфреймов IBM Execute Channel Program ( EXCP ) — это макрос , генерирующий системный вызов , реализованный как инструкция Supervisor Call для доступа к устройствам низкого уровня, где программист отвечает за предоставление программы канала — списка команд, специфичных для устройства (CCW), — которые должны быть выполнены каналами ввода-вывода, блоками управления и устройствами. [1] [2] EXCP для OS/360 и последующих версий [3] [4] более подробно описан в Руководстве программиста ОС; [5] EXCP для DOS/360 и последующих версий [6] более подробно описан в DOS Supervisor и макросы ввода-вывода. [7] [8] Эта статья в основном отражает OS/360 через z/OS ; некоторые детали отличаются для TOS/360 и DOS/360 через z/VSE .
Используя EXCP, устаревшие устройства и устаревшие наборы данных могут работать с относительно высокой производительностью. Устройства EXCP ОТКРЫТЫ (то есть, доступны приложению) путем указания блока управления данными (DCB) для ОС и DTFPH для DOS.
Для OS/360 через z/OS программа предоставляет блок ввода/вывода (IOB) для EXCP; если программа выполняет EXCP для нескольких IOB, система обрабатывает их в том порядке, в котором они были запрошены. Для DASD IOB включает адрес поиска IOBSEEK в формате MBBCCHHR, где M — экстент, BB — бин для ячейки данных, CCHH — цилиндр и головка, а R — номер записи.
«Придаток — это написанная программистом процедура, которая обеспечивает дополнительный контроль над операциями ввода-вывода во время выполнения программы канала». [9] Полный список придатков [10] ( выходы в контексте EXCP) позволяет авторизованным программам [a] переопределять или дополнять многие проверки безопасности системы и целостности данных. Большинство этих придатков поддерживаются для совместимости с более ранними экземплярами ОС, но функции некоторых из них были изменены или расширены для MVS. Придатки указаны в DCB как последние два символа имени модуля IGG019xx, где xx = WA до Z9 включительно. Эти имена модулей зарезервированы для придатков, написанных при установке. Любое другое имя формы IGG019xx зарезервировано для использования методами доступа IBM. [12] Придатки должны находиться в SYS1.SVCLIB (SYS1.LPALIB в SVS или более поздних экземплярах ОС).
Обычно, когда программа ОТКРЫВАЕТ DCB для EXCP, OPEN создает блок экстентов данных (DEB), содержащий каждый экстент для первого тома связанного набора данных; однако для параллельного монтирования OPEN создает DEB, содержащий все экстенты для всех томов. Каждый DEB напрямую и обратно связан с DCB, и EXCP проверяет цепочку в качестве меры безопасности системы, поскольку DCB находится в незащищенном пользовательском хранилище, тогда как DEB находится в защищенном системном хранилище, Subpool 253; в OS/VS1 и OS/VS2 EXCP использует DEBCHK, чтобы убедиться, что DEB был создан OPEN. Для DASD EXCP проверяет, находится ли адрес поиска в IOB в пределах одного из экстентов, и использует маску Set File Mask , например, для указания того, ориентирован ли экстент на цилиндр или дорожку, разрешена ли запись; это предотвращает поиск за пределами указанной дорожки (цилиндра). Если программист пытается выполнить чтение после конца дорожки (цилиндра), происходит проверка блока , и восстановление после ошибки перезапускает канальную программу со следующей дорожкой (цилиндром) текущего экстента. Если операция выходит за конец экстента, EXCP вызывает дополнение конца экстента , которое может обновить IOB и запросить, чтобы EXCP повторно выдал запрос или чтобы EXCP завершил его.
EXCP иногда путают с методом доступа к устройствам хранения данных с прямым доступом, но он не предназначен исключительно для устройств хранения данных с прямым доступом; скорее, это низкоуровневый интерфейс доступа к устройствам общего назначения, который поддерживает любой устаревший тип устройства и любую устаревшую организацию набора данных. Для доступа ко всем типам устройств и всем организациям наборов данных в MVS/370 и последующих экземплярах ОС доступен более общий интерфейс Start Input/Output (STARTIO), хотя он официально не поддерживается.
Разновидностью EXCP является Execute Direct Access Program (XDAP), которая используется только для доступа к хранилищу с прямым доступом и предоставляется для чтения и обновления существующих записей хранилища с прямым доступом. XDAP нельзя использовать для добавления записей, но XDAP можно использовать вместе с BSAM или BPAM для добавления записей в такие наборы данных, и несколько компонентов ОС используют XDAP таким образом (в частности, Linkage Editor, IEWL).
EXCP также может использоваться для доступа к коммуникационным устройствам, подключенным к коммуникационным контроллерам IBM 2701 , 2702 и 2703 и процессорам IBM 370x или Amdahl 470x (и их соответствующим последователям), работающим в режиме эмулятора (EP) или режиме разделенного эмулятора (PEP).
Интерфейс EXCP всегда находится в режиме блока управления задачами (TCB), обычном режиме для приложений, [13], поскольку EXCP представляет собой SVC типа 1 .
В MVS/370 и последующих экземплярах ОС процессор EXCP вызывает STARTIO для планирования выполнения программы канала. Хотя бэкенд процессора EXCP всегда находится в режиме Service Request Block [b] (SRB), [13] бэкенд содержит код эмуляции, который позволяет дополнениям, разработанным для более ранних, до-MVS экземпляров ОС, в частности для EXCP, функционировать в основном так же, как и раньше, и, таким образом, казаться находящимися в режиме TCB, для которого эти дополнения изначально были разработаны. Это различие может усложнить преобразование определенных методов доступа и приложений roll-your-own в MVS.
Программы канала System/360 представляют собой последовательность команд, которые выполняются каналом и устройством ввода-вывода. Программы канала могут располагаться в любом месте основной памяти. Программа канала представляет собой последовательность слов команд канала (CCW), которые могут выполняться последовательно, если только не выполняется ветвь, называемая Transfer In Channel (TIC), или канал не возвращает модификатор состояния . Каждое CCW представляет собой двойное слово (восемь байтов) следующим образом: [14]
бит 0 7 8 31 +--------+-----------------------+ |Команда | Адрес данных | +--------+-----------------------+ 32 36 40 47 48 63 +------+---+--------+------------+ |Флаги |000|зарезервировано| количество | +------+---+--------+------------+Шесть команд определены в младших битах поля команды (0-7). Старшие четыре (или шесть) бита являются ''модификаторами'' ('M') для некоторых команд или игнорируются. Команды следующие: 0100 - Чувство 1000 - Передача в канале (TIC) 1100 - Читать в обратном порядке --01 - Написать --10 - Читать --11 - Контроль
Адрес данных (8-31) — это 24-битный адрес области буфера основного хранилища, в которую или из которой должны быть переданы данные.
Биты флага (32-36) определяются следующим образом:
Кусочек | ИДЕНТИФИКАТОР | Имя | Описание |
---|---|---|---|
32 | компакт-диск | Данные цепочки | Используйте область хранения, указанную в следующем CCW, чтобы продолжить эту команду. |
33 | СС | Цепная команда | Выполнить следующую последовательную CCW после завершения этой команды, если CC или CD не установлены, программа канала завершается после выполнения этой команды |
34 | СЛИ | Подавить индикацию длины | Игнорировать неверную длину для этой команды |
35 | ПРОПУСКАТЬ | Пропускать | Подавить передачу данных для этой команды |
36 | PCI | Прерывание, контролируемое программой | Генерировать прерывание, когда эта команда начинает выполняться |
Поле количества (48-63) указывает количество байтов, которые будут переданы этой командой.
Все восемь бит команд, инициирующих операции ввода-вывода, передаются устройству. «Биты модификатора указывают устройству, как должна выполняться команда». Например, для IBM 2305 DASD команда записи ('MMMMMM01'BX) может иметь следующие значения: [15]
Значение бита | Шестнадцатеричный | Описание |
---|---|---|
0001 1001 | '19'X | Напишите домашний адрес |
0001 0101 | '15'X | Запись записи 0 |
0001 0001 | '11'X | Стереть |
0001 1101 | '1D'X | Количество записей, ключ и данные |
0000 0001 | '01'X | Запись специального количества, ключа и данных |
0000 0101 | '05'X | Запись данных |
0000 1101 | '0D'X | Запись ключа и данных |