Table of Contents to Operating Systems by Charles Crowley
- Introduction
- Where does an operating system fit in?
- System levels
- What does an operating system do?
- Hardware Resources
- Resource Management
- Virtual Computers
- A Virtual Computer
- Virtual Processor
- Virtual Primary Memory
- Virtual Secondary Memory
- Virtual I/O
- Do We Need an Operating System?
- Summary
- Terminology
- Review Questions
- Further Reading
- Problems
- The Hardware Interface
- The CPU
- General purpose registers
- Control Registers
- Processor Modes
- Instruction Set
- Machine instructions in C++ code
- Memory and Addressing
- Interrupts
- I/O Devices
- Disk controller
- Summary
- Terminology
- Review Questions
- Further Reading
- Problems
- The Operating System Interface
- What Are System Calls?
- How to make a system call
- What is a system call interface?
- An Example System Call Interface
- System Call Overview
- Hierarchical File Naming Systems
- File and I/O System Calls
- Open Files
- Examples of File I/O
- Information and Meta-Information
- Naming Operating System Objects
- Devices as Files
- Unification of the File and Device Concepts
- The Process Concept
- Processes and Programs
- Process Management System Calls
- Process Hierarchy
- Communication Between Processes
- Communications Related System Calls
- Example of Interprocess Communication
- UNIX-style Process Creation
- Standard Input and Standard Output
- Communicating with Pipes
- Naming of Pipes and Message Queues
- Summary of System Call Interfaces
- Operating System Examples
- UNIX
- Mach
- MS/DOS
- Windows NT
- OS/2
- Macintosh OS
- *** The User Interface to an Operating System
- Why you need a shell
- The specification of the shell
- Implementing the shell
- Summary
- Terminology
- Review Questions
- Further Reading
- Problems
- Design Techniques I
- Operating Systems and Design
- The Design Process
- Relationship to Software Engineering
- A Design Example
- Learning design through operating systems
- Design Problems
- Design skills
- Design space
- Design levels
- Design Techniques
- Two Level Implementation
- Overview
- Motivation
- Operating System Examples
- Computer Science Examples
- Applicability
- Consequences
- Implementation Issues and Variations
- Related Design Techniques
- Interface Design
- Overview
- Motivation
- Applicability
- Consequences
- Related Design Techniques
- Connection in Protocols
- Overview
- Motivation
- Operating System Examples
- Computer Science Examples
- Applicability
- Consequences
- Implementation Issues and Variations
- Related Design Techniques
- Interactive and Programming Interfaces
- Overview
- Motivation
- Operating System Examples
- Computer Science Examples
- Applicability
- Consequences
- Implementation Issues and Variations
- Related Design Techniques
- Decomposition Patterns
- Overview
- Motivation
- Operating System Examples
- Computer Science Examples
- Applicability
- Consequences
- Implementation Issues and Variations
- Related Design Techniques
- Summary
- Terminology
- Review Questions
- Problems
- Implementing Processes
- The System Call Interface
- Implementation of a Simple Operating System
- Guide to the code
- The Architecture
- System Constants
- Global Data
- Implementation of Processes
- Process Creation
- Process States
- Process Dispatching
- The System Stack
- Timer Interrupts
- System Initialization
- The Initial Process
- Process Switching
- Switching Between Processes
- Flow of control
- System Call Interrupt Handling
- Copying Messages Between Address Spaces
- Program Error Interrupts
- Disk Driver Subsystem
- Communicating With the Disk Controller
- Implementation of Waiting
- Waiting For Messages
- Waiting Inside a System Call
- Suspending System Calls
- Flow of Control Through the Operating System
- Signaling in an Operating System
- Interrupts in the Operating System
- Operating Systems as Event and Table Managers
- Process Implementation
- The Process Table and Process Descriptors
- Examples of Process Implementation
- *** Monoprogramming
- Batch Systems
- Multiprogramming and I/O Overlap
- Personal Computer Systems
- Summary
- Terminology
- Review Questions
- Further Reading
- Problems
- Parallel Systems
- Parallel Hardware
- An Operating System for a Two Processor System
- Using Two Separate Operating Systems
- Sharing the Operating System
- Race Conditions With a Shared Process Table
- Atomic Actions
- Hardware implementation of atomic actions
- A Multiprocessor Operating System
- The current process variable
- Dispatching With a Shared Process Table
- Busy Waiting
- Handling the Queues
- Grouping of Shared Variables
- A General Solution
- Using Two Process Tables
- Examples of Multiprocessor Operating Systems
- Threads
- The Thread Concept
- Thread System Calls
- Advantages of Threads
- Uses of Threads
- *** Thread Implementation
- Splitting the Process Concept
- Lightweight Processes and User Threads
- Examples of Threads
- *** Kernel-mode Processes
- Data structures for kernel-mode processes
- Process creation with kernel-mode processes
- Interrupt handlers for kernel-mode processes
- Switching processes for kernel-mode processes
- How the system stack is used
- Waiting with kernel-mode processes
- Dispatching with kernel-mode processes
- Kernel-mode only processes
- Trade-offs of kernel-mode processes
- Examples of kernel-mode processes
- Implementation of Mutual Exclusion
- First Solution: Disabling Interrupts
- Second Solution: Using ExchangeWord
- Third Solution: Software Solutions
- When To Use Each Solution
- Examples of implementing mutual exclusion
- *** Varieties of Computer Models
- Multiprogramming
- Multiprocessing
- Summary
- Terminology
- Review Questions
- Further Reading
- Problems
- Interprocess Communication Patterns
- Using Interprocess Communication
- Patterns of Interprocess Communication
- Competing and Cooperating
- Problems When Processes Compete
- Race Conditions and Atomic Actions
- New Message Passing System Calls
- IPC Pattern: Mutual Exclusion
- N Process Mutual Exclusion
- Voluntary Cooperation in Mutual Exclusion
- IPC Pattern: Signaling
- IPC Pattern: Rendezvous
- Many Process Rendezvous
- IPC Pattern: Producer-Consumer
- The Basic Producer-Consumer Pattern
- Limiting the Number of Buffers Used
- Multiple Producers and Consumers
- IPC Pattern: Client-Server
- *** IPC Pattern: Multiple Servers and Clients
- IPC Pattern: Database Access and Update
- Scheduling
- Priority
- Scheduling queues
- Review of Interprocess Communication Patterns
- Mutual Exclusion
- Signaling
- Rendezvous
- Producer-Consumer
- Client-Server
- Multiple Servers and Clients
- Database Access and Update
- A Physical Analogy
- Failure of Processes
- Recovery from failure
- Summary
- Terminology
- Review Questions
- Further Reading
- Problems
- Processes
- Everyday Scheduling
- First-come, First-served Scheduling
- Shortest Job First Scheduling
- Highest Response Ratio Next Scheduling
- Priority Scheduling
- Deadline Scheduling
- Round-robin Scheduling
- Summary
- Preemptive Scheduling Methods
- Scheduling Overview
- Round-robin Scheduling
- Heavily Loaded Systems
- Two Queues
- Multiple Queues
- Policy versus Mechanism in Scheduling
- A Scheduling Example
- Scheduling in Real Operating Systems
- Scheduling in UNIX SVR4
- Scheduling in Solaris
- Scheduling in OS/2 2.0
- Scheduling in Windows NT 3.51
- Scheduling in Other Operating Systems
- Deadlock
- Why Deadlock is a Problem
- Conditions for Deadlock to Occur
- How To Deal With Deadlock
- Deadlock Prevention
- Deadlock Avoidance
- Deadlock Recovery
- A Sequence of Approaches to the Deadlock Problem
- Two Phase Locking
- Starvation
- Message Passing Variations
- Using PIDs as message addresses
- Message Passing With Nonblocking Receives
- Message Passing With Blocking Sends
- Remote procedure calls
- Synchronization
- Definition of Synchronization
- Review of Synchronization
- Separating Data Transfer and Synchronization
- Semaphores
- Specification of Semaphore Operations
- Implementation of Semaphores
- An Analogy
- Mutual Exclusion with Semaphores
- Rendezvous with Semaphores
- Producer-Consumer (one buffer) with Semaphores
- Counting Semaphores
- Producer-Consumer (N buffers) with Semaphores
- Semaphores and Messages
- *** Implementing Semaphores
- System Constants
- Using Semaphores in the Simple Operating System
- Programming Language Based Synchronization Primitives
- Monitors
- Synchronization Primitives in Ada 95
- Message Passing Design Issues
- Copying Messages
- Longer Messages
- IPC in Mach
- Tasks and Threads
- Ports and Messages
- Objects
- IPC and Synchronization Examples
- Signals
- SVR4 UNIX
- Windows NT
- OS/2
- Solaris
- Summary
- Terminology
- Review Questions
- Further Reading
- Problems
- Design Techniques II
- Indirection
- Overview
- Motivation
- Operating System Examples
- Computer Science Examples
- Discussion
- Applicability
- Consequences
- Using State Machines
- Overview
- Operating System Example
- Computer Science Example
- Applicability
- Consequences
- Implementation Issues and Variations
- Win Big Then Give Some Back
- Overview
- Motivation
- Operating System Examples
- Computer Science Examples
- Applicability
- Consequences
- Separation of Concepts
- Overview
- Motivation
- Operating System Examples
- Computer Science Examples
- Applicability
- Consequences
- Implementation Issues and Variations
- Related Design Techniques
- Reducing a Problem to a Special Case
- Overview
- Motivation
- Operating System Examples
- Computer Science Examples
- Applicability
- Consequences
- Implementation Issues and Variations
- Reentrant Programs
- Overview
- Motivation
- Operating System Examples
- Computer Science Examples
- Applicability
- Consequences
- Implementation Issues and Variations
- Related Design Techniques
- Using Models for Inspiration
- Overview
- Motivation
- Operating System Examples
- Computer Science Examples
- Applicability
- Consequences
- Adding a New Facility To a System
- Overview
- Motivation
- Operating System Examples
- Computer Science Examples
- Applicability
- Consequences
- Related Design Techniques
- Summary
- Terminology
- Review Questions
- Problems
- Memory Management
- Levels of Memory Management
- Linking and Loading a Process
- Creating a load module
- Loading a load module
- Allocating Memory in a Running Process
- Variations in Program Loading
- Load Time Dynamic Linking
- Run Time Dynamic Linking
- Why Use Dynamic Memory Allocation?
- *** The Memory Management Design Problem
- *** Solutions to the Memory Management Design Problem
- Static division into a fixed number of blocks
- Buddy Systems
- Powers of two allocation
- *** Dynamic Memory Allocation
- *** Keeping Track of the Blocks
- The List Method
- Keeping allocated blocks on the block list
- Where is the block list kept?
- Using Block Headers as Free List Nodes
- The Bitmap Method
- Comparing free list methods
- *** Which Free Block To Allocate?
- Examples of Dynamic Memory Allocation
- Logical and Physical Memory
- Allocating Memory to Processes
- Static Memory Management
- Handling Variable Sized Processes
- Multiprogramming Issues
- Memory Protection
- Memory Management System Calls
- Static Allocation of Memory to Processes
- Dynamic Allocation of Memory to Processes
- What about {\ptt new} and {\ptt malloc}?
- Freeing Memory At Each Level
- A Different Memory Management System Call
- *** Example Code for Memory Allocation
- Summary
- Terminology
- Review Questions
- Further Reading
- Problems
- Virtual Memory
- *** Fragmentation and Compaction
- Dealing with Fragmentation
- Separate Code and Data Spaces
- Segments
- Noncontiguous Logical Address Spaces
- Page tables in hardware registers
- Page tables in memory
- Using a page table cache
- Analysis Models of Paging with Caching
- Memory Allocation with Paging
- Terminology: Page and Page Frame
- Page Tables
- Paging Summary
- *** Memory Allocation Code With Pages
- *** Sharing the Processor and Sharing Memory
- *** Swapping
- Efficient Resource Use and User Needs
- *** Overlays
- Overlays in PCs
- Implementing Virtual Memory
- Hardware Required to Support Virtual Memory
- Software Required to Support Virtual Memory
- What is the cost of virtual memory?
- Paging More Than One Process
- Locality
- Virtual Memory Management
- Daemons and Events
- File Mapping
- The System Call Interface
- An Example of Using File Mapping
- Advantages of File Mapping
- Memory and File Mapping on the IBM 801
- File Mapping Examples
- Summary
- Terminology
- Review Questions
- Further Reading
- Problems
- Virtual Memory Systems
- Page Replacement
- Global Page Replacement Algorithms
- Measuring the Performance of a Page Replacement Algorithm
- Optimal Page Replacement
- Theories of Program Paging Behavior
- Random Page Replacement
- FIFO Page Replacement
- Least Recently Used Page Replacement
- Approximations of LRU
- Clock Algorithms
- Page Replacement Examples
- Local Page Replacement Algorithms
- Models of Program Behavior
- Local page replacement
- The development of program models
- What is a working set?
- Program Phases
- Variable Resident Set Sizes
- The working set paging algorithm
- Approximating the Working Set
- WSClock paging algorithm
- *** Evaluating Paging Algorithms
- Methodology for Paging Simulation
- Some Page Simulation Results
- Thrashing and Load Control
- How Thrashing Occurs
- Load control
- Swapping
- Scheduling and Swapping
- Load control and paging algorithms
- Predictive Load Control
- Preloading of pages
- Dealing with Large Page Tables
- What is the Problem?
- Two Level Paging
- Benefits of two level paging
- Problems with two level paging
- Software Page Table Lookups
- *** Recursive Address Spaces
- Paging the operating system address space
- Locking pages in memory
- *** Page Size
- Reasons for a large page size
- Reasons for a small page size
- Clustering pages
- Segmentation
- What is a segment?
- Virtual Memory with Segmentation
- Segmentation with Paging
- History of Segmentation
- Segment Terminology
- Sharing Memory
- Reasons for Sharing Memory
- Shared Memory System Calls
- Examples of Virtual Memory Systems
- Swap Area
- Page Initialization
- Page Sharing
- Double Handed Clock Algorithm
- Standby Page Lists
- Clustering Pages
- File Mapping
- Portable Virtual Memory Systems
- Sparse Address Space
- OS/2 Version 2.0
- Windows NT
- Mach and OSF/1
- System V Release 4
- Other Systems
- Very Large Address Spaces
- Summary
- Terminology
- Review Questions
- Further Reading
- Problems
- Design Techniques III
- Multiplexing
- Overview
- Motivation
- Operating System Examples
- Computer Science Examples
- Applicability
- Consequences
- Late binding
- Overview
- Motivation
- Operating System Examples
- Computer Science Examples
- Applicability
- Consequences
- Implementation Issues and Variations
- Related Design Techniques
- Static Versus Dynamic
- Overview
- Motivation
- Operating System Examples
- Computer Science Examples
- Applicability
- Consequences
- Implementation Issues and Variations
- Related Design Techniques
- Space-Time Tradeoffs
- Overview
- Motivation
- Computer Science Examples
- Applicability
- Consequences
- Implementation Issues and Variations
- Related Design Techniques
- Simple Analytic Models
- Overview
- Motivation
- Operating System Examples
- Applicability
- Consequences
- Implementation Issues and Variations
- Summary
- Terminology
- Review Questions
- Problems
- I/O Devices
- Devices and Controllers
- Device Controllers
- *** Terminal Devices
- Basic Terminals
- Display Commands
- Example Display Commands
- Keyboard Events
- Terminal Capability Databases
- Virtual Terminals
- Terminal Interfaces
- Mouse Devices
- Event Streams
- Varieties of Two Stage Processing
- Graphics Terminals
- Color and Color Maps
- Command Oriented Graphics
- X Terminals
- Terminal Emulators
- Virtual Terminals and Terminal Emulators
- PPP: a network emulator
- Modems
- *** Communication Devices
- Serial ports
- Parallel ports
- Ethernet devices
- Other network devices
- Disk Devices
- Timing of a disk access
- Floppy Disks
- RAID devices
- Disk Controllers
- *** SCSI Interfaces
- *** Tape Devices
- *** CD Devices
- Summary
- Terminology
- Review Questions
- Further Reading
- Problems
- I/O Systems
- I/O System Software
- Device Drivers
- Device Driver Interfaces
- The Two Categories of Device Drivers
- The Block Device Interface
- The Character Device Interface
- Disk Device Driver Access Strategies
- Handling Disk Requests Efficiently
- Double buffering --- an aside
- A Disk Scheduling Example
- Sector Scheduling Within Cylinder Scheduling
- Combined Sector and Cylinder Scheduling
- Real Life Disk Head Scheduling
- *** Modeling of Disks
- A Disk Scheduling Anomaly
- Cylinder Correlations
- A More Accurate Disk Model
- Device numbers
- Unification of Files and I/O Devices
- Generalized Disk Device Drivers
- Partitioning Large Disks
- Combining Disks Into a Large Logical Disk
- RAM Disks
- Memory as a device
- Pseudo-ttys
- Disk Caching
- Two level structure of device drivers
- SCSI Device Drivers
- Examples of I/O Systems
- Summary
- Terminology
- Review Questions
- Further Reading
- Problems
- File Systems
- The Need for Files
- Using Disks Directly for Persistent Storage
- Files
- Levels in the File System
- The File Abstraction
- Variations on the File Abstraction
- Logical File Structure
- File Size and Granularity
- File Meta-Data
- File Naming
- Component Names
- Directories
- Path Names
- Variations and Generalizations
- File Name Extensions
- Aliases
- File System Objects and Operations
- File System Implementation
- File System Data Structures
- File System Organization and Control Flow
- Connecting to Device Drivers
- Reading and Writing from Special Files
- Other File System Calls
- Avoiding Copying Data
- Directory Implementation
- *** An Example File System Implementation
- System Constants and Global Data
- Disk Cache
- File Descriptors
- Open Files
- Directories
- File System Initialization
- File Related System Calls
- System Call Procedures
- Summary
- Terminology
- Review Questions
- Further Reading
- Problems
- File System Organization
- File System Organization
- What is a File System?
- File System Structure
- The File System Descriptor
- Variations in File System Layout
- File Systems in Disk Partitions
- Combining File Systems
- Network Mounting of File Systems
- File Descriptors
- Where to Keep File Descriptors
- How File Blocks Are Located On Disk
- The Block Mapping Problem
- Contiguous Files
- Interleaved Files
- Keeping a File in Pieces
- Where to keep the disk block pointers
- Disk block pointers in the file descriptor
- Disk block pointers contiguously on disk
- Disk block pointers in the disk blocks
- Index blocks in a chain
- Two levels of index blocks
- Large and small files
- Hybrid solutions
- Analogy with page tables
- Inverted disk block indexes
- Using larger pieces
- Variable sized pieces
- Disk Compaction
- Review of File Storage Methods
- *** Implementation of the Logical to Physical Block Mapping
- File Sizes
- *** Booting the Operating System
- *** File System Optimization
- Block Size
- Compressed Files
- Log Structured File Systems
- File System Reliability
- Backups
- Consistency checking
- File Security and Protection
- Examples of File Systems
- SVR4 and Solaris
- Windows NT
- MS/DOS
- OS/2
- Plan 9
- Other Operating Systems
- Summary
- Terminology
- Review Questions
- Further Reading
- Problems
- Design Techniques IV
- Caching
- Overview
- Motivation
- Operating System Examples
- Computer Science Examples
- Applicability
- Consequences
- Implementation Issues and Variations
- Related Design Techniques
- Optimization and Hints
- Optimizing an Activity
- Hints
- Differences between caching and hinting
- When to use hinting instead of caching
- Hinting examples
- Hints in user interfaces
- Optimistic algorithms
- Versions of files
- Hierarchical Names
- Overview
- Motivation
- Operating System Examples
- Computer Science Examples
- Applicability
- Consequences
- Implementation Issues and Variations
- Related Design Techniques
- Naming of Objects
- What is a name?
- Types of names
- Generating Unique Names
- Unification of Concepts
- Overview
- Motivation
- Operating System Examples
- Computer Science Examples
- Applicability
- Consequences
- Related Design Techniques
- Summary
- Terminology
- Review Questions
- Further Reading
- Problems
- Resource Management
- Resources in an Operating System
- Hardware Resources
- Software Resources
- Resource Management Issues
- Model of Resource Management
- Resource Management Tasks
- Resource Management Goals
- Types of Resources
- Consumable Resources and Capital
- Preemption of Resources
- Integrated Scheduling
- Queuing Models of Scheduling
- Real-time Operating Systems
- Protection of Resources
- Users and Processes
- The Importance of Protection of Resources
- Resources That Need Protecting
- What We Are Protecting Against
- Authorization
- Authentication
- Security and Protection Analogies
- General Strategy for Protection
- Parts of a Protection System
- User Authentication
- Passwords
- System Authentication
- Other methods of authentication
- Password variants
- Identifying objects
- Identifying a person
- Mechanisms for Protecting Hardware Resources
- Processor Modes
- Protecting Hardware Resources
- Representation of Protection Information
- Object Types
- Operations On Objects
- The Protection Database
- Access Control Lists
- Capability Lists
- Modifying the Protection Database
- Protection Domains
- Protection in Distributed Systems
- Caching Protection Data
- Operations on Protection Objects
- Mechanisms For Software Protection
- File Protection Example
- Implementation of Protection
- Protection Mechanisms and Security Policies
- Variations in File Security
- Examples of Protection Attacks
- Browsing for Information
- Wiretapping of Communications Lines
- Trial and Error
- Password Guessing
- Searching Trash
- Trap Doors
- Running Other People's Programs
- Government Security Levels
- Protection Examples
- Protection In Windows NT
- Protection In OSF/1
- Protection In UNIX
- External Security
- Physical Security
- Operational Security
- Non-Technical Security Threats
- The Use of Cryptography in Computer Security
- What is Cryptography?
- Some Basic Definitions
- Public and Private Key Cryptosystems
- Using Cryptography for Privacy
- Using Cryptography for Authentication
- Authenticating Public Keys
- Summary
- Terminology
- Review Questions
- Further Reading
- Problems
- The Client Server Model
- Three Modes of Communication
- System Processes
- Overview
- The Initial process
- System Constants
- Initialization
- Interrupt Handling
- Handling System Calls
- The System Call Handling Code
- User Knowledge of Message Queue Identifiers
- Protection of Resources
- Disk Interrupt Handler
- Disk I/O System Process
- Server Data Structures
- Micro-Kernel Operating Systems
- Tradeoffs of the Client Server Model
- Object Oriented Operating Systems
- The Developments Towards a Distributed System
- Networked Operating Systems
- Distributed Operating Systems
- Summary
- Terminology
- Review Questions
- Further Reading
- Problems
- Glossary
- References
- Index