南京大学 计算机科学与技术系 计算机系统基础 课程实验 2020

实验前阅读

最新消息(请每天至少关注一次)

  • 2021/05/03
    • 新增ISA riscv64. 如果你需要实现riscv64, 而又在2021/05/03 16:00前获取NEMU的代码, 请运行以下命令(记得先备份项目):
      git clone -b ics2020 https://github.com/NJU-ProjectN/nemu.git /tmp/nemu
      cd /tmp/nemu
      git format-patch b6d9e14a..828ff811
      cd $NEMU_HOME
      patch -p1 < /tmp/nemu/0001-add-riscv64.patch
      git add $NEMU_HOME
      git commit -m "add riscv64"
      rm -rf /tmp/nemu
      
    • 如果你在2021/05/03 17:00前获取abstract-machine的代码, 请运行以下命令:
      cd $AM_HOME/..
      rm -rf $AM_HOME
      bash init.sh abstract-machine
      
  • 2020/12/08
    • PA4已发布
  • 2020/10/23
    • PA3已发布
  • 2020/10/10
    • 我们更新了NEMU中刷新屏幕的方式, 这样之后可以简化PA3中的某些设计. 如果你在2020/10/10 22:05:00之前获取框架代码, 请参考这里更新框架代码.
  • 2020/09/30
    • PA2已发布
  • 2020/09/05
    • PA1已发布
  • 2020/08/31
    • PA0已发布, 请大家按照讲义内容安装系统
离线阅读实验讲义

实验讲义页面通过github page发布, 但其网络可能不稳定. 你可以把这个仓库克隆到本地, 然后通过浏览器来离线阅读讲义.

但随着讲义内容的更新, 你将无法自动地阅读到最新版本的内容. 你需要在仓库路径中手动执行bash update.sh来将最新版本的内容同步到本地. 再次强调, 如果你选择了离线阅读方式, 将由你来负责获取最新的讲义内容.

如何求助
  • 实验前请先仔细阅读本页面以及为什么要学习计算机系统基础.
  • 如果你在实验过程中遇到了困难, 并打算向我们寻求帮助, 请先阅读提问的智慧这篇文章.
  • 如果你发现了实验讲义和材料的错误或者对实验内容有疑问或建议, 请通过邮件的方式联系余子濠(zihaoyu.x#gmail.com)
小百合系版"有像我一样不会写代码的cser么?"回复节选
  • 我们都是活生生的人, 从小就被不由自主地教导用最小的付出获得最大的得到, 经常会忘记我们究竟要的是什么. 我承认我完美主义, 但我想每个人心中都有那一份求知的渴望和对真理的向往, "大学"的灵魂也就在于超越世俗, 超越时代的纯真和理想 -- 我们不是要讨好企业的毕业生, 而是要寻找改变世界的力量. -- jyy
  • 教育除了知识的记忆之外, 更本质的是能力的训练, 即所谓的training. 而但凡training就必须克服一定的难度, 否则你就是在做重复劳动, 能力也不会有改变. 如果遇到难度就选择退缩, 或者让别人来替你克服本该由你自己克服的难度, 等于是自动放弃了获得training的机会, 而这其实是大学专业教育最宝贵的部分. -- etone
  • 这种"只要不影响我现在survive, 就不要紧"的想法其实非常的利己和短视: 你在专业上的技不如人, 迟早有一天会找上来, 会影响到你个人职业生涯的长远的发展; 更严重的是, 这些以得过且过的态度来对待自己专业的学生, 他们的survive其实是以透支南大教育的信誉为代价的 -- 如果我们一定比例的毕业生都是这种情况, 那么过不了多久, 不但那些混到毕业的学生也没那么容易survive了, 而且那些真正自己刻苦努力的学生, 他们的前途也会受到影响. -- etone

实验方案

理解"程序如何在计算机上运行"的根本途径是从"零"开始实现一个完整的计算机系统. 南京大学计算机科学与技术系计算机系统基础课程的小型项目 (Programming Assignment, PA)将提出x86/mips32/riscv32(64)架构相应的教学版子集, 指导学生实现一个经过简化但功能完备的x86/mips32/riscv32(64)模拟器NEMU(NJU EMUlator), 最终在NEMU上运行游戏"仙剑奇侠传", 来让学生探究"程序在计算机上运行"的基本原理. NEMU受到了QEMU的启发, 并去除了大量与课程内容差异较大的部分. PA包括一个准备实验(配置实验环境)以及5部分连贯的实验内容:

  • 图灵机与简易调试器
  • 冯诺依曼计算机系统
  • 批处理系统
  • 分时多任务
  • 程序性能优化

实验环境

  • CPU架构: x64
  • 操作系统: GNU/Linux
  • 编译器: GCC
  • 编程语言: C语言

如何获得帮助

在学习和实验的过程中, 你会遇到大量的问题. 除了参考课本内容之外, 你需要掌握如何获取其它参考资料.

但在此之前, 你需要适应查阅英文资料. 和以往程序设计课上遇到的问题不同, 你会发现你不太容易搜索到相关的中文资料. 回顾计算机科学层次抽象图, 计算机系统基础处于程序设计的下层. 这意味着, 懂系统基础的人不如懂程序设计的人多, 相应地, 系统基础的中文资料也会比程序设计的中文资料少.

如何适应查阅英文资料? 方法是尝试并坚持查阅英文资料.

搜索引擎, 百科和问答网站

为了查找英文资料, 你应该使用下表中推荐的网站:

搜索引擎 百科 问答网站
推荐使用 这里有google搜索镜像 http://en.wikipedia.org http://stackoverflow.com
不推荐使用 http://www.baidu.com http://baike.baidu.com http://zhidao.baidu.com
http://bbs.csdn.net

一些说明:

官方手册

官方手册包含了查找对象的所有信息, 关于查找对象的一切问题都可以在官方手册中找到答案. 通常官方手册的内容十分详细, 在短时间内通读一遍基本上不太可能, 因此你需要懂得"如何使用目录来定位你所关心的问题". 如果你希望寻找一些用于快速入门的例子, 你应该使用搜索引擎.

这里列出一些本课程中可能会用到的手册:

GNU/Linux入门教程

jyy为我们准备了一些GNU/Linux入门教程, 如果你是第一次使用GNU/Linux, 请阅读以下材料

许可协议

本作品采用知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行许可. 要查看该许可协议, 可访问这里, 或者写信到 Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.

results matching ""

    No results matching ""