- Introduction: review of computer organization, intoduction to popular operating systems like UNIX, Windows, etc., OS structure, system calls, functions of OS, evolution of OSs.
- Computer organization interface: using interrupt handler to pass control between a running program and OS.
- Concept of a process: states, operations with examples from UNIX (fork, exec) and/or Windows. Process scheduling, interprocess communication (shared memory and message passing), UNIX signals.
- Threads: multithreaded model, scheduler activations, examples of threaded programs.
- Scheduling: multi-programming and time sharing, scheduling algorithms, multiprocessor scheduling, thread scheduling (examples using POSIX threads).
- Process synchronization: critical sections, classical two process and n-process solutions, hardware primitives for synchronization, semaphores, monitors, classical problems in synchronization (producer-consumer, readers-writer, dining philosophers, etc.).
- Deadlocks: modeling, chararcterization, prevention and avoidance, detection and recovery.
- Memory management: with and without swapping, paging and segmentation, demand paging, virtual memory, page replacement algorithms, working set model, implementations from operating systems such as UNIX, Windows. Current Hardware support for paging: e.g., Pentium/ MIPS processor etc.
- Secondary storage and Input/Output: device controllers and device drivers, disks, scheduling algorithms, file systems, directory structure, device controllers and device drivers, disks, disk space management, disk scheduling, NFS, RAID, other devices. operations on them, UNIX FS, UFS protection and security, NFS.
- Protection and security: Illustrations of security model of UNIX and other OSs. Examples of attacks.
- Epilogue: Pointers to advanced topics (distributed OS, multimedia OS, embedded OS, real-time OS, OS for multiprocessor machines).
All the above topics will be illustrated using UNIX and/or Windows as case-studies.
The lectures will be supplemented by a set of assignments/projects on an instructional operating system. This is the lab component.