The Multics Input/Output System

Feiertag, Organick

 

One interface for all devices.  Symbolic names can be bound to devices dynamically, and this binding can change at run-time.  Interface allows for calls that generally apply to all devices, as well as calls to specific functionalities of particular devices (ioctl). 

 

Previous systems required all programmers to be familiar with low level details of I/O.  In Mutlics, such knowledge is secondary, and programmers can get by without it.

 

Two important guidelines: 1) common operations require minimal knowledge to use, 2) special purpose operations require deeper level understanding of system, but are do-able through same interface.

 

Programs should be device independent, else system will become obsolete.  This design faciliates the introduction of new I/O devices with old programs.

 

Binding can be done via attach/detach.  I/Os can be issued via read/write calls. Ioctl was called “call order” in Multics.

 

I/O is stream oriented.  Streams can be chained together such that each device driver / translator can apply chains of operations to a data stream.

 

Devices are sources or sinks for data.  Concepts of redirectable standard input and standard output discussed.  Multics memory segments can also be used as sources and sinks of data.

 

Concepts of device drivers discussed – translator between OS interface to device and device-specific languages.  Device driver for line printer can translate and automatically insert carriage returns where necessary, while file driver wouldn’t need to.  symbolic names can be bound to devices using a given device driver.