前言
1. 写在前面的话
一直很期待整理这门课程的笔记。
首先,我认为它的内容展示了我们计算机世界宏观的设计框架和理念。从计算机复杂性开始引入,逐步提出处理复杂性的各种思想、具体解法,每一节课的内容都非常有趣,充满了CSer在建构世界中的奇思妙想。它是我爱计算机最重要的里程碑之一。
其次,它提升了我解决问题的能力。一开始上这课我是特别难受的,因为听不懂……我学习非常关注知识完整的逻辑,持续听不懂或者无法刨根问底时就会变狂躁。为了让自己学得开心点,我想了个点子:做思维导图。事实证明这是一个很不错的想法:因为老师PPT上的知识点是比较分散的,借助AI学习并做思维导图其实就是在捋清课程的思路结构(那个时候用的是GPT4,不过目前最好用的应该是AIStudio)。
最后,它让我收获了一个超棒的学习搭子(也是我大学最优秀的榜样、朋友),这里叫陈猫猫好了。期中前偶然和陈聊起这个课的复习,提到了我在做思维导图,陈就说我们可以一起,自此就开始了一系列梦幻合作。猫猫带来了很多好点子,帮助我从 Xmind 过渡到了 幕布 (强推),更为我带来了一个可以时刻仰慕的榜样。
用猫猫的话来说就是:“幕布将成为我的陪葬精品候选top1”
ps:这门课的老师也非常好,很可爱也很有趣。老师说他的理念是:“课堂应当只讲最重要的内容,其余的要自己学习”。我想,如果想学明白这门课程,或许就要先理解这句话。
2. 关于思维导图
我和猫猫有认真考虑过思维导图开源的问题。一方面它是我们的心血,另一方面,我们相信CSer的精神最终要回归到开源。(其实我们一直有想和好朋友们分享……但是毕竟是两个人一起做的,感觉如果直给的话也对不起彼此)
我们并不想将它作为金钱性质的交易,而且售卖网络资源的意义并不大。我和猫猫希望需要资料的朋友们可以以交流的方式来获取我们的思维导图/Markdown文档。
比如,你愿意为我们带来一些你的学校、工作、生活、竞赛中的信息(甚至对于我来说,本校的朋友们能一起打打球or跑跑步就很好),这都是我们所期待的交流方式。
我比较喜欢的两课是16 原子与隔离 和 21 安全(喜欢前者是因为第一次学事务处理感觉蛮好玩的,后者纯纯是因为觉得各种加密方式 interesting)。所以下面就附这俩节课的思维导图作为演示吧~


