* Concurrent Servers - Process-based - Event-based - Thread-based - Pros and cons of each * Threads - Difference between process and thread - Pthread interface/library - create, join, self, cancel, exit * Data Sharing - Global vs local vs local static - What does it mean to have shared data * Synchronization - Critical section - Ordering of thread execution (topo. sort of threads) - Unsafe regions of thread/process graphs - Mutual exclusion - Mutexes * lock/release - Semaphores * acquire/release * implementation and understanding of P() and V() - Producer/Consumer problem - Readers/Writers problem - Thread Safety * Four classes of unsafe functions * Races * Deadlock (define, as process graph, deterministic?) * Livelock * Scheduling - Process State Diagram - Goals: * minimize response, maximize throughput, fairness - Metrics: * (avg) waiting time, (avg) completion time - Algorithms: - FCFS - RR -- time quantum - SRTF - HPF * Priority inversion (pre-emptive) - Multi-level feedback - Lottery * Docker / Containers - Motivation - Terminology: why is it called a container? - Composition of a container - What's included? - What's NOT included? - How are changes tracked? * Network Programming - client/server - ports - sockets - file descriptors - API: socket, bind, connect, listen, connect/accept, close * Locks / Queue Lab * Dining Philosophers * Filesystems Lab * Skills Test (topics from first exam) - virtual memory and page faults * Security - How processes, virtual memory, filesystems, etc enhance/enable security