Design and Engineering of Computer Systems

Design and Engineering of Computer Systems
Instructor: Mythili Vutukuru (mythili @ cse.iitb.ac.in)


Course Overview

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.


Additional Study Material

Some pointers to study material that can supplement the content taught in the video lectures.

Textbooks

Video courses

Practice Problems

This PDF practice-problems.pdf contains some sample exam questions from the course offering at IIT Bombay.

Programming Exercises

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 Videos and Slides

Link to YouTube playlist (contains all videos given below)

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