Skip to content

计算机系统基础 PA 实验指导 (for NJU students)

《计算机系统基础》课程组 汪亮

2021年8月


PA的实验任务和提交规则

  • 你需要完成教程中的所有任务,除明确注明是可选任务的额外加分项以外,其余都是必做任务;实验报告必须认真写;

  • 各阶段的提交采用软实时原则,我们会公布每个阶段的截止时间,截至时间过后提交会扣分;

  • 在提交时,使用make submit_pa-对应阶段命令自动提交;同时将所生成的位于submit/目录下的压缩包提交到cslab网站的备用提交窗口,不要试图解压或重命名该压缩包;

  • 当然,不允许抄袭!我们会做交叉检验,你的代码更改过程会有详细的记录。一经查实,该阶段得分清零。


PA 0 搭建并熟悉实验环境

经过教学平台研发组的努力,我们上线了新版PA在线实验教学平台,使用方式如下:

  1. 打开浏览器,访问网址http://114.212.10.200注意只能校内访问,推荐使用 Chrome 浏览器,使用 Firefox 的同学,请在选项>权限>自动播放>设置...(T)中选择所有网站的默认值允许音频和视频,使用 IE 或者 Edge 的同学请自求多福;

quanxian_shezhi

quanxian_shezhi_2

  1. 第一次登陆主界面时,用户名和密码都是pa学号(例如:pa123456789),登陆后,请尽快修改密码(有两处密码需要修改)。如果系统里没有你的账号,找老师和助教

    • 网页登陆密码: 点击网页左边栏的设置按键,在更改密码处修改密码

    • SSH登陆密码: 网页登陆后,点击右上角激活shell按钮,登录终端(hostname、port等信息位于doc/文件夹内的ssh终端登录信息.txt中),登录后在终端输入命令:

    passwd

    按照提示先输入当前密码,再输入新密码并确认,即可修改成功

    • 注意:网页和终端密码相互独立,请分别修改
  2. 在属于你的目录下,有pa_nju/doc/submit/temp/log/五个文件夹:

    • pa_nju/ --- 实验代码
    • doc/ ----------- i386手册和在线教程
    • submit/ -------- 提交时产生的压缩包,不要试图更改其中的内容
    • temp/ ---------- 临时文件夹,做实验用不到
    • log/ ---------- log文件夹,做实验用不到
    • .gitconfig ---- git配置文件,无需关注
  3. 要查看i386手册或者在线教程,请在doc/文件夹中点击i386intel.pdf或者guide/index.md,在新标签页中查看;

  4. 点击页面上的终端图标,将在新标签页中打开在线终端,输入以下命令:

cd pa_nju/

make clean

make

如果编译成功没有报错,那么恭喜大家,目前看起来你的账号没有问题!

  1. 在实验过程中,可以随时点击页面右上角的心情图标,告诉教学团队你此时的心情,这既是我们教学科研的重要数据来源,也是让我们注意到问题进而主动帮你解决的一种渠道。

差不多了,我们可以准备开始愉快的PA之旅了!

Good luck & Don't panic :-)

✿✿ヽ(°▽°)ノ✿


PA 1 数据的表示、存取和运算

本章前言

现代计算机的世界是一个由0(低电平)和1(高电平)构成的世界,所有的信息都被表示成01串形式的数据。我们把世界上所有需要表示的数据大概分一分,发现可以分为两大类:非数值型和数值型。

非数值型大体上对应的是用于表征类别或个体的信息,比如汉字、英文字母、阿拉伯数字、每个学生个体等等,我们可以将每一个需要表示的对象赋予一个编号,并且让大家都遵守统一的编号规则就行了。比如ACSII编码,UTF-8编码等等。我们在PA 2开始要重点关注的指令数据,其操作码就可以认为是一种非数值型数据。

与非数值型相对应的是数值型的信息,用于进行科学计算,主要包含两种类型:整数和实数(复数总可以用两个实数来表示)。而在整数和实数上又定义了加减乘除等各种运算规则。计算机顾名思义就是要进行计算的,在这一节中我们要重点关注的就是以整数和实数为代表的数值型信息的表示、存取和运算。

在PA 1中,配合理论课的节奏,我们先通过数据的存储开始简单了解NEMU的总体结构,进而从整数和浮点数的表示、存取和运算出发,开始构建一台完整计算机的旅程。

