Operating Systems

In today’s information age, novice programmers can write a successful “app”, which can run on millions of devices, of different makes/models, of hundreds of different manufacturers. How is this possible? The “Operating System” (OS) running on these devices is a central component enabling the magic of “abstraction”. The OS is responsible for managing the various resources in a computer (a smart-phone is a specific type of computer). This course will teach the underlying principles behind OS design, and its resource management. It uses a mix of theory and hands-on lab exercises to emphasize deep conceptual learning.


Chapter 1: Processes
a. Introduction to operating systems
b. Process abstraction
c. System calls for process management
d. Process execution mechanisms
e. Scheduling policies
f. Inter-process communication
Chapter 2: Memory
a. Intro to virtual memory
b. Mechanism of address translation
c. Paging
d. Demand paging
e. Memory allocation and free space
Chapter 3: Concurrency
a. Introduction to threads and concurrency
b. Locks
c. Condition Variables
d. Semaphores
e. Concurrency bugs
Chapter 4: I/O and Filesystems
a. Communication with I/O devices
b. Files and directories
c. File system implementation
d. Hard disk internals

Hands-On Labs

1. Process and CPU monitoring: Understanding process and CPU monitoring on a Linux system using /proc and relevant Linux commands
2. Memory and disk monitoring: Understanding memory and disk usage by processes in a Linux system
3. Process management using a shell: Foreground and background processes, using the ps, exec, wait, kill commands
4. Dynamic memory management: mmap and munmap system calls
5. Multi-threaded programming: Using pthreads, locks and synchronization
C/C++, Data Structures (for labs)
Estimated Time
50 hours (theory), 15 hours (hands-on labs)

Meet the instructor

Cinque Terre
Mythili Vutukuru
Mythili Vutukuru is an Associate Professor at the Department of Computer Science and Engineering at IIT Bombay. She obtained her Ph.D. and M.S. degrees in Computer Science from the Massachusetts Institute of Technology in 2010 and 2006 respectively. She obtained a Bachelors in Computer Science and Engineering from the Indian Institute of Technology, Madras in 2004.

Her main research interests lie in the broad area of networked systems. She likes to work on challenging research problems at the intersection of computer networking and real-world computer systems.