The first foray into multiprocessor UNIX for us was to build one of the
Purdue University dual vaxes (where they took the SBI terminator out,
built some special cables to flipped around, and to stick a second CPU
in that location. Not too much later we got a multiprocessor Gould
SEL machine (also with Purdue’s hack to BSD as the OS).
BRL had contracted to buy a Denelcor HEP, which was a MIMD machine
capable of running 32 or so parallel tasks. Each one could be divided
into multiple processes (what we would call a thread the days). The
regular memory had a semaphore per word (called a full-empty bit) that
allowed you to create a bunch of threads and let the hardware itself
schedule them. There were four Process Execution Modules (each with 8
processors) that were interconnected by a fast memory switch, alll 10800
ECL.
The thing was booted up from a PDP-11/34 front end through an interface
aptly named the “low speed bus”. Mike Muuss suggested we could put
UNIX on the thing and nobody could come up with a reason why not, so we
ported the same 4 BSD kernel that the dual vaxes were using. Oddly,
there were some bad things in the BSD kernel that needed to be fixed
(notably “conversion by union” that wouldn’t work on this architecture).
After the initial boot up, we found that the thing couldn’t run
I/O’s very quickly as they I/Os were routed through the “low speed bus.”
The hardware designer (Burton Smith) and me literally designed a new
I/O interface on napkins at the local steakhouse, the Golden Corral, and
built the thing out of spare parts. I donated another PDP-11/34 to
the task.
The I/O system was a fun system, the thing had 32 Unibuses connected to
a memory cache for the main processor. You could hit the CSRs on the
Unibuses virtually through mapped memory addresses. Interrupts
weren’t the traditional sense but rather a new kernel task was spawned
to handle it.
-Ron