Our daily lives are becoming increasingly dependent on computer systems, from small, embedded computers to large-scale data centers. Any disruption in or malfunctioning of these systems can lead to devastating consequences for society as a whole. The reliability and availability of these systems is thus essential for our quality of life and for the smooth functioning of society. Therefore, it is important to build computer systems that operate correctly in the face of errors and failures.
This course focuses on the design of fault-tolerant and reliable computer systems. In particular, we will attempt to understand the root causes of faults in computer systems and their impact. We will study both traditional and cutting-edge techniques to provide fault-tolerance and error resilience. Finally, we will explore the practical applications of the techniques in the context of real systems.
An important thread that runs through the course is the evaluation of fault-tolerant systems. To this end, we will study techniques ranging from analytical modeling to empirical validation. The assignments will give you hands-on exposure to cutting edge tools and techniques for dependability evaluation, and will prepare you for the final project. You are encouraged (but not required) to work on a project related to your research interests. The final project constitutes a significant part of the grade.