I did not have a lot of time to work on documenting the evolution of paging / virtual
memory code in 32V, Sys III and early SysV in the past months, but I did get some more
background information that seems worth sharing.
My understanding of the virtual memory story at USG is now as follows:
Somewhere in 1981/82 a project plan for Unix 5 / System V was made and evolving John
Reiser’s virtual memory code for 32V-r3 was part of that plan. “Evolving” in this context
meant making it more maintainable and more hardware independent. John’s code assumed a
memory page, a disk block and a file block all to be the same size, and it needed to be
more general. It was also designed around the VAX MMU and this too needed to be
generalised. The person assigned to that job was Bob (Robert) Baron, reporting to Tom
Raleigh. The project involved quite a bit of re-architecting and progress was slowish. On
top of that Bob left for CMU to work on Mach. Tom Raleigh tried to pick up where Bob had
left off, but progress remained slowish.
In parallel, Keith Kelleman and Steve Burroff were working on Unix for the 3B20 Unix. They
did paging code from scratch around the 3B20 MMU (which used a more or less ‘modern’ page
table design) and developed their idea for the “regions” abstraction to support large,
non-contiguous address spaces. It seems that they built on the main working set
ideas/concepts in the Reiser/Baron/Raleigh code base, combined these with their “regions”
idea, made it multi-processor capable and made it all work on the 3B20. Around that time
Tom Raleigh seems to have transferred to Bellcore, and the VAX code base got orphaned.
Two young engineers appear to have picked up the work on the VAX code base: Dean Jagels
and Jim McCormick. My understanding is that they essentially back ported the 3B20 work to
the VAX, falling back on the Reiser/Baron/Raleigh work where necessary. They got it
working, and as far as I can tell, this is what got released in 1984 as part of SysV R2.4
for the VAX (the oldest surviving source code for this that I could find).
This somewhat tortuous birth may in part explain why Research chose to use the 4BSD
virtual memory code for 8th edition.