MIT6.033 Computer System Design (Spring 2021)
前置课程:
- 6.004 Computation Structures 计算架构
- 6.006 Introduction to Algorithms 算法导论
ps. 本课 6.033 Computer System Design 和 6.S081 Operating System Engineering 共同作为 6.824 Distributed Systems 的前置课。
Update(2022-08): 由于 2022 Spring 的 MIT6.033 已开始,并且非 MIT 学生无法查看,已将本帖链接更新回 2021 Spring 版。
课程介绍
MIT6.033 Computer System Design 是麻省理工学院计算机科学本科的必修课程,课程涵盖了计算机软件系统与硬件系统的工程设计:控制复杂度的技巧、利用客户-服务设计保证强模块性、操作系统、性能、网络、命名、安全与隐私、容错系统、原子性以及并发活动协调、错误恢复等。
MIT 6.033 包含了四个单元的技术内容:操作系统、网络、分布式系统、安全。
来自文献所提供的现实系统的研究,为系统设计学习提供了参照与对比。课程包含一个学期长的合作设计项目(design project),学生参与全面的沟通交流能力练习。
课程目标
使得学生能设计自己的分布式系统来解决现实世界中的问题。论证自己的设计选择也是设计分布式系统能力的一部分。
这一主要目标由其他这些目标所支撑:
- 学生将能分析并评价现有系统,以及自己的系统设计。作为该目标的一部分,学生将学会辨别现有系统中的设计选择。
- 学生将可以将课程中学习到的技术知识应用到新的系统组件中。这意味着需要学会辨别与描述:
- 计算机系统中,如何使用常见的设计模式(例如抽象与模块化)来限制复杂度。
- 操作系统如何使用虚拟化与抽象来确保模块性。
- 互联网是如何为大容量、多元化应用、互相竞争的经济利益而设计
- 如何在不可靠的网络上构建可靠、可用的分布式系统
- 计算机系统安全的常见陷阱,以及如何应对它们
课程架构
Lectures
Lectures 将教学生设计他们自己的计算机系统所需要的技术细节,并将这些细节放在更大的图景中:包括具体领域系统的图景以及作为一个系统总体的图景。
Recitations
Recitations 给学生一个练习系统分析与口语交流技能的机会。每一次 Recitation 围绕着一个具体的关于系统的 paper 展开。通过读这些 paper,学生能够更好的体会该领域内的沟通交流是如何完成的。Recitation 是基于讨论的,学生得以练习分析、评价以及交流系统的能力
Note: 这一部分是 MIT 学生每周必须要做的论文阅读复述与讨论环节,旨在锻炼学生的口语表达能力以及描述系统设计的能力。个人觉得这个是十分重要的技能,特别是在团队/开源社区等合作开发环境下,能够准确、清晰且简洁地将自己的系统设计、设计选择与取舍讲清楚,是十分重要的一项能力。(避免在沟通上内耗)
这一部分内容可以作为扩展阅读使用,重点不仅是看一些实际系统是如何设计的,还要看作者是如何把自己的系统设计选择向别人讲清楚的。
Writing Tutorials
这些教程将教你关于这门课的沟通的理论以及实践,并帮助你为作业(尤其是 design project)做好准备。你将会流畅掌握不同的沟通流派,培养将技术概念展现给不同听众所需要的策略与技能,学习如何使用写作来培养以及加深你的技术理解。
Note: 主要面向 MIT 学生需要团队完成的学期大作业 design project。该作业要求学生三人组队设计一个自己的系统以解决一个现实世界中的问题。现实世界中的系统都不是由一个人独立构建的,总是团队协作的成果。design project 包含报告、演示、peer review 等环节,感兴趣的可以前往 Design Project 页面 查看。
课程资源
课程网站:https://web.mit.edu/6.033/2021/wwwdocs/
课本:https://ocw.mit.edu/resources/res-6-004-principles-of-computer-system-design-an-introduction-spring-2009/
下面整理的内容已经将非 MIT 学生无法访问的 assignment 以及 design project 的内容去掉了。只留下 lecture、recitation和 writing tutorials。
LEC: lectures
REC: recitations
TUT: writing tutorials
Operating Systems
Lectures
LEC 1: Enforced Modularity via Client/server Organization
LEC 2: Naming
LEC 3: Virtual memory
LEC 4: Bounded buffers and locks
LEC 5: Threads
LEC 6: OS structure, Virtual Machines
Recitations
REC 1: Introduction to 6.033 Recitations
REC 2: We Did Nothing Wrong
REC 3: DNS
REC 4: UNIX
REC 5: UNIX
REC 6: DP Discussion
Networking
多机系统的机器之间数据与请求是如何交换的。如何放大规模。
Lectures
LEC 7: Intro to networking and layering
LEC 8: Network Layer: Routing
LEC 9: BGP
LEC 10: Transport Layer: TCP
LEC 11: In-network Resource Management
LEC 12: Application Layer
LEC 13: Canceled
EXAM: Midterm
Recitations
REC 7: Ethernet
REC 8: Encapsulation
REC 9: Overlay Networks (RON)
REC 10: Performance, Measurement, and Evaluation (RON)
REC 11: DCTCP
REC 12: End-to-end Arguments
REC 13: Canceled
Distributed Systems
通过网络连接的分布式系统中可能会遇到什么问题/错误,如何应对。
Lectures
LEC 14: Reliability
LEC 15: Transactions
LEC 16: Logging
LEC 17: Isolation
LEC 18: Distributed Transactions
LEC 19: Replication
Recitations
REC 14: GFS
REC 15: MapReduce
REC 16: ZFS
REC 17: Canceled
REC 18: Consistency Guarantees
REC 19: Raft
Security
Lectures
LEC 20: Intro to Security + Authentication
LEC 21: Low-level attacks
LEC 22: Secure Channels
LEC 23: ToR
LEC 24: Network Attacks
LEC 25: Wrap-up
EXAM: Final exam
Recitations
REC 20: Raft
REC 21: Meltdown
REC 22: DNSSEC
REC 23: Canceled
REC 24: Mirai
Writing Tutorials
TUT 1: Intro to 6.033 Communication
TUT 2: Consensus and Reasoning About Systems
TUT 3: Reading for Systems Concepts
TUT 4: Collaboration and Collaborative Writing
TUT 5: Visual Design, Figures, and Diagrams
TUT 6: Assembling the DPPR
TUT 7: DP Presentation
TUT 8: Responding to Feedback
TUT 9: Analysis and Evaluation
TUT 10: Peer Review
TUT 11: Final DP Report