David D. Redell, et ell @ Xerox Business Systems
CACM 1980
![]() |
How to design an OS for a personal computer? |
![]() |
Emphasis not on sharing (= fair allocation of resources) or security, but on serving the PC user
|
![]() |
Personal computer operating system | ||||||
![]() |
Single user system, and support a single language: Mesa | ||||||
![]() |
Close
coupling to the Mesa programming language
|
||||||
![]() |
Mesa
|
||||||
![]() |
Resource management: focus not on fairness but on effectiveness | ||||||
![]() |
Defensive
protection, not absolute
|
![]() |
Two types of interfaces: public (for client) & private (for internal use) |
||||||||
![]() |
Representative public interfaces: file, virtual memory, streams, network communication, etc. |
||||||||
![]() |
Each interface has named items
|
![]() |
File
|
||||||||||||||||||||||||||||||||
![]() |
Volume
|
![]() |
Underlying Virtual Memory System
|
||||||||||||||
![]() |
Pilot's Spaces on top of underlying VM
|
||||||||||||||
![]() |
Allocation of spaces: by Space.Create
|
||||||||||||||
![]() |
Mapping to file pages: by Space.Map -- remember that only mmap in Pilot
|
||||||||||||||
![]() |
Swapping in and out: hinted by Space.Activate, Space.Deactivate, and Space.Kill
|
||||||||||||||
![]() |
Tight coupling between files and spaces
|
![]() |
Three ways to access I/O devices: implicit, direct, indirect |
||||||||||
![]() |
Direct
|
||||||||||
![]() |
Implicit
|
||||||||||
![]() |
Indirect: Stream
|
![]() |
Distinction between "tightly-coupled" processes and "loosely-coupled" processes |
||||||||||||||||||||
![]() |
Tight - should use shared-memory to communicate (e.g., single-machine parallel program)
|
||||||||||||||||||||
![]() |
Loose - should use Pilot communication interfaces (e.g., print server) |
||||||||||||||||||||
![]() |
All machines in "Pilot internet" are Pilot machines, even routers |
||||||||||||||||||||
![]() |
Protocol stacks are pretty much like TCP/IP stack
|
||||||||||||||||||||
![]() |
Interfaces
|
![]() |
Mesa language features: recursion, coroutine, concurrent processes, signal, etc. |
||||||||||||||||
![]() |
Procedure call: Pilot only handles traps which occur when space for activation records are exhausted |
||||||||||||||||
![]() |
Coroutine: Pilot gets involved during initialization |
||||||||||||||||
![]() |
Concurrent processes: Pilot creates processes and handles the termination |
||||||||||||||||
![]() |
World-swap - actually two different machine exist at the same time in Pilot: one for normal execution and one for debugging
|
![]() |
Pilot is composed of components, which in turn are composed of Mesa modules |
![]() |
Hierarchical structure - they called "manager/kernel" structure with high-level manager being on top of kernel |
![]() |
Storage system is comprised of file-system and VM |
||||||||||
![]() |
Both systems maintains DBs which are too big to fit in memory. So file-system needs VM, and VM needs file-system and VM again. What a knot!
|
||||||||||
![]() |
Kernel: swapper & filer
|
||||||||||
![]() |
Manager: file manager & VM manager
|
||||||||||
![]() |
Interaction between kernel & manager
|
![]() |
Hierarchy
|
||||||||||
![]() |
Swap unit cache
|
||||||||||
![]() |
Projection
|
![]() |
Implementation splits roughly equal among Mesa, underlying machine, and Pilot |
![]() |
Basic monitors and condition variables are implemented by Mesa and machine |
![]() |
Pilot's concurrency support is implemented using those monitors and condition variables |
![]() |
Each file page has a label--separate record that gives info about the page
|
||||||||||
![]() |
Scavenger periodically scans entire volumes and construct map |
||||||||||
![]() |
Map is just redundant fast-lookup database for volumes |
||||||||||
![]() |
Robustness
|
||||||||||
![]() |
High-level robustness
|
||||||||||
![]() |
Volumes of old Pilot can be easily migrated to newer Pilot
|
![]() |
Routers - software switches |
![]() |
Small group (6-8 people), 18 months |
![]() |
24,000 lines of Mesa |
![]() |
Understand the difference between time-sharing system and PC |
![]() |
Debugger is neat - any error pops you into it auto-magically |
![]() |
Powerful VM |
![]() |
Can give advice to OS |
![]() |
Security - connected to network, but claim is that security is not a big deal. True? |
![]() |
Mesa everywhere, Pilot everywhere |
![]() |
Design is quite different for PC versus minicomputer - what does this say about Linux? |