Introduction to operating systems, operating system structures, multi-process management, multi-thread management, inter process communication, deadlocks, CPU scheduling, memory management, file system, storage and input/output systems. The course includes a number of programming assignments conducted in the lab.