参考资料
官网课程计划:https://pdos.csail.mit.edu/6.S081/2021/schedule.html
以及点进课程安排中的链接就可以看到的xv6电子课本、lab要求
环境配置
租了个腾讯云服务器,并将系统设为教程推荐的ubuntu 20.4版本,具体配置细节lab要求里的“lab tools page”有很详细的介绍,这里不再赘述。
Boot xv6
- 在执行
$ git clone git://g.csail.mit.edu/xv6-labs-2021
命令时,提示我没有clone权限。
遇到这种情况只需要返回上级目录,然后将打算用于存放仓库代码的目录的权限设为o+w即可。
代码:
sudo chmod o+w dirname
dirname为存放仓库代码的目录
- 生成和运行xv6是以下命令:
make qemu
之后可以进入xv6,这是一个类Unix的操作系统,我们之后的任务就是往其中增加功能。
- 接下来先熟悉一下这个操作系统:
先试试ls
命令
(注:我是先做了sleep功能再写这篇文章,所以此处显示有sleep,一开始打开的时候是没有的)
试试echo:
echo hello world!
试试mkdir:
mkdir test
不过有点bug,我cd进去该目录之后无法使用功能命令了
对此,我在xv6的课本中找到了这样一段描述,不知道会不会和这个有关系:
一方面和cd本身的机制有关,另一方面是因为xv6还没能像Unix一样完善。
- 关于退出:
lab要求中有这样的提示:
我试了试,指的是在同时按下ctrl和字母a键之后快速松手并马上按x键。
关于实现sleep功能:
- 在user/ 下新建sleep.c文件并打开:(使用vim打开一个不存在的文件将会自动创建)
vim sleep.c
- 编写代码
参照教程提示:
代码如下:
#include "kernel/types.h"
#include "kernel/stat.h"
#include "user/user.h"
int main(int argc, char *argv[]){
int n;
if (argc != 2){
fprintf(2, "Please enter a number!\n");
exit(1);
}else{
n = atoi(argv[1]);
sleep(n);
exit(0);
}
}
关于功能添加与评测
-
在.c文件写好代码之后,还要把它添加到功能列表中。
返回上级目录,打开Makefile文件,在UPROGS配置下追加一行代码。
(写到这里的时候没打开相应文件,就不放代码了,不过很简单的,上面的指令什么格式,这个依葫芦画瓢就行)
(vim操作回顾:在normal模式下输入/可以搜索关键词,按n查找下一个结果,按N查找上一个结果) -
之后make qemu,会看到如下结果:
输入ls可以看到ls出现在选项中,如前面的图展示的。 -
来试试功能:
输入该命令后,可观察到几秒内 光标在闪烁,但是没有其他的东西,新的$也没出现,说明进程确实是在休眠。 -
评测
这个make grade命令出现在sleep功能要求之前,好奇宝宝本人手贱没看清楚说明就输入了,结果评测出0分 (现在知道它的含金量了吧?指的是当前lab的所有测试)。
如果做完了其中一个,比如只完成了sleep功能,想只测sleep的,可以使用这个命令:
$ ./grade-lab-util sleep
或者这个:
$ make GRADEFLAGS=sleep grade
我看网上有博客文章说要改这个评测脚本的测试路径和测试命令,但我试了试,反正我这边不改也行的。
结果
看到评测结果,还是很有成就感滴!