IBM I/O channel
IBM I/O channels (also called the Bus and Tag interface), starting with the IBM System/360 (although its precursors stretch back to the IBM 709), were intended to connect all manner of peripherals to the systems, from low speed devices like line printers and punched card readers and punches, to high speed mass storage devices like disks and magnetic tape drives. The channel interface allowed a device controller to connect to a channel on an IBM mainframe; the channel could transfer data to the main memory of the machine with DMA, and interrupt the CPU.
Channels were programmable, but were limited in functionality; they were finite state machines, with conditional branching capability. The individual operations are called channel command words; they were stored in main memory, and were organized into channel programs. Some channels provided multiple 'subchannels', which gives the illusion of a separate channel controller for each subchannel (each subchannel had its own channel program). (In reality, a single channel controller is shared between the subchannels.)
Channels came in selector, byte multiplexer and block multiplexer forms; they supported different levels of concurrency among the devices attached to the channel. (The variants were apparently the same at the interface level; they differed in how they were handled in the channel controller.)
A selector channel handles high-speed devices such as disks and magnetic tape drives, and supports only a single subchannel, which operates a single device at a time; transfers pass an entire block in one operation. A byte multiplexer channel handles a group of slow-speed devices (on up to 255 subchannels), and interleaves operations to each of them, with each transfer handling single small data item (e.g. a byte). The later block multiplexer channel had aspects of both; it was shared among several subchannels, but each device monopolized the channel during a block transfers. It was particularly suitable for devices which interspersed bursts of high-speed transfers with periods of quiet; e.g. during rotational delays of disks.
On low-end systems, the channel was implemented by microcode in the CPU; on high-end systems, the channels were discrete physical processors.
At the hardware level, the channel interface was asynchronous, and transfers between the channel and the device controller initially used a four-way handshake. That limited the speed, especially on physically large systems; it was later changed to use a two-way handshake. Initially, it was 8 bits wide; a later variant doubled that to 16 bits, to increase transfer speeds.
It is physically instantiated as a pair of large multi-conductor cables, one of which (called the 'bus') carried data (two of these in the 8-bit wide variant), and the other of which (called the 'tag' - hence the name) carried control signals. The cables run from one controller to another; the last holds a terminator. The controllers were only logically separated from the device(s); they might be integrated into a single unit.
The interface specification allowed OEMs to provide peripherals that could be connected to a System/360 machine. (IBM made the channel interface specification publicly available when the System/360 was announced, for this purpose.) The channels later appeared on IBM System/370s and compatible machines, as well as others; some manufacturers provided them on their machines as a way to connect IBM-compatible peripherals from OEMs to them.
- DX10 Data Channel
- DX20 Programmed Device Adapter
- DX11-B System 360/370 Channel to PDP-11 Unibus Interface
- IBM System/360 I/O Interface Channel to Control Unit Original Equipment Manufacturers' Information (A22-6843-3)
- IBM System/360 and System/370 I/O Interface Channel to Control Unit Original Equipment Manufacturers' Information (GA22-6974-4)
- I/O Channel Interface (FIPS PUB 60-1; ANSI X3T9/600 Rev. 2)
- I/O Channel Interface (FIPS PUB 60-2)