The transition from swapping to paging in ancient Unix
In the 1980-1983 time frame Unix changed its memory management from a "swapping" design to a "demand paging" design. At the root of this transition stands the "32/V" version of Unix. In the below chart this version of Unix is split in three subsequent releases R1, R2 and R3 (note that these monikers were not used at the time).
- 32V R1 is the plain port of (proto-) V7 to the VAX and described in the Reiser/London memo. Source on TUHS here.
- 32V R2 is a next version with scatter loading and partial swapping and a max. 512K process size. Source on TUHS here.
- 32V R3 is the final version with demand paging, copy-on-write and the first implementation of mmap, including a unified buffer/page cache. Source appears lost.
Both 3BSD and the VAX version of System III appear to derive from 32V R2, not R1. There are some indications that parts of System V R1 for the VAX was derived from or at least influenced by 32V R3. Note that almost complete SVR1 source code for the VAX can be found here, in the M68K tree.
For convenience, the core kernel files for System III are also in this repo in this commit and for SVR1 in this commit.
V7: box "V7" "swapping" bold small "(late '78)" italic small arrow right 50% box "32V R1" "swapping" bold small "(late '78)" italic small arrow right 50% A2: box "32V R2" "scatter loading" bold small "(mar '79)" italic small arrow right 50% A3: box fill 0xc0c0c0 "32V R3" "paging" bold small "(early '80)" italic small S1: box at A2+(0.7,-1) "Sys III" "scatter loading" bold small "(summer '80)" italic small arrow right 50% S2: box "SysV R1" "scatter loading" bold small "(1982)" italic small arrow right 50% S3: box "SysV R2" "paging" bold small "(1983)" italic small B3: box at A2+(0.7,1) "3BSD" "paging" bold small "(jan '80)" italic small arrow right 50% B4: box "4/4.1 BSD" "paging" bold small "(1980/1981)" italic small arrow right 50% B42: box "4.2 BSD" "paging" bold small "(1983)" italic small CB: box at S1+(0,-1) "CB Unix 3" "pdp11, ipc" bold small "(jan '80)" italic small arrow from A2 to B3 chop arrow from A2 to S1 chop arrow dashed from A3 to S2 chop "sptmap" above aligned arrow dashed from A3 to S3 chop "paging algorithm" above aligned arrow dashed from A3 to B42 chop "mmap" below aligned arrow dashed from CB to S2 chop "ipc" below aligned arrow from V7 chop down then to CB radius 20px
Note: dates refer to internal availability, public release dates may be later.
The IPC primitives in CB Unix were maus (shared memory), event (semaphores) and msg.. (messages). These functions appear to have been redesigned in a more coherent form for SVR1 as the now well-known "SysV IPC" primitives.