各阶段划分

与课本的对应关系

PA 1三个阶段都对应课本第2章:数据的机器级表示与处理。此处和以后所指课本为:袁春风老师编写的《计算机系统基础(第2版)》,机械工业出版社,2018.7。


PA 2 程序的执行

本章前言

通过PA 1的努力,我们已经使得NEMU具备了初步的数据表示、存储和运算能力,可以说是搭建了一个功能强大的计算器。但是,我们还不能让我们的机器按照我们的意愿去解决更为复杂的计算问题。那要怎样做才行呢?作为计算机方向的专业选手,我们已经知道答案:写程序!那程序到底是什么,计算机是怎样运行程序的?这就是我们通过这一阶段的PA需要解决的问题。

在基本的理论学习之后,我们了解到,其实所谓程序就是由一条又一条称为指令的01串所构成的序列。CPU能够解读这些由01串编码好的指令并将其转换成对应的操作。硬件的设计者和软件开发者之间达成一项协议:什么样的01串对应什么样的指令,会产生什么样的操作。这项协议的具体内容就构成了所谓的指令集体系结构(Instruction Set Architecture, ISA),也就是i386手册所论述的东西。

在真实的机器上,ISA是通过半导体芯片来实现的,这就是我们能够看得见摸得着的硬件。而NEMU则是一个软件实现的模拟器,那它能够和硬件实现的机器一样用来运行程序吗?答案是肯定的,其原因就在于:对于上层的程序而言,不管是怎么实现的,只要有人实现了ISA的功能,我就能通过编排指令序列来完成需要的计算功能。因此,我们只要用软件来造一台能够读懂指令并模拟其执行过程的“软”机器就可以了。这就相当于给应用程序创造一个绝对逼真的虚拟现实环境,程序在其中分不清是真是幻,于是对程序而言模拟器和硬件机器就没有区别。

各阶段划分

与课本的对应关系

PA 2-1对应课本第3章:程序的转换及机器级表示(部分包括第5章:程序的执行);PA 2-2对应课本第4章:程序的链接,与课本4.2节的关系更密切一点;PA 2-3与课本知识没有对应关系。


PA 3 存储管理

本章前言

通过PA 2的实验,我们已经创造了一台能够进行各种复杂运算的机器。在以后学习了包括图灵机在内的知识后,我们就能够了解到在PA 2中所实现机器的强大之处:它的计算能力和现今所有的计算机等价。各种超级计算机只是算得比咱快,但我们的机器说不可计算的问题,超级计算机甚至是量子计算机也没办法。

做计算理论的科学家们到这一阶段或许就心满意足了,但我们却还不能止步不前。我们希望机器能够算得更快,于是针对速度的瓶颈之一:访存操作进行加速,于是便设计了cache。我们希望在机器上运行的程序和数据得到更多保护,于是便加入了分段保护机制。我们希望同时运行的多个程序之间互不干扰,于是便产生了虚拟地址空间的做法。

各阶段划分

与课本的对应关系

本阶段三个小阶段都对应课本第6章:层次结构存储系统。


PA 4 异常、中断与I/O

本章前言

通过前三个阶段的PA,我们已经基本构建了一个能够运算的机器的所有功能。目前为止,NEMU只能够进行正常的控制流执行。在最后阶段,我们添加异常控制流的支持并使得NEMU能够实现和外设的I/O。最终,我们希望在NEMU模拟器上能够运行类似仙剑奇侠传这样的小游戏。

各阶段划分

与课本的对应关系

PA 4-1对应课本第7章:异常控制流;PA 4-2对应课本第8章:I/O操作的实现;PA 4-3与课本知识没有对应关系,欢迎各位在完成这一阶段后放飞自我,魔改框架代码。


致谢

本教程及所涉框架代码和实验指导内容是在南京大学余子濠同学2014年所完成的PA框架代码和教程基础上发展而来。在教学过程中,老师和同学们提供了大量的反馈意见,帮助我们修正框架代码的bug并提高实验指导的内容。在此感谢所有为PA做出过贡献的老师和同学们!

本框架代码部分功能的开发得到了南京大学本科生创新项目《面向入门级编程活动的压力检测和效果评估方法研究》的支持。


附录A. I386手册勘误

附录B. Git入门教程