Virtual memory, processes, and sharing in multics
Review by Thorsten von Eicken, Jan 1998
Goal
- Allow direct sharing of code and data between applications, while maintaining protection
- processor can access all on-line information directly
- protection can be enforced at each point of reference
- Multics goal: computing "utility"
Benefits
- eliminate copies for I/O (file->memory->file)
- eliminate off-line linking of programs and program storage as "memory image"
- propagate changes to persistent store immediately
- not mentioned in this paper:
- Eliminate explicit movement of data between different levels of storage hierarchy.
- Independent of various devices.
- Call procedures by symbolic name.
- Obviate need to know all procedures/data referenced a priori.
- Allow recompilation of a segment without recompiling anything else .
Additional info
- protection rings
- software development problems
- typically, specifications representing less-important features were found to be
introducing much of the complexity
- the initial choice of modularity and interfacing between modules was sometimes awkward
- it was rediscovered that the most important property of algorithms is simplicity rather
than special mechanisms for unusual cases
- status, oct 69
- 500 users
- 50 at a time
- 2 processors, 384 Kwords memory
- 1-2 crashes per day
Calling convention
- Intersegment linking
- Requirements
- Pure procedure segments (i.e. no modification of procedure segments)
- Call by symbolic name without any prearrangement
- Segments must be invariant to recompilation of other segments
- Implementation
- for each segment, have a linkage section
- calls are indirect via descriptor in linkage section
- linkage section entries have: global address and indirection word
- indirect call traps on first use, trap sets up indirection word
- the link pointer (lp) points to the beginning of the linkage section.
- external references are relative to link pointer
Segmentation vs. paging
- segmentation
- access rights check
- logical entities
- address space management
- paging
- physical memory management
Uses of segmentation
- to implement and organize the supervisor
- to map files and directories directly onto segments
- to implement dynamic linking
- by a called procedure to find its linkage (static) pointer
- to find per-process data (kept at the base of the stack)
- to control access to data and programs
- to assign data (segments) to rings
- for temporary storage
- for stacks, linkage (static), and areas (heaps)
- and so on
Successful concepts
- symbolic links (links)
- hierarchical directory structure (files=branches)
- shared libraries (segments)
- page sweep algorithm
- pageable kernel (supervisor)
- access control lists (segment attributes)
Random comments
- segmentation and paging -> x86
- "core" memory -> ferrite cores
- supervisor = kernel
- emacs
RDZ
- at MIT 81-85, used Multics
- systems with 100’s of people
- "proc" directory
Questions
- how do the implementations of today’s shared libraries (DLLs) differ from Multics?
- which features of multics have not survived to today?