System: A set of interconnected components that has a specified behavior observed at the interface with its environment
System characteristics
Emergent properties
Propagation of effects
Incommensurate scaling
Trade-offs
Coping with complexity: Modularity
Modularity goals
Performance
Robustness/fault-tolerance
Neutrality
Simplicity
An OS is software that provides programs with access to an abstract machine
Protection and sharing
Interface design
readc: from one line at a time, through one character at a time, to one buffer at a time
Layering to improve interface usability while keeping performance
Optimization strategies: Caching and prefetching
Virtual computer
Three fundamental abstractions: link, interpreter, memory
Von Neumann computer characteristics
Virtual I/O, virtual processor, virtual memory
Hard modularity through client/service interaction
The process abstraction
Memory layout
Isolation properties
System calls & implementation
Protection levels & protected control transfer
File descriptors
Unix process and file system calls
Bounded buffers and pipes
Process hierarchy & zombie processes
Context switches
Threads
Process vs. thread
pthread_create, pthread_join, pthread_exit
Threads, stacks, and shared state (How does pthread_create differ from fork and why?)
Interrupts & signals
Unix signal system calls
Race conditions
Synchronization
One-writer principle
Indivisibility & atomicity
Isolation atomicity: Two sequences of steps are isolated if their effect from the point of view of the invokers (observers) is the same as if the sequences occurred either completely before or completely after one another.