Introduction, Operating System: top-down and bottom up views, design issues, modules and components, services and system calls, structure and organization. Executable file formats, Static Linking, Dynamic linking, Loading programs into memory, Anatomy of a Process, Exceptional control flow, Context switching, Process related system calls, Threads, Concurrency and synchronization: Race conditions, Mutual exclusion and problems arising from them, Locks, semaphores and condition variables, Design of Inter-process communication mechanisms, Readers/writers and producer/consumer problems, Re-entrant code and thread-safe libraries, Deadlock, Design alternatives for highly concurrent servers (research topic). CPU scheduling: Scheduling policies and algorithms, Scheduling algorithm comparison, Real-time and multi-processor scheduling, Linux case study. Dynamic memory management: Internal design alternatives for malloc and free routines, Garbage collection. OS memory management: Memory protection, Program relocation, Memory partitioning techniques, Virtual memory, Paging and segmentation, TLB and cache management. File systems: Naming issues, Design alternatives for file systems, Example file systems and their comparison. I/O management: Memory mapped Vs Direct I/O, Interrupt driven Vs Polled I/O, Device controllers and device drivers, Naming issues, OS I/O architecture, Buffering techniques, Disk devices and their management. Timer management in OS, Event notification mechanisms, UNIX signals, Security and protection: Security aspects in operating systems, Authentication, Authorization, Accounting, Security domains and security models, Protection against worms and viruses, Protection against buffer overflow attacks, Windows case study, Linux case study, Java Security, State of the art OS research topics.