Which version of Unix first ran on a computer with virtual addressing (address
translation) so that a process with non-position independent code (PIC) can be loaded
anywhere in RAM that the kernel decided to put it, and memory protection such that no
process could accidentally or deliberately access RAM not allocated to it by the kernel
(or a SIGSEGV would be delivered to it)?
Put another way, when did Unix processes stop playing Core War with each other? (OK, so
long as no more than one is resident at a time, they can't play Core War with each
other, but there still needs to be a mechanism to protect the kernel from inadvertent (or
advertent) pointer use).
Which is to say, when did Unix run on (and properly use) computers with memory management
units (MMU)?
My guess from a quick look at the history of the DEC PDP-11 is that the target computer
was likely a PDP-11/35 or PDP-11/40 with a KT11-D "memory management" module.
One imagines that many pointer mistakes (bugs) in assembly or C were discovered and
squashed in that version, modulo the historical unhappiness resulting from address zero
containing a zero if dereferenced ("NULL pointers") in process address space.
What year did that come about?
By the time I got to Unix (2.8BSD on the Cory Hall DEC PDP-11/70), those features (virtual
addresses, memory protection from the kernel) had apparently been part of Unix for a long
time - certainly earlier than Version 6.
This is distinct from demand-paged virtual memory which so far as I know was developed on
the DEC VAX-11.
curious,
Erik <fair(a)netbsd.org>