Execute Channel Program
This article needs additional citations for verification. (June 2012) (Learn how and when to remove this template message)
In IBM mainframe operating systems, Execute Channel Program (EXCP) is a supervisor call for low-level device access, where the programmer is responsible for providing a list of device-specific CCWs, that is, a channel program, to be executed by I/O channels, control units and devices. EXCP is more specifically described in the OS System Programmer's Guide.
Using EXCP, legacy devices and legacy datasets may be operated on with relatively high performance. EXCP devices are OPENed (that is, are made available to the application) by specifying MACRF=(E) in the Data Control Block.
A comprehensive list of "exits" (called appendages) allows authorized programs to override or augment many of the system security and data integrity checks. Most of these exits (really, closed subroutines) are supported for compatibility with earlier instances of the OS, but the functions of several have been modified or extended for MVS. The exits are specified in the DCB as the last two characters of the module name IGG019xx. where xx = WA to Z9 inclusive. These module names are reserved for user-written appendages. Any other name of the form IGG019xx is reserved for use by IBM access methods. Appendages must reside in SYS1.SVCLIB (SYS1.LPALIB in SVS or later instances of the OS).
Normally, when a device is OPENed for EXCP, only the first "extent" is represented in the DEB (which is forward- and backward-chained to the DCB as a system security measure as the DCB resides in unprotected user storage whereas the DEB resides in protected system storage, Subpool 253). If, for example, the programmer tries to read past the end of an extent, an exception occurs and the operation is suppressed, thereby preventing a data integrity exposure. Should the DEB include additional extents, the channel program may be updated by the programmer to refer to the next extent and the EXCP may be reissued, or the end of extent exit appendage, if provided, may update the channel program to the next extent and the operation may be re-driven without first going through the EXCP processor.
Legacy datasets only
EXCP is sometimes confused with a direct access storage access method, but it is not for direct access devices exclusively; rather, it is a general purpose low-level device access interface which supports any legacy device type and any legacy dataset organization. For accessing all device types and all dataset organizations, the more general Start Input/Output interface (STARTIO) is available in MVS/370 and subsequent instances of the OS although it is not an officially supported interface.
Simplified operations on direct access datasets
A variation of EXCP is XDAP, which is indeed for accessing direct access storage, only, and is provided for reading and updating existing direct access storage records. XDAP cannot be used to add records, but XDAP can be utilized along with BSAM or BPAM to effect record additions to such datasets, and several OS components utilize XDAP in this manner (the Linkage Editor, IEWL, in particular).
Telecommunications device access
EXCP may also be used to access communications devices attached to IBM 2701, 2702 and 2703 communications controllers and IBM 370x or Amdahl 470x front-end processors (and their respective follow-ons) operating in emulator mode (EP) or partitioned emulator mode (PEP).
Relationship to supervisor
EXCP's front-end is always in TCB mode, as EXCP is a Type 1 SVC. In MVS/370 and subsequent instances of the OS, the EXCP processor invokes STARTIO to schedule execution of the channel program. Although the EXCP processor's back-end is always in SRB mode, the back-end contains emulation code which allows the appendages developed for earlier, pre-MVS instances of the OS, specifically for EXCP, to function largely as before and thereby to appear to be in TCB mode, for which these appendages were originally designed. This distinction can complicate conversion of certain "roll-your-own" access methods and applications to MVS.
- IBM System/360 Operating System System Programmer's Guide (PDF). IBM. March 1967. C28-6550-2.
- IGG = I/O Support component prefix; 019 = Open SVC sub-component; others include 020 and 055; xx = sub-function