系统编程
- 层级
- 本科生
- 状态
- 建设中
提示:本课程仍在持续设计和校准中,页面内容仅供参考,不代表最终教学版本。
教学大纲
课程概览
系统编程训练学生在操作系统接口之上构建可靠程序:进程、线程、文件、网络、内存、同步、构建系统和调试工具都以实践为主。课程强调资源生命周期、错误处理和可观测性。
这是操作系统、网络、软件安全、嵌入式和系统安全课程的实践桥梁。
先修要求
- 计算机组成和汇编语言。
- 熟悉 C、C++ 或 Rust 中至少一种。
- 能够使用 Linux 命令行和 Git。
学习目标
- 正确使用进程、文件、管道、socket 和线程。
- 管理内存、句柄和资源生命周期。
- 编写健壮的错误处理、日志和测试。
- 使用调试器、追踪器和性能工具定位问题。
- 构建一个小型系统工具或服务。
教学组织
- 每周 2 次课堂:一次讲授核心概念,一次用于实验、论文讨论或项目评审。
- 课程按 16 周推进,每周都有可检查的作业、实验或项目里程碑。
- 强调可复现材料:代码、配置、数据、实验日志和报告需要能被助教或同学复查。
周计划
第 1 周
第 2 周
Unix 编程模型和工具链实验与评审
实现一个命令行工具并接入测试。完成配套实验、记录问题,并在课堂评审中解释设计取舍。
第 3 周
第 4 周
文件、目录和错误处理实验与评审
编写可靠文件处理程序。完成配套实验、记录问题,并在课堂评审中解释设计取舍。
第 5 周
第 6 周
进程、管道和信号实验与评审
实现一个小型 shell 或任务运行器。完成配套实验、记录问题,并在课堂评审中解释设计取舍。
第 7 周
内存、所有权和调试
用 sanitizer 或 valgrind 修复内存问题。
第 8 周
内存、所有权和调试实验与评审
用 sanitizer 或 valgrind 修复内存问题。完成配套实验、记录问题,并在课堂评审中解释设计取舍。
第 9 周
第 10 周
线程、同步和并发 bug实验与评审
实现并调试一个并发队列或服务器。完成配套实验、记录问题,并在课堂评审中解释设计取舍。
第 11 周
Socket、协议和网络服务
实现一个简单网络服务和客户端。
第 12 周
Socket、协议和网络服务实验与评审
实现一个简单网络服务和客户端。完成配套实验、记录问题,并在课堂评审中解释设计取舍。
第 13 周
第 14 周
构建、部署和可观测性实验与评审
加入日志、指标和 CI 检查。完成配套实验、记录问题,并在课堂评审中解释设计取舍。
第 15 周
第 16 周
系统工具项目实验与评审
提交工具、测试、性能和故障说明。完成配套实验、记录问题,并在课堂评审中解释设计取舍。
考核方式
个人作业
25%概念题、阅读题、设计题和小型编程或实验任务。
实验与项目
40%系统程序、测试、调试记录和运行说明。
课堂参与与评审
10%参与讨论、演示、代码或论文评审,以及同伴反馈。
期末报告与答辩
25%提交可复现材料、技术报告和演示,说明方法、结果、限制与后续工作。
课程项目
项目要求学生实现一个小型系统工具或服务,例如并发下载器、日志收集器、代理、文件同步器或实验平台组件。
课程政策
- 允许使用 AI 工具,但所有生成代码、实验记录和设计建议必须经过学生本人审查,并在报告中说明使用方式。
- 严禁提交不能解释的代码、证明、配置或实验结果;答辩时每名成员都需要解释自己负责部分的设计、测试和取舍。
- 迟交会影响迭代评分,但课程更看重可复现、可审计和可维护的结果,而不是临时堆砌。
参考课程
国际名校
- CMU15-213 Introduction to Computer Systems
- CornellCS 3410: Computer Organization and Systems Programming
- Georgia TechCS 2200: Introduction to Systems and Networking
- MIT6.033 Computer System Engineering
- PrincetonCOS 217: Introduction to Programming Systems
- StanfordCS110: Principles of Computer Systems
- University of WashingtonCSE 351: The Hardware/Software Interface
中国 985 高校
- 上海交通大学计算机系统基础(ICS)
- 中国科学技术大学操作系统
- 南京大学操作系统:设计与实现
- 清华大学程序设计训练(Rust)
- 西安交通大学操作系统原理