实验前必读

课程设计内容

本课程设计为我校从南京大学引进的PA实验,作为课程设计让同学们完成。本实验目的为带领同学们从零开始,使用代码实现一台较为完整的计算机。你没有看错,就是实现一台计算机。随着课程设计的深入,你脑海中既有的对计算机的许多认知将会被颠覆,我们真心地希望你在课程设计的过程中,学到一点身为程序员必备的知识,而不仅仅是加快了<Ctrl-C><Ctrl-V>的手速。

要做些什么呢?

放在这里可能说比较早,如果不能接受,可以过段时间再回来看这里。本项目旨在实现由南京大学计算机科学与技术系实现的用于计算机系统基础课程的小型项目 PA(Programming Assignment),你可以将该项目理解为以 x86 架构的子集为其架构的完整计算机。其中 NEMU(NJU Emulator)是一个 n86 模拟器,即该计算机的硬件部分。随着实验进程的深入,我们将给 NEMU 赋予更多的功能,从简单的裸程序到运行操作系统,最终我们将在该模拟器上运行游戏“仙剑奇侠传”。

本课程设计经由南航计算机学院计算机组成原理助教组在南京大学的版本上二次开发,能够更加适应我们的教学计划和教学目标。经我们二次开发后的 PA 包括以下几个部分:

  • 开发环境配置
  • 简易调试工具
  • 冯诺依曼体系
  • 存储管理体系
  • 操作系统基础

实验环境

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

官方手册

很多时候,你需要仔细阅读官方手册,以获得你想要获得的信息和答案。一个良好的开发生态环境中,文档是不可或缺的一部分,而作为一个合格的开发者,你需要的是养成阅读手册的良好习惯。以下列出了部分在本实验中可能会用到的手册(前三个手册请使用右键点击,并另存为到本地查看):

当你无法在手册中找到答案的时候,或者对手册内容抱有疑问的时候,当你决定向他人寻求帮助之前,请你务必学会使用向搜索引擎提问

GNU/Linux 入门

考虑到大部分同学是第一次接触 GNU/Linux 操作系统,难免会在操作上有所不适应,因此我们特别准备了一份 GNU/Linux 的使用教程,请你仔细阅读并动手操作。

成长是一个痛苦的过程

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

PA 在南航生根已有五载,如今将迎来第六个年头。同学们可能无法立刻感受到,但当同学们完成了 PA 实验,再和没有做PA实验的专业相比,你会发现自己的系统能力就是比别人更强。但是达到更强的过程是艰辛的。也许你会觉得,PA 作为课程设计不就是 1 个学分嘛,水过去就好了。当室友在激动地狂喊“下路下路”的时候,当室友在看着韩剧流泪,看着动漫发笑的时候,当室友夜不归宿在外开后宫的时候……冷静下来,泡一杯茶(咖啡),平(ma)心(die)静(ma)气(niang)地打着PA的代码,难道不是一件更让人欣喜的事情吗?——前助教jh 如是说

课程信息

  • 指导老师:陈丹老师、李博涵老师
  • 助教组成员:王山岳、秦瑞哲、祁世成、吴扬俊、叶茜、李易乾、叶竹静、贺银香、沈嘉豪

正文文本的构成

一般来说,正文部分无任何特殊格式,所有文字都应该仔细阅读。遇到讲义中提及的命令,应逐个进行尝试。此外,正文中还包含了一些具有特殊格式的文本块,它们的作用如下:

文本引用:

通常是一些引述的话或轻微的提示。

代码块:

通常是一些代码或者命令行命令

绿色文本块

凡是位于绿色文本块内的文本,均为同学们需要回答的思考题或需要同学们动手操作完成的项目,这类题目均算作思考题,需要在实验报告中进行回答或写出操作过程。

蓝色文本块

通常为一些提示信息,可能是对正文的一些解释说明,亦或者是一些思维拓展的内容,是讲义的一部分

黄色文本块

通常为需要同学们引起注意的内容,遇到这类文本块时要谨慎,要自己阅读并按提示操作。稍有不慎就可能出现后果较为严重的问题,必须引起高度重视。

红色文本块

通常为需要同学们特别引起注意的内容,通常是一些同学们必须实现的功能或者是必须要执行的配置操作等。

关于成绩评定

  • PA主要分为四个大阶段,其中第一阶段(PA0和PA1)占总成绩30%、第二阶段(PA2)占50%、第三阶段(PA3)占20%、第四阶段(PA4)作为加分项选做;
  • 每个大阶段会划分成多个小阶段,每个小阶段需要提交实验报告,每个大阶段的报告成绩由每个小阶段按照一定比例结合得到;
  • 前三个大阶段,每个阶段结束后会分别组织一次现场答辩,检查每个同学的独立完成情况,答辩主要以问答形式进行;
  • 前三阶段,每个阶段分数的占比为代码和实验报告成绩占70%,答辩成绩占30%。

关于实验报告

请点击这里阅读实验报告的具体要求。注意!不规范的报告或提交方式将影响你的成绩。

关于提问和答疑

在向其他同学或助教提问前,请仔细阅读《提问的智慧》,然后使用恰当的方式解决问题。若经自己努力无法解决时,再向他人寻求帮助。对于下面几个常见情况,任何同学或助教都可以不予解答或帮助:

  1. 该提问者多次出现拼写错误,导致本应正常的操作出错却无法解决,例如:

    实力眼瞎:1/L/l/I 不分;0/O 不分——Linux 下的常见字体都对这两组常见眼误做了字体上区分,请仔细观察

    实力手残:build -t 打为 built -ddebian 打为 debain

  2. 该提问者明显没有仔细阅读本在线讲义或要求阅读的手册,例如:

    Q1: 大佬,这个 mul 乘法指令的计算结果为什么计算结果的高位部分不见了啊?

    A1: 请仔细阅读 i386 手册中关于 mul 乘法指令运算结果的存储规则。

    Q2: 嘤嘤嘤,怎么导出我的虚拟机啊?

    A2: 你有把讲义读完吗?

  3. 该提问者出现低级的编程错误,明显为程序打少了对编码不熟练,出现的问题是纯 C 语言问题而与本课程内容无关,例如:

    Q1: 大佬帮我调调这段代码吧,我一编译屏幕上就冒一大堆东西,还运行不了

    A1: 你是成年人了,应该学会看看 gcc 输出的编译错误提示,很好懂的。

    Q2: 大佬,我这段代码一执行就报段错误,是怎么回事啊?

    int *p = NULL;
    ... (some code not ralated to `p`)
    printf("%d", *p);
    

    A2: 你还是留级吧

  4. 提问者试图直接请求发答案,这种情况请参阅课程设计提交要求中的“关于学术诚信”部分。

results matching ""

    No results matching ""