[TUHS] history of virtual address space

Luther Johnson via TUHS tuhs at tuhs.org
Tue Jan 20 09:10:59 AEST 2026


I once found an old version of RCS that expected *0 = 0, and I think 
many other programs did as well. I'm not sure which versions of Unix did 
or still do this any more, but I believe many had the first page in 
virtual address space for user program processes, mapped to a read-only 
page of zeroes, to support this. If I'm remembering that wrong, I'm 
interested as the other posters here are, in the details of which did 
which sorts of things.

On 01/19/2026 03:46 PM, Ron Natalie via TUHS wrote:
> The original UNIX PDP-11 address space (and this remained constant 
> throughout the years) started at location 0 and went up by 64 byte 
> chunks.    This was done in seven of the eight segments the PDP-11 
> hardware did.   The stack started in the last one and went downward 
> (again in 64 byte  chunks) from the top of the 16-bit address space.   
> If you were running in 407 mode, it was all the same as far as code 
> and data.   All writable.
> In 410 mode (pure text), the segments containing the code were write 
> protected against the user (this also allowed them to be shared 
> between instances of the program and even locked in swap with the 
> sticky bit).   A 411 (on hardware that supported it) split the code 
> and data segments into separate segments.  You couldn’t even access 
> the code as data on the user side (thwarting the nargs function).
>
> The kernel ran mostly mapped to physical address.   However, the user 
> structure of the current running process was kept in the high segment.
>
> When we went to Vax, pretty much the same idea was kept (programs 
> started at location zero and grew up).   Some moron decided not only 
> to start at zero, but put a  0 at location 0 which led to lots of 
> latent bugs.    Later when we got the Gould SELs in we had page zero 
> unmapped to catch null pointer access, but some programs we didn’t 
> have source to (notably Oracle) still expected to access *0 with 
> impunity, so we added a flag we could poke into the header called 
> “braindead vax compatibility  mode” that mapped a zero at zero for 
> these programs.
>
> Things got even stranger when we ported to the HEP which had four 
> kinds of memory
>
>



More information about the TUHS mailing list