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

实验前阅读

最新消息
  • 2017/02/25
  • 2016/12/29
    • PA4截止时间定为2017/01/11 23:59:59, 之后我们会对PA4的成绩进行统计, 把PA总成绩和理论课成绩汇总后上报到教务处, 因此截止时间之后不再接受任何提交. 另外任课老师没有允许我们公开PA部分的成绩, 如果你想知道成绩, 届时请向任课老师咨询.
    • 有偿收集课程感想, 具体请见这里. 为了及时统计课程感想的加分, 课程感想的截止时间设为2017/01/11 23:59:59.
  • 2016/12/12
    • PA3已截止.
    • PA4最终提交时间暂定为2017/01/08 23:59:59, 预计最终确定的提交时间不会早于该时间, 请大家保持关注.
  • 2016/11/18
    • 由于PA3的内容超前于部分班级的理论课, PA3的阶段性提交将不会由于迟交而损失分数, 但最后阶段仍会由于迟交而损失分数.
  • 2016/11/07
    • PA2已截止.
    • 由于近期各科目进行期中考试, PA提交时间延后一周.
  • 2016/10/08
    • 如果你使用docker, 并且在运行gdb时发现warning: Error disabling address space randomization: Operation not permitted的消息, 请退出container后在Docker Quickstart Terminal中运行以下命令修复此问题
      $ docker stop ics-vm
      $ docker commit ics-vm ics-intermediate-image
      $ docker rm ics-vm
      $ docker create -it --name=ics-vm -p 20022:22 --security-opt seccomp=unconfined ics-intermediate-image
      
  • 2016/10/07
    • PA1提交反馈见这里.
    • 我们在PA1中发现不少抄袭情况, 经过抽奖程序的筛选, 我们公开如下抄袭情况. 请以下同学在2016/10/14 23:59:59前联系yzh确认, 可以在扣除部分分数后获得改正的机会, 否则PA1将得0分. 如果你有抄袭情况但未被抽奖程序选中, 恭喜你, 你可以在2016/10/14 23:59:59前联系yzh确认后, 免费获得改正的机会, 否则PA1将得0分. 我们不接受类似"请问我是否被检测为抄袭"的询问, 我们会直接忽略这样的询问, 如果你担心被误判, 请如实说明你的实际情况.
      • 1512201761512201?6
      • 1512201521512200?9
      • 1512201281512201?0
      • 1512200811512200?3
      • 1512200931512200?4
      • 1512201761512420??
      • 1512201121512200?8
  • 2016/09/26
    • PA1已截止.
  • 2016/09/09
    • PA0已截止, 提交反馈见这里.
  • 2016/08/28
    • 框架代码和讲义内容已经全部发布. 我们会按照讲义中指定的deadline对作业进行评分. 对于实验进度进行较快的同学, 可以考虑提前进行下一阶段的实验内容, 但注意务必按照讲义中指定的git操作进行代码的管理, 否则你将损失相应的分数.
    • 听闻大家已经在暑期的汇编课上完成了PA0. 如果你之前是在机房的电脑中完成PA0, 我们建议你在自己的笔记本电脑上重新配置开发环境, 因为你以后很可能要熬夜完成PA. PA0截止时间为2016/09/04 23:59:59. 对于外专业选修本课程的同学, 可能需要麻烦你们在第一周腾出约10小时的时间来完成PA0了. 另外考虑到基础的不同, 对于外专业的同学, PA的迟交惩罚下降为10%.

  • 实验前请先仔细阅读本页面以及为什么要学习计算机系统基础.
  • 如果你在实验过程中遇到了困难, 并打算向我们寻求帮助, 请先阅读提问的智慧这篇文章.
  • 如果你发现了实验讲义和材料的错误或者对实验内容有疑问或建议, 请通过邮件的方式联系余子濠(zihaoyu.x#gmail.com)

调试公理
  • The machine is always right. (机器永远是对的)
    • Corollary: If the program does not produce the desired output, it is the programmer's fault.
  • Every line of untested code is always wrong. (未测试代码永远是错的)
    • Corollary: Mistakes are likely to appear in the "must-be-correct" code.

jyy曾经将它们作为fact提出, 事实上无数程序员(包括你的学长学姐)在实践当中一次又一次验证了它们的正确性, 因此它们在这里作为公理出现. 你可以不相信调试公理, 但你可能会在调试的时候遇到麻烦.

成长是一个痛苦的过程

PA是充满挑战性的, 在实验过程中, 你会看到自己软弱的一面: 没到deadline就不想动手的拖延症, 打算最后抱大腿的侥幸, 面对英文资料的恐惧, 对不熟悉工具的抵触, 遇到问题就请教大神的懒惰, 多次失败而想放弃的念头, 对过去一年自己得过且过的悔恨, 对完成实验的绝望, 对将来的迷茫... 承认自己的软弱, 是成长的第一步; 对这样的自己的不甘, 是改变自己的动力. 做PA不仅仅是做实验, 更重要的是认识并改变那个软弱的自己. 即使不能完成所有的实验内容, 只要你坚持下来, 你就是非常了不起的! 你会看到成长的轨迹, 看到你正在告别过去的自己.

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

实验方案

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

  • 简易调试器
  • 指令系统
  • 存储管理
  • 中断与I/O

实验环境

  • CPU架构: IA-32
  • 操作系统: 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 ""