.ds
.na
UNIX is a general-purpose timesharing operating
system
for the Digital Equipment Corp PDP-11.

It is the only such system known to me; in any
case it is probably the first.
DEC, in particular, shows no signs of producing
a multi-user system.

Some history and credits.

UNIX was written by K. Thompson. I wrote much of
the system software; Ken most of the rest;
Other contributors have been Joe Ossanna,
Doug McIlroy, and Bob Morris.

The first UNIX was on a PDP-7.  Most features were
present, some in rudimentary form.

UNIX-11 system was largely written in Jan.-Mar., 1971;
since the changes are generally refinements.

The charter for the project, and the reason
the machine was obtained, was to develop
a document editing and formatting
system.  The original notion was to use
UNIX as a development tool only, and have the editing
system run stand alone.

It turned out, however, that it was quite practical to
have the editing system run under UNIX, and this is
operates.

The editing system is now being used by the Patent Division
at Murray Hill to prepare patent applications.
I undertand that the bulk of the applications
are being done by UNIX.  UNIX is also being
tried out by two typists
in the MH typing pool.

At the start I stated that  UNIX was a general-purpose
time-sharing system.  I imagine the concept is familiar,
but I want to bring out a few points.

First, it is general purpose.  This means it may, or may not,
be suitable as a basis for various special-purpose
applications.  The two things that come to mind are
management of large data bases and applications requiring
very rapid real time response.

For several reasons, not all defensible, very large files of information are
not very well handled by the file system proper.
I will return to this point.

In the real-time area, the system has no direct hooks
to allow a user-written program to respond
very rapidly to an external event.
"very rapidly", here,
means in less than about half a second, which is the
approximate time to swap programs off the disk.
There are thoughts about how to arrange this, but
it has not been done.

Notice, however, that the system does in fact make rapid
responses to events, in the sense that it is able to pick up
characters from typewriter terminals even when they
come only a few milliseconds apart.
Thus if the "real-time" requirement is really that
if collecting characters for a terminal or other
machine, that ability is already there; what
may be lacking is the possibility of
scheduling a non-system program which
wants to act on those characters within a very short
time.

So far I have been talking about the disadvantages
of the general-purpose system.
The advantage
lies in the ease with which program development
can be done.
With any reasonable number of users, responses to user's commands
is quite fast, and the cycle of edit-translate-execute-debug
is speed-limited by thinking time,
not compute time.  For example, it takes about 50 seconds to
assemble and install a new UNIX system.

The time-sharing aspect of the system is also vital
to a program development effort, since it means that
several people can be using the machine at once.

Likewise when the system is adapted to
deal with a particular application, the fact
that multi-programming is built in from the start
means that  the most subtle problems
which come up when several things must go on at
approximately the same time have already
been solved.

Given that UNIX is excellent for program development, but
may have limitations as a base upon which to build
a more specialized system, the question arises as to
the advisibility
of  writing one's own system using UNIX.
I can only say that of the several projects
using UNIX, all have in fact decided to
use it not only for development but
to support their application directly.
Often some modifications to the system have proved
necessary, however.
Typically these relate, though, to support
of some device the standard UNIX does not provide
for, and to rearranging the management
of core memory.

HARDWARE

UNIX is running on at least five PDP-11, no two
with the same complement of hardware.
The slide  shows the minimal complement
possible.

The basic requirements above a PDP11 processor are

  12 K core
   some kind of disk
  a clock
  an EAE (extended arithmetic element, for
     multiply/divide
  Some sort of tape, to provide for loading
   the system software and saving the disk

Above the minimum, it is of course desirable
to have more core, lots of disk, communications
interfaces, paper tape reader, and a ROM containing
a bootload program.

A summary of the devices which have been attached
to actual UNIX systems includes:

  DC-11 communications interfaces attached by
DATAPHONE to 10, 15, or 30 cps ASCII terminals
(not DM-11 as yet)

  RF fixed head disk (256K words)

  RK moving head disk (1.2M words)

  RP moving head disk (2314-style, 10 M words)

  paper tape reader/punch

   201 DATAPHONE interface

   ACU on DATAPHONE

   DECtape

   Magtape (9-track)

  card reader

   line printer

SOFTWARE

There is a good deal of software that goes
along with UNIX.
It should be pointed out that it was all written
using UNIX; none of it comes from DEC or elsewhere.

It should also be pointed out that almost
all of it is being worked on in one way or another.
That is while all I will list is
usable, there are a number of things
which we regard as desirable that are not
complete.

The major pieces of UNIX software are:

   assembler

   link editor

   text editor

   FORTRAN compiler

   B compiler
 
   symbolic debugger

   text formatting program

  M6 macro processor

   TMGL compiler-compiler, the last
   two contributed by Doug McIlroy

   command line interpreter

   many utilities, mostly to
deal in one way or another with the file system


SYSTEM

The system proper can be regarded as
falling into three parts: the file system,
the process control system, and the rest.

I will only talk about the file system in any detail at all.

Files in UNIX are arranged in a hierarcical, tree
shaped structure.
There are two types of object: files, and
directories.
A directory is actually no more than a file,
but its contents are controlled by the
system, and the contents are names of other files.
(A directory is sometimes called a catalog
in other systems.)

Thus we have the type of arrangement shown in the slide:
there is a root directory, which is the "base"
of the tree (as usual, the tree is upside-down)
which contains files and directories.

Each of the directories under the root also can contain
files and directories, and so on.

In UNIX, files are named by giving a sequence
of directories, separated by slashes, and
ending in a file or directory (for example: ...)

The name of the root is "/", and so it begins the
sequence.

(example...)

Every user always has a current directory, which
belongs to him.  Files can also be named
with respect to the current directory, when the name does not
begin with a "/".
(examples: ...)

It is possible for the same file to appear in several
different directories, under possibly different
names.  This feature is called "linking"
(example).

It is also possible for the directory hierarchy to
be split across several devices.  Thus the system
can store a directory, and all fiels and directories
lower than it in the hierarchy, on a device
other than the one on which the root is stored.

In particular, in our own version of the system,
there is a directory "/usr" which contains
all user's directories, and which is stored on
a relatively large, but slow moving head disk,
while the othe files are on the fast but
small fixed-head disk.
