lab0-环境
如果你不熟悉 Linux 的基本使用,请严格按照提示来配置实验环境。
如果使用了本文提示之外的 Linux 发行版或者同一发行版的不同版本,请自行解决可能出现的各种问题。
配置环境
安装 VMWare Workstation Pro
请 STFW。
下载 Ubuntu 22.04 镜像并安装
请 STFW。
建议安装清华源的 Ubuntu 22.04 镜像,点击这里下载。
提醒:安装完 Ubuntu 22.04 后,如果有如下图弹窗提示,请不要点击更新!请不要点击更新!请不要点击更新!

如果你对 Linux 命令行操作感到陌生,可以尝试看看这个入门介绍视频: 绿导师原谅你了:为什么要逼大家用 NOILinux
配置 Ubuntu 22.04 环境
初次运行 liemu
liemu获取项目源码:
如果你善于使用 git 维护自己的代码,那么建议先 fork 该仓库,然后再 clone 你自己的仓库。
liemu 使用 make 来构建项目,你可以在项目根目录下看到 Makefile 文件。
在项目根目录下,你可以使用以下命令:
make: 编译项目。make run: 编译并运行项目。make clean: 清理项目。make gdb: 使用gdb调试项目。
编译项目:
如果看到了以下输出,说明你的环境配置成功了:
尝试输入 help,你会看到所有内置命令的提示。
help: 显示帮助信息。q: 退出liemu。clear: 清空屏幕。c: 继续执行剩余指令。si: 执行 N 条指令,例如si 5表示执行后续 5 条指令,如果不带参数,则默认执行 1 条指令。info: 显示寄存器或监视点的值,例如info r显示所有寄存器的值,info r reg_1 reg_2会显示对应名称的寄存器的值。info w显示所有监视点的值。x: 显示内存地址的值,例如x 0x80000000显示地址0x80000000的值。xx: 显示缓存中的内存地址的值,例如xx 0x80000000显示地址0x80000000的值。LAB2 后才可使用。ls: 打印当前指令附近的指令。w: 添加一个监视点,例如w 0x80000000添加一个监视点到地址0x80000000。d: 删除一个监视点,例如d 2删除第 2 号监视点。hit: 显示缓存命中率。LAB2 后才可使用。trap: 触发一个异常,例如trap 1触发一个编号为 1 的异常。LAB4 后才可使用。queue: 显示异常队列。LAB4 后才可使用。
RTFSC
这是必不可少的环节,不阅读源码,你将无法理解 LAB0 的任务,更无法完成后续的实验内容。这里完全不需要避讳使用 AI 来帮助你理解代码。当然,你至少应该知道从哪里开始阅读代码。
liemu 的源码都在 src 目录下,其中只有一个 cpp 文件,其余模块均采用头文件的形式。
任务
在初步阅读了代码之后,你需要完成一些任务,以检验你是否真的阅读了主要代码。
Task 0 简答题
回答言之有理即可,不要求过于详细。
大家都知道类和结构体的
this指针,但是liemu中却使用了self.cpu这样的长得像python的写法,别担心,这仅仅是代码编写者的习惯。但是请问的是,这是如何做到的?liemu源码中多处使用到了inline关键词,请问inline都出现在了哪种情形中?为什么在那种情形中一定要使用inline关键词?liemu中多处使用了诸如[](const Inst& inst, Machine& m) {...}这样的写法,请问这是什么语法?
Task 1 完善 cmd_info
cmd_infoinfo 命令用于显示一些信息。
其中输入 info w 会打印所有监视点的信息。
而输入 info r 会打印所有寄存器的信息,如果你输入例如 info r a0 t1 sp 则会只打印这三个寄存器的信息。
现在的代码中, info w 的功能已经实现了,但是 info r 相关的功能还没有实现,此时输入该命令会触发 assert 使得程序停止运行。请你完善之。
你会在需要实现的位置看到
请删除 assert(0); 并实现 info r 的功能。
总结来说,那个相关的函数的参数是一个字符串的数组,其内容就是输入的命令的各个部分。例如,我输入了 info r a0,那么数组的内容就是 {"info", "r", "a0"}。如果参数只有 {"info", "r"},那么就是打印所有寄存器的信息,否则就是打印指定寄存器的信息。打印寄存器信息的代码不需要实现,已经在某个位置实现了,你仅需要对应调用即可。
如果最终实现正确,那么输入 info r 会打印所有寄存器的信息,例如下面这样:
输入 info r a0 t1 sp 会只打印这三个寄存器的信息,例如下面这样:
提交
简答题请提交为一个文本文件,命名为
lab0-task0.md。如果你会使用markdown,那么请使用markdown格式,否则就把它当作一个记事本txt文件来编写。代码需要提交整个
src目录。请将以上文件打包为
lab0.tar.gz并提交(如果你不知道如何打包成这样的格式,STFW)。将
lab0.tar.gz以附件的形式发送到指定的邮箱,其中邮件主题为lab0-学号-姓名,例如lab0-920106114514-丁真。
总的来说,在收到 lab0.tar.gz 之后,将解压缩,期望会得到一个名为 lab0 的目录,目录下有 lab0-task0.md 和 src 目录。
最后更新于