Second year computer science course on operating systems. We introduce principles that underlie the design and function of modern operating systems with reference to some currently available operatings systems. The course includes a number of practical programming projects. Topics include: basic computer orgranisation; process and thread; scheduling; synchronisation; memory management; file systems; input/output.