Operating system structure, processes, threads, synchronization, CPU scheduling, memory management, file systems, input/output, multiple processor systems, virtualization, protection, and security. The laboratory exercises will require implementation of part of an operating system.