# CS110: Principles of Computer Systems

## 课程简介

- 所属大学：Stanford
- 先修要求：编程基础、Unix、GDB、Valgrind
- 编程语言：C/C++
- 课程难度：🌟🌟🌟🌟🌟
- 预计学时：150小时

这门课程在 [CS107](https://web.stanford.edu/class/archive/cs/cs107/cs107.1246/calendar) 的基础知识上进行拓展，深入研究计算机系统和程序构建。它专注于设计大型系统、跨多台机器的软件以及并行计算。课程的目标是教授学生计算机软件和硬件系统工程的原理和实践。

课程涵盖了广泛的主题，包括你的程序如何映射到计算机系统的组件上，理解程序行为和执行，理解大型系统的设计和权衡，编写跨多台机器的软件，以及编写在单台机器上并行运行任务的软件。

这门课程的教学风格是引人入胜且实用的。教师通过理论知识和丰富的编程实验，引导学生理解计算机系统中众多的技术挑战和设计原则。每周的实验让你为项目增加新功能，这些项目专注于提高学生的实践技能，让你有机会初步了解计算机系统的每一个方面，并且会公布答案，让你及时检查自己对关键知识点的掌握情况。

除了实验外，课程还包括旨在提供大量编程实践经验并加深对课程材料理解的项目作业。每项作业配有完整的测试框架。

## 课程资源

- 课程网站：[winter20](https://web.stanford.edu/class/archive/cs/cs110/cs110.1204/)
- 课程视频：[spring19](https://www.youtube.com/playlist?list=PLai-xIlqf4JmTNR9aPCwIAOySs1GOm8sQ)
- 课程教材：[Computer Systems: A Programmer’s Perspective](https://www.cs.sfu.ca/~ashriram/Courses/CS295/assets/books/CSAPP_2016.pdf)
- 课程作业：7 labs + 8 assignments，参见课程网站。

## 资源汇总

@xuzheng465 在学习这门课中用到的所有资源和作业实现都汇总在 [xuzheng465/Stanford_CS110 - GitHub](https://github.com/xuzheng465/Stanford_CS110) 中。
