History and Goals, Evolution of multi-user systems. Introduction to the techniques used to implement operating systems and related kinds of systems software. Among the topics covered will be process management (creation, synchronization, and communication); Multi-Threading, processor scheduling; deadlock prevention, avoidance, and recovery; main-memory management; virtual memory management (swapping, paging, segmentation and page-replacement algorithms); control of disks and other input/output devices; file- system structure and implementation; and protection and security. Lab assignments involving different single and multithreaded OS algorithms.