On Thu, Feb 2, 2017 at 3:07 PM, Noel Chiappa <jnc at mercury.lcs.mit.edu>
wrote:
From: William
Degnan
was there ever UNIX made for the PDP 11/40 and
RL02, or was it only
run
on RK05? Wouldn't all of the C and wake
calls, etc issues have been
solved then?
You're mixing up two _TOTALLY_ different things.
Unix V6 will happily run on _ANY_ block device, all you need to do is
write a
driver for it. The rest of Unix V6 doesn't know ^%$^%$ about the device,
all
it know is that there's this thing that can store, and read back, blocks
0-N.
The _only_ interface between the rest of Unix, and the driver, is through a
file called c.c which just contains entries for functions to read and write
blocks, etc.
(You can even run Unix - painfully - on a DECTape drive.)
Adding support for RL drives to Unix V6 involves i) writing an RL driver,
and
ii) editing that file c.c to add _one line in a table_ to hook the driver
into the rest of the OS. (And there's a edit to something called l.s which
holds interrupt vectors, to all the RL vector.) THAT'S IT.
Editing c.c and l.s was No Big Deal. To customize Unix to one's particular
hardware configuration, you _had_ to change those two files, and every V6
site in the known universe tweaked those files. _WITHOUT EXCEPTION_.
Unix V6 doesn't give a *&^*&^* what disk drives its using. As long as
there's
a driver for the controller.
The stuff about wake() calls is a totally different subject, it's all about
how the code in V6 Unix cuts a lot of 'C' corners (e.g. using an 'int *'
as a
pointer to a struct - something that would horrify modern compilers)
because
it's in very early C.
Noel