Analysis of Lisa Clascal source-code
eschatologist.net
eschatologist.net
I’m not sure that is correct. The Lisa had a MMU (http://bitsavers.org/pdf/apple/lisa/development_history/arti...), and swapped data into and out of RAM, and data may have moved to different addresses when swapped out and swapped in again.
> For most of its lifetime, the Lisa never went beyond the original seven applications that Apple had deemed enough to "do everything",[citation needed] although UniPress Software did offer UNIX System III for $495.[32]
> The company known as the Santa Cruz Operation (SCO) offered Microsoft XENIX (version 3), a UNIX-like command-line operating system, for the Lisa 2 — and the Multiplan spreadsheet (version 2.1) that ran on it.[33]
> I’ve not seen any references to locking handles so they don’t move during operations.
That doesn’t make sense to me. If memory blocks never move, why go through the trouble and performance hit of double indirection?
That led to me guessing the MMU was involved, but it may not have been.
The Lisa did have movable memory blocks, though, at least in LisaWrite. https://www.folklore.org/StoryView.py?project=Macintosh&stor...:
“The Lisa word processor team had developed a memory manager with relocatable blocks, accessing memory blocks indirectly through "handles", so the blocks could be moved as necessary to reduce fragmentation.”
https://stackoverflow.com/questions/4415254/difference-swapp...
> Swapping refers to copying the entire process address space, or at any rate, the non-shareable-text data segment, out to the swap device, or back, in one go (typically disk).
> Whereas paging refers to copying in/out one or more pages of the address space. In particular, this is at a much finer grain. For example, there are ~250,000 4 KB pages in a 1 GB RAM address space.
Since swapping is obsolete, that term has fallen into disuse, but we're talking about obsolete systems here:
> Hardware-wise, swapping can be performed without any memory management HW whatsoever, although the early machines employed a simple memory mapping scheme (e.g. base and bound, or a simple one level fixed size page mapping table (e.g. divide the 64 KB data address space into 8, 8KB pages in a larger physical address space (256 KB ... 4 MB)).
> In contrast, paging requires page-granularity virtual memory page table entries, which typically encode the physical address of the page, PTE bits such as valid, read, write, etc. The machine also needs to automatically (transparently to the application program) fetch and interpret page table entries as necessary to map each virtual address to its physical address, and/or take a page fault exception to enable the OS to make the page accessible and/or schedule an I/O to load it to physical RAM.
In addition to Motorola’s MMUs, through the 68020 there were a ton of MMU designs ranging from Lisa’s software-assisted MMU (where a stack probe instruction is inserted into the function and trap prologues) to Apollo’s “run two 68000 CPUs out of phase for page fault recovery” insanity.
Pascal for me will always be blue on a whiteboard, semicolons optional.