[TUHS] UNIX on S/370

Larry McVoy lm at mcvoy.com
Tue Nov 21 05:56:18 AEST 2017

On Mon, Nov 20, 2017 at 02:44:03PM -0500, Paul Winalski wrote:
> System/360/370 had a radically different I/O model.  I/O devices and
> their control units were connected to specialized coprocessors called
> I/O channels.  Devices were addressed via a number with three hex
> digits, the first of which was the channel number.  The CPU had an
> instruction called start I/O (SIO) that took as parameters a device
> address and the address of a series of channel command words (CCWs)
> that indicated to the channel the I/O operation to perform and its
> parameters (such as the address of the I/O buffer in main memory).
> The CPU was notified of I/O termination by three interrupts:
> channel-end (the I/O channel reached the end of its channel program),
> control-unit-end (the I/O control unit completed a command), and
> device-end (the I/O device completed a command).

Yep, familiar with this model.  I wrote a device driver for the Unix 
side of an I/O channel (talking to an Ibis disk if I recall correctly).
I didn't find it hard, the I/O channel processor did all the real work,
talking to it was sort of like doing networking.

Truth be told, it was a polling driver, this was early on in the ETA-10
days and interrupts on the I/O channel didn't work.  So that simplified
the driver to the point that it was almost trivial.

I get that PDP-11 and VAX used memory mapped I/O but was that somehow
exposed above the device driver layer?  If so, I missed that, because
I had no conceptual or technical problem with talking to an I/O channel,
it was pretty easy.  And I suck at writing drivers.

More information about the TUHS mailing list