In MVS/370 and successor versions of IBM mainframe operating systems, Start Input/Output (STARTIO) is a macro instruction and a "branch entry" 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 and a number of "exits", several of which may be immediate returns to the Input/Output Supervisor (IOS). Invokers of STARTIO must be in supervisor mode and key 0. STARTIO interfaces directly with the IOS component of MVS.
Differences from Execute Channel Program (EXCP)
Start Input/Output differs from EXCP (including XDAP, which is simply a DASD-only subset of EXCP) and EXCPVR in the following fundamental way: Start Input/Output is applicable to any device type and any dataset organization and is extensible to devices and dataset organizations yet to be announced whereas Execute Channel Program is applicable only to legacy device types and legacy dataset organizations and is not extensible. Additionally, Start Input/Output is usable in TCB mode only (if the "exits" are immediate returns to IOS, and the "termination routine" POSTs the operation complete), in a combination of TCB mode and SRB mode, or in SRB mode only, whereas Execute Channel Program is usable in TCB mode only.
Initiation and Completion Sequences
STARTIO's initiation sequence, usually referred to as its "front end", may be in TCB mode or in SRB mode. STARTIO's termination sequence, usually referred to as its "back end", is always in SRB mode.
STARTIO always utilizes an SRB/IOSB pair. The SRB (Service Request Block) is utilized to schedule processor activity, as required, on any available processor, in connection with the related I/O request, as the I/O request is not necessarily run by the processor in which the caller is running (indeed, in most cases it will not be). The IOSB (Input/Output Supervisor Block) describes the related I/O request, and passes parameters to and receives responses from IOS.
De facto Support, versus non-Support
Although use of STARTIO by customers is not supported by IBM, nevertheless its macro instruction and its associated "branch entry" have remained remarkably stable throughout the forty-year-long (as of 2014) transition from MVS/370 to z/OS, as STARTIO is the sole method of performing lowest-level physical I/O operations on channel-attached devices on MVS/370 and subsequent instances of the OS. In particular, VSAM and VTAM use STARTIO, as, of course, do EXCP, XDAP and EXCPVR, and certain instances of IMS/VS and JES, most particularly where Channel-to-Channel operations are involved.
Changes from MVS/370 and Successors to ES/390 and z/OS
An additional "branch entry" was added in ES/390, which performs essentially the same function as the original, which was retained for compatibility with existing programs. This additional "branch entry" implicitly obtains the address of the related TCB (from PSATOLD), rather than explicitly obtaining it (from the TCB= keyword parameter) as the original "branch entry" did.
Should a catastrophic error occur during IOS's processing of the related I/O request, it is this TCB, usually the caller's "job step" TCB, which will be abnormally terminated, not whichever TCB happened to be active when the error was detected, which, by the basic design of IOS, which is run asynchronously to all tasks and all address spaces, could be any TCB in any address space, or, indeed, no TCB at all, e.g., an SRB, or, perhaps more likely, the System Wait Task (which runs in the OS Master Scheduler's address space).
Perhaps the best description of STARTIO and its application is a "white paper" entitled "The [ Start Input/Output Interface ] of MVS", written by Peter Haas, then with Amdahl Corp (subsequently liquidated). Haas's "white paper" contained an application program example which illustrated the required and optional parameters and exits employed by the STARTIO interface.
- Amdahl Corp, Sunnyvale, California, MVS Support Team Technical Topics, Vol. 1, No. 2