Design choices and implementation (algorithms and data structures) of the capabilities of a modern operating system, including processes, concurrency, multithreading, synchronization, multiprocessors, CPU scheduling, interrupt handling, deadlocks, memory management, secondary storage management, file systems, I/O, protection and security. Issues include simplicity, efficiency, abstraction, microkernel, monolithic, client-server, mechanism vs. policy, caching.