From mboxrd@z Thu Jan 1 00:00:00 1970 From: paul.winalski at gmail.com (Paul Winalski) Date: Wed, 19 Aug 2020 13:39:38 -0400 Subject: [COFF] [TUHS] Memory management in Dennis Ritchie's C Compiler In-Reply-To: References: <20200817192715.22D9518C09E@mercury.lcs.mit.edu> <20200817193050.GC11413@mcvoy.com> Message-ID: On 8/18/20, Tony Finch wrote: > > The Manchester / Ferranti Atlas had virtual memory in 1962 but I don't > know how much they used it for multiprogramming (and by implication shared > text segments) - it didn't do timesharing until later, but AIUI virtual > memory helped it to have an exceptionally good job throughput for the > time. Perhaps their motivation was more to do with having a good shared > implementation of overlays and paged IO. > > https://en.wikipedia.org/wiki/Single-level_store I knew the Manchester invented virtual memory in the Atlas system. In the IBM System/360 world, the first machine with Dynamic Address Translation (DAT, the hardware that implements virtual->physical address transiation via page tables) was the S/360 model 67. The only IBM OS to use it was CP/67, the virtual machine forerunner of VM/370. All of the models of System/370 eventually got virtual memory capability. The different OSes implemented virtual memory quite differently: DOS/VS, the OS for smaller machines, had a single, demand-paged virtual address space that could be larger than physical memory.. This could be partitioned into five user program spaces. DOS/VS could run up to five processes (one per partition) simultaneously. Process scheduling was strictly preemptive--the program in P4 got the CPU whenever it needed it. P3 only ran when P4 was stalled; P2 only when P4 and P3 were stalled, etc. At our school we ran the spooling system in P4 since it was almost completely I/O bound. P3 ran the administrative transaction processing system. P2 ran the student time-sharing software. P1 and BG (background; the lowest on the scheuling totem pole) ran batch jobs. OS/VS1 was the successor to OS/MFT (multiprogramming with a fixed number of tasks). Like DOS/VS, it had a single virtual address space divided into partitions, but you could have more than five of them. OS/VS2 SVS (single virtual storage) was the first successor to OS/ MVT (multiprogramming with a variable number of tasks). It, too, had a single virtual address space, but partitioning was done dynamically. OS/VS2 MVS (multiiple virtual storage) was the only one of the lot to handle virtual memory the way that modern OSes do. Each process got its own, independent virtual address space. -Paul W.