Instructor: Mythili Vutukuru (mythili @ cse.iitb.ac.in) |
The video lectures in this page have been recorded as part of the NPTEL course Design and Engineering of Computer Systems offered in Spring 2022. The course ``Design and Engineering of Computing Systems'' is also taught as a first-year PG elective at IIT Bombay, with the course code CS744, usually in the Autumn semester. In addition to the NPTEL recorded video lectures, this page also contains some additional reference study material in the form of links to online textbooks/video courses, programming exercises, and practice problems from the course offering at IIT Bombay.
This course is a broad computer systems course covering various aspects of how to design and engineer real-world computer systems. The course cuts across multiple topics such as operating systems, computer networks, computer architecture, virtualization, cloud computing, performance analysis, and distributed systems. The course is accessible to anyone who has a basic introduction to computer programming; no other prior knowledge is assumed. But UG-level knowledge of operating systems and networking will be useful.
The course concepts will be covered in a bottom-up manner, beginning with a discussion of the building blocks of computer systems, and ending with case studies and examples of end-to-end design of real-world computer systems. We start with an overview of computer systems hardware. We then understand how the operating system manages the hardware, and how user applications are built over the operating system. We will also understand how user applications communicate over the Internet. We will then study how a computer system is assembled from various sub-components, using examples from real life. Next, we will learn how to measure the performance of computer systems, and how to optimize for good performance. Finally, we will study some techniques to improve the fault tolerance and reliability of computer systems.
This PDF practice-problems.pdf contains some sample exam questions from the course offering at IIT Bombay.
To provide a more hands-on experience to the students of the NPTEL course, we conducted an online systems bootcamp on application system software and OS internals development during the Summer of 2022. The first week of the bootcamp consisted of several exercises to get familiar with Linux-based tools. Subsequent weeks consisted of two tracks: the application software track consists of a series of exercises to build a simple web server in C/C++, and the OS internals track consists of several simple exercises based on the xv6 operating system.
Lecture# | Topic | Video | Annotated Slides |
1 | Introduction to Computer Systems | video | slides |
2 | Principles of Computer Systems Design | video | slides |
3 | Overview of CPU hardware | video | slides |
4 | Overview of memory and I/O hardware | video | slides |
5 | Introduction to Operating Systems | video | slides |
Tutorial: Basics of Linux | video | ||
Tutorial: Lifecycle of C program | video | ||
6 | Processes | video | slides |
7 | Kernel mode execution | video | slides |
8 | Threads | video | slides |
9 | CPU scheduling policies | video | slides |
10 | Virtual machines and containers | video | slides |
Tutorial: A simple shell | video | ||
Tutorial: Proc filesystem | video | ||
Tutorial: Multithreading using pthreads | video | ||
Tutorial: Virtualbox installation | video | ||
Tutorial: Docker installation | video | ||
11 | Memory management in OS | video | slides |
12 | Paging | video | slides |
13 | Demand paging | video | slides |
14 | File system and memory | video | slides |
15 | Optimizing memory access | video | slides |
Tutorial: Memory allocation using mmap | video | ||
16 | Filesystem Datastructures | video | slides |
17 | Filesystem Implementation | video | slides |
18 | Network I/O via Sockets | video | slides |
19 | Network I/O Implementation | video | slides |
20 | Memory and I/O virtualization | video | slides |
Tutorial: File I/O in C | video | ||
Tutorial: Socket programming | video | ||
21 | Introduction to computer networking | video | slides |
22 | Internet Routing and Forwarding | video | slides |
23 | Transport protocols | video | slides |
24 | Application layer protocols | video | slides |
25 | Network Security | video | slides |
Tutorial: Network debugging tools | video | ||
Tutorial: Learning wireshark | video | ||
26 | Multithreaded application design | video | slides |
27 | Inter-process communication | video | slides |
28 | Multi-tier application design | video | slides |
29 | Examples of end-to-end systems design | video | slides |
30 | Deployment of computer systems | video | slides |
Tutorial: Condition variables in pthreads | video | ||
Tutorial: Inter process communication using FIFO | video | ||
31 | Performance measurement | video | slides |
32 | Performance analysis | video | slides |
33 | Performance profiling and optimization | video | slides |
34 | Caching | video | slides |
35 | Performance scalability | video | slides |
Tutorial: Basics of Perf tool | video | ||
36 | Fault tolerance and reliability | video | slides |
37 | Replication and consistency | video | slides |
38 | Atomicity | video | slides |
39 | Distributed transactions | video | slides |
40 | Case studies of distributed systems design | video | slides |