No, sorry, my scope of interest is mostly 1975-1985.
I did read the Mach virtual memory paper from 1988 - from that paper I gather that the
data structures used are totally different from those in Sys V or BSD.
There is also the VM implementation that Richard Miller did on SysV r1 in 1983.
Interestingly, his design seems to parallel the choices made by Reiser a few years before,
but it is lighter touch. Both Reiser and Miller refer to Denning and Tenex as prior art.
Miller's 1984 Usenix paper about this project argues that doing approximated LRU from
the page table data results in a process local working set view, which he argued was
preferable to the system global working set view generated in the BSD clock algorithm.
Paul
On 29 Mar 2022, at 16:05, Clem Cole
<clemc(a)ccc.com> wrote:
Fascinating - thank you.
Have you figured out that path from here to the SVR4 code base that was used for the x86
[which I think also went through a few more generations after the SVR4 release]?
Clem
On Tue, Mar 29, 2022 at 7:22 AM Paul Ruizendaal via TUHS <tuhs(a)minnie.tuhs.org>
wrote:
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.