This page serves as a reference for teaching/learning operating systems (OS). The material consists of video lectures, annotated slides used in the videos, practice problems with solutions, programming lab assignments, and additional reading material for reference. The content is broadly divided into the following parts.
Related video courses: Links to other related courses for which I have made lecture videos available: Other textbooks: Besides OSTEP, the following online/physical textbooks give a good end-to-end understanding of computer systems.
Feedback: If you have found the material useful, or have suggestions on how it can be improved, I will be happy to hear from you. Please email me at mythili@cse.iitb.ac.in. Some fun: Here are some silly poems on operating systems that I have written for use in my lectures. |
Lecture# | Topics | Video & Annotated Slides | References | Programming Exercises | Practice Problems |
PART A: Processes | |||||
1 | Introduction to operating systems | video / slides | OSTEP Ch. 2 |
Lab: Introduction to Linux Tools (code)
Lab: Introduction to Debugging Tools (code) Lab: Shell (code) Lab: Inter-process communication (code) |
problems on processes |
2 | Process abstraction | video / slides | OSTEP Ch. 4 | ||
3 | System calls for process management | video / slides | OSTEP Ch. 5 | ||
4 | Process execution mechanisms | video / slides | OSTEP Ch. 6 |
||
5 | Scheduling policies | video / slides | OSTEP Ch. 7, OSTEP Ch. 8 | ||
6 | Inter-process communication | video / slides | Notes on IPC mechanisms A sample tutorial on Linux IPC mechanisms. |
||
PART B: Memory | |||||
7 | Introduction to virtual memory | video / slides | OSTEP Ch. 13 , OSTEP Ch. 14 | Lab: Dynamic memory management (code) | problems on memory management |
8 | Mechanism of address translation | video / slides | OSTEP Ch. 15 | ||
9 | Paging | video / slides | OSTEP Ch. 18, OSTEP Ch. 20 | ||
10 | Demand paging | video / slides | OSTEP Ch. 21, OSTEP Ch. 22 | ||
11 | Memory allocation and free space management algorithms | video / slides | OSTEP Ch. 17 | ||
PART C: Concurrency | |||||
12 | Introduction to threads and concurrency | video / slides | OSTEP Ch. 26 | Lab: Pthreads synchronization (code) A detailed introduction to the pthreads API is here: OSTEP Ch. 27. You can also find several tutorials like this online. |
problems on concurrency |
13 | Locks | video / slides | OSTEP Ch. 28 | ||
14 | Condition variables | video / slides (errata) |
OSTEP Ch. 30 | ||
15 | Semaphores | video / slides (errata) |
OSTEP Ch. 31 Little Book of Semaphores has many interesting synchronization problems |
||
16 | Concurrency bugs | video / slides | OSTEP Ch. 32 | ||
PART D: I/O and Filesystems | |||||
17 | Communication with I/O devices | video / slides | OSTEP Ch. 36 | Lab: A simple filesystem (code) | problems on I/O and filesystems |
18 | Files and directories | video / slides | OSTEP Ch. 39 | ||
19 | File system implementation | video / slides | OSTEP Ch. 40, OSTEP Ch. 42 | ||
20 | Hard disk internals | video / slides | OSTEP Ch. 37 | ||
PART X: The xv6 operating system | |||||
21 | Introduction to x86 hardware | video / slides | Appendix A of xv6 book
Chapters 3,4 from Programming from the Ground Up |
Here are instructions to install xv6 for the programming assignments below.
Here is our xv6 tarball for linux lab machines that you can use to solve the labs below. This is a slightly modified version of the original xv6 code tarball that will work in most systems as well. Lab: Process management in xv6, (code) Lab: Memory management in xv6, (code) Lab: Threads and Synchronization in xv6, (code) |
problems on xv6 process management
problems on xv6 memory management problems on xv6 synchronization problems on xv6 filesystems |
22 | Processes in xv6 | video / slides | xv6 code, Pages 21,22 of xv6 book | ||
23 | Process management system calls in xv6 | video / slides | xv6 code, Pages 7-10 of xv6 book | ||
24 | Trap handling in xv6 | video / slides | xv6 code, Pages 39-44 of xv6 book | ||
25 | Scheduling and context switching in xv6 | video / slides | xv6 code, Pages 61-64 of xv6 book | ||
26 | User process creation in xv6 | video / slides | xv6 code, Pages 23-26 of xv6 book | ||
27 | Virtual memory and paging in xv6 | video / slides | xv6 code, Pages 29-33 of xv6 book | ||
28 | Memory management for user processes in xv6 | video / slides | xv6 code, Pages 34-36 of xv6 book | ||
29 | Locking in xv6 | video / slides | xv6 code, Pages 51-60 of xv6 book | ||
30 | Sleep/wakeup functionality in xv6 | video / slides | xv6 code, Pages 65-73 of xv6 book | ||
31 | Device driver and block I/O in xv6 | video / slides | xv6 code, Pages 46-48,75-81 of xv6 book | ||
32 | Filesystem in xv6 | video / slides | xv6 code, Pages 81-90 of xv6 book | ||
PART N: Networking subsystem | |||||
33 | Network I/O using sockets | video / slides | OSTEP Ch. 33 | Lab: Key-value server
Simple TCP client and server socket programs. TCP server with epoll. |
problems on networking | 34 | Network I/O subsystem in Linux | Video on Linux kernel network stack and kernel bypass techniques by former PhD students Rinku Shah and Priyanka Naik | slides with embedded links to references | 35 | Kernel bypass mechanisms: DPDK | Video on DPDK by former MTech students Diptyaroop Maji and Nilesh Unhale | slides with embedded links to references |