A one bit signal from the device was interpreted by the channel to cause conditional skipping of the following channel command. Thus a degree of conditional programs were possible. There was an unconditional branch in the channel program repertoire.
Keykos followed the practice of IBM’s conventional operating systems and VM 370 in translating channel programs from user supplied channel programs, with virtual addresses, into channel programs with corresponding real addresses. The channel then obeyed the translated program. The integrity of real core was thus protected. The channel architecture is describe more fully here along with a bug that is likely to creep into programs that translate channel programs and their conceptual counterparts. There was no device specific code in the kernel except a small amount to drive the disks for purposes of swapping.
On the largest 370s, the channels were real pieces of hardware that worked really as they did conceptually. On the smaller systems much of the channel was the figment of the imagination of the micro-code. On these smaller systems the micro-code would become involved every 128 bytes, or so, to deal with the transfer. Such events were called “breakins” by the hardware designers and were invisible to the privileged code and most of the micro code. More substantial micro-code involvement happened between the execution of channel commands. Yet the illusion of real channels was rather perfectly maintained even to the privileged code.
Early and large IO devices are connected by bus and tag cables with published specifications. Later there were systems with some I/O devices integrated into the system without bus and tag cables. The difference was invisible to the privileged code.
Systems commonly had several channels, most with bus and tag interfaces. They were logically independent. A device would be attached to just one channel until the advent of the two channel switch whereupon a device could attach to two channels at once for better thru-put and availability. Furthermore an I/O operation could begin on one channel even while previous channel programs proceeded. The real facilities of the channel and cables, were timeshared.
Micro-code allowed IBM to make systems whose capacity ranged over three orders of magnitude appear remarkable alike to even the privileged code.
There are standards that bring some uniformity to the later world of SCSI 3.0 and this may reduce the amount of privileged code and perhaps eliminate the need for kernel code that is device savvy. Among these are standards that say what a SCSI disk should respond to in the way of SCSI commands. Other standards are for SCSI tape. I do not know which commercial SCSI I/O devices conform to these standards.
We shall see.