3. 建议
- 学习这门课务必合理且大量借助AI的力量
- 学习这门课程能够为学习操作系统、计算机网络、数据库打下非常良好的基础(它可以很好地帮助你理解这三门课程之间的关联)
- 平时好好学,期末压力小(不过这门课我还真没有研究出来满绩的方法……确实是能力有限,但是我觉得自己尽力了)
- 每一篇论文都非常非常非常有趣!!!非常非常非常经典!!!你会在未来的无数时刻感受到这些论文的思想!!!
4. 资源汇总
《计算机系统工程导论》课程源于MIT6.033(梦校啊梦校……),下面是我整理的所有资料。在Github传大量PDF不太明智,估计只会挂少部分资料上去,如果觉得它们有帮助的话可以留言联系我单发。
4.0. 网络资源
课程主页:https://ocw.mit.edu/courses/6-033-computer-system-engineering-spring-2018/ (翻过一遍,上面的内容老师最后都会cover到)
网课:https://www.youtube.com/playlist?list=PL6535748F59DCA484 (学习性价比不是很高,除非想听英语磨耳朵……还是很震惊我在上一门和我一样大的课)
4.1. 课程课件与教材
- 教材: 《Principles of Computer System Design》Part I & II、2024版讲义修订本。
- 批注版课件: 01-22 章完整教学课件(系统复杂性、命名、虚拟化、网络、原子性、一致性、安全性)。
因为我最后复习用的是思维导图+课件,所以课件有完整记录学习批注
4.2. 思维导图(含Markdown版)
- 基础概念: 系统与复杂性 (01-02)、构造抽象计算机系统 (03-04)、模块化 (06)。
- 虚拟化技术: 虚拟化 (07)、虚拟链路 (08)、虚拟内存 (09)、虚拟处理器 (10)。
- 网络系统: 网络设计思想 (11)、网络分层设计 (12)、作为总体的网络系统 (13)。
- 原子性与一致性: 性能 (14-15)、容错与可靠性 (16)、原子性与隔离 (17-18)、分布式原子性与一致性 (19-20)。
- 系统安全: 计算机系统安全 (21)、隔离与访问控制 (22)。
- 专题: Rec.05 END2END、Rec.06 MapReduce、保护软件。
4.3. 课后作业与阅读材料
仅供参考,老师查作业诚信问题非常严格。
4.3.1. 经典系统哲学与设计
- Worse Is Better (作业 01)
- 探讨系统设计中“简单性”与“正确性”的权衡。
- 包含: 英文原版、中译版 PDF、阅读心得。
- UNIX 系统设计 (作业 06)
- 经典论文《The UNIX Time-Sharing System》阅读。
- 包含: 中英双语阅读材料、UNIX 演进补充笔记、作业要求解析。
- End-to-End Arguments (作业 10)
- 系统设计中的核心准则:端到端论点。
- 包含: 论文原件、中译版、个人阅读报告。
4.3.2. 网络系统
- DNS 域名系统分析 (作业 03)
- 包含: DNS 核心文献提纲、DNS 协议分析报告。
- 网络系统总体设计 (作业 11 & 13)
- 涵盖第 11 章与第 13 章关于网络作为整体的设计思想。
- 包含: 章节习题解答、笔记、习题汇总。
4.3.3. 模块化、并发与可靠性
- 模块化与 FSD 解析 (作业 04)
- 探讨系统模块化边界,包含 FSD(FileSystem Design)、解析文档。
- Eraser:动态竞态检测 (作业 07)
- 并发编程中的经典工具论文。
- 包含: Eraser 论文中英对照、重点摘要、实验/报告。
- 线程调度与虚拟解释器 (作业 08)
- 探讨线程调度的演变过程。
- 包含: 线程调度演变史笔记、虚拟解释器相关习题解答。
4.3.4. 分布式系统与一致性
- MapReduce (作业 12)
- Google 经典的分布式计算框架。
- 包含: 论文原件、高质量中译版、论文阅读心得。
- 原子性与隔离 (作业 14)
- 数据库与分布式事务的核心:Atomicity & Isolation。
- 包含: 第 14 章课后习题、详解。
- 拜占庭将军问题 (作业 15)
- 分布式共识算法的基石。
- 包含: 全文翻译、中英对比 PDF、分布式原子性一致性作业参考。
4.3.5. 系统安全专题
- Spectre 攻击 (作业 16)
- 现代处理器缓存漏洞分析(Spectre & Meltdown 相关)。
- 包含: Spectre 原始论文、攻击原理思考笔记、计算机系统安全综合习题。
4.4. 实验
包含 8 个核心实验的说明文档、源码实现及实验报告。
- 实验 1-3: 环境搭建、并发安全、性能分析(含
ph.c源码)。 - 实验 4: 网络分析(Traceroute 实验,含大量抓图分析)。
- 实验 5: MapReduce 实现(含 Python 调试源码及知识点总结)。
- 实验 6: PostgreSQL 数据库安装与配置。
- 实验 7-8: 系统进阶实验(含多版本 Python 脚本实现)。
- 辅助: 提供远程虚拟机使用指南及账号分配参考。
4.5. 核心论文
期末重点考这4篇文章,所以我对这四篇文章单独做了总结
- End-to-End Arguments in System Design (E2E)
- MapReduce: Simplified Data Processing on Large Clusters
- The Byzantine Generals Problem (拜占庭将军问题)
- Spectre Attacks: Exploiting Speculative Execution (幽灵攻击)
4.6. 一些知识点总结
针对考试或进一步理解而整理的专题文档
- 分布式: 2PC/3PC、CAP 定理、FLP 不可能原理、拜占庭容错共识。
- 安全: 密码算法、权限位、身份认证、PoW (工作量证明)。
- 网络: 网络模型总结。
- 存储: RAID 详解、MTTF 计算。
- 设计: 计算机系统设计黄金三原则。
5. 专栏内容
是个人给每节课写的概括,相当于引入,包括我个人的一些思考。
注意:我的概括只写课程主线,但我们做的思维导图很详细地覆盖了课程内容,二者还是有很大区别的。