计算机系统基础习题课 (2023 秋季学期)


课程简介

大家在数字电路里都实现过“状态机”,例如一个计数器内部存储了数字 $x$,每次按下开关执行 $x\leftarrow (x+1)\bmod 3$。计算机系统基础这门课 (以及实验部分) 最重要的 take-away message,就是告诉大家日常使用的计算机本质上也是这么一个状态机。在实验课中,我们会用代码严谨地带大家理解这样的 “状态机” 的状态定义、状态转换,以及与外界的交互方式。

实验课首先承担了大家对 “系统编程” 能力的训练,大家会熟悉 Linux 命令行工具的使用,在将命令行工具变成大家日常生活一部分的同时,完成一系列的编程实验。

理解一个系统的最佳实践就是去实现它。因此在本课程的PA 部分,你将会在框架代码的基础上实现一个 RISC-V 全系统模拟器 NEMU,它不仅能运行各类测试程序,甚至还可以运行操作系统和 “仙剑奇侠传”。模拟过硬件的执行,自然就能深 (痛) 入 (苦) 理解计算机系统了。

  • 计算机系/匡亚明学院:周四 第5-6节 仙I-102 1-17周
  • 人工智能学院:周五 第5-6节 仙II-404 1-17周
  • 任课教师:王慧妍<why@nju.edu.cn> [授课视频]
  • 荣誉顾问:蒋炎岩 <jyy@nju.edu.cn>、余子濠 <yuzihao@ict.ac.cn> (PA 作者)
  • 助教组(理论课助教请咨询各自理论课教师):
    • 实验查重助教:刘瀚之 <jm233333@outlook.com>、张灵毓 <zly@smail.nju.edu.cn>
    • 实验答疑助教:林朗 <211850008@smail.nju.edu.cn>、胡皓明<211250182@smail.nju.edu.cn>、潘昕田<211240001@smail.nju.edu.cn>

课程资料

  1. The Missing Course of Your CS Education [slides]
  2. C 语言拾遗1:机制 [slides]
  3. C 语言拾遗2:编程实践 [slides]
  4. Git, Github和经验分享 [slides][分享1][分享2]
  5. NEMU 框架选讲 [slides]
  6. 数据的机器级表示 [slides]
  7. x86-64与内联汇编 [slides]
  8. 调试:理论与实践[slides]
  9. I/O设备选讲 [slides]
  10. 链接与加载选讲 [slides]
  11. 系统编程与基础设施 [slides]
  12. 程序优化选讲[slides]
  13. 中断与分时多任务[slides]
  14. 虚拟存储选讲[slides]
  15. “造轮子”的方法和乐趣[slides]
  16. 复习&答疑[slides]

实验布置

为了期末算分及助教查重预留时间,本学期所有实验(PA+Lab)的hard deadline暂定2024年1月21日23:59:59,与PA4ddl同时,此时间之后不接受任何实验提交。

第三轮抄袭检测结果已公布,请相关同学根据情况邮件联系任课老师(无联系则按默认情况处理)。

PA大作业

每次实验前,请仔细阅读实验须知/提交方法PA实验指南

Lab小作业

每次实验前,请仔细阅读实验须知/提交方法