操作系统——哈工大操作系统lab2 系统调用

0 参考须知

由于哈工大操作系统的实验引导有些步骤比较模糊,本博客旨在提供完整的实验步骤,并不涉及原理讲解,想弄清楚代码逻辑请仔细阅读实验引导,此外也可以参考实验提到的《注释》一书

1 实验环境

如果对实验环境和一些操作不清楚,请先参考我的上一篇博客,这里不再赘述
操作系统——哈工大操作系统lab1 操作系统的引导

2 开始实验

我们先进入到 linux-0.11/include 目录下,对 unistd.h 进行修改
在这里插入图片描述
在这里插入图片描述
接着进入到kernel目录下,对system_call.s进行修改
在这里插入图片描述
然后进入到include/linux目录下,对sys.h进行修改
在这里插入图片描述
在这里插入图片描述
回到kernel目录,创建who.c文件,编写接口函数准备阶段性测试
在这里插入图片描述
修改kernel目录下的Makefile文件
在这里插入图片描述
kernel目录下运行make命令
在这里插入图片描述
linux-0.11目录下再运行make命令生成镜像
在这里插入图片描述
至此我们阶段性地完成了接口编写,我们现在可以进行阶段性测试了,饭要一口一口吃,之后我们再逐步完善接口。
接下来我们需要对linux-0.11操作系统中的文件进行修改,其实实验引导中提到了,但是比较隐晦。
我们先启动挂载脚本,并进入到hdc目录
在这里插入图片描述
进入到usr/include目录中,对unistd.h进行修改,是的,跟之前是相同的操作,虽然是同名的文件,但实际并不相同
在这里插入图片描述
进入到usr/root目录中,创建测试程序who-test.c,我们开始进行测试程序的编写
在这里插入图片描述
在这里插入图片描述
回到oslab目录,卸载hdc
在这里插入图片描述
启动bochs,观察到我们刚才的修改已生效
在这里插入图片描述
我们来编译运行一下,看起来非常成功,浅浅鼓励一下自己,稍微提醒一下,每次退出bochs时一定要记得执行sync指令,否则有时候真的会出一些类似读档的问题
在这里插入图片描述
接下来就是正式完善whoami和iam的真正接口了。
我们来到kernel目录,重新编写who.c
在这里插入图片描述
这里真的真的要注意一点,关于-22的问题,实验引导上写的返回-1,实际在进行最终测试时会有问题,这个问题我排查了好久,希望大家不要走弯路吧
在这里插入图片描述
完成后重新make,检查有没有错误
在这里插入图片描述
在linux-0.11目录下也要make
在这里插入图片描述
再次挂载hdc
在这里插入图片描述
进入/usr/root目录,创建iam.c和whoami.c文件,分别编写测试程序
在这里插入图片描述
iam.c
这里也有一个得十分注意的点,这里一定要加上这个if判断,关系到最后面的测试
在这里插入图片描述
whoami.c
在这里插入图片描述
完成后卸载hdc
在这里插入图片描述
启动bochs,编译并测试程序
在这里插入图片描述
至此大功告成!

最后的最后我们别忘了进行终极测试。
挂载好hdc,把/home/teacher下的两个测试文件放到usr/root目录下
在这里插入图片描述
卸载hdc,启动bochs,编译testlab2.c
红框中的文件是测试必要的,iam和whoami的名称不能改
在这里插入图片描述
接下来进行测试,完美通过
前面我提到的-22的问题,如果是返回-1,那么这里就会有两个用例无法通过
这个测试有一个精妙绝伦的设计,就是关于这个this is a very very long string的问题,我猜测可能这个string是真的非常非常长,长到一个夸张的程度,你在传递这个字符串的时候,内存可能会存不下,所以你得防止它作为参数去传递,因此我们必须要在iam的测试程序中加入一个if判断,字符串过长的时候将它扼杀在摇篮,防止它进行参数传递。以上仅为我个人猜测,如有错误,欢迎指正。
在这里插入图片描述

3 结语

个人感觉第二个lab比第一个要难很多,因为实验引导相比于第一个要更加隐晦了,很多东西都得自己慢慢摸索,在摸索的过程中发现问题,解决问题。其实我在这个过程中也走了很多弯路,比如我认为的接口不该是这样的形态,在测试程序中就不该有#define LIBRARY以及_syscall这样的语句,真正的接口就该像printf()这样,引入一个stdio.h就好。所以在我看来,这样完成后也只是个半成品。我在实验途中其实也尝试过把它完善成一个真正的接口,但奈何实在知识能力有限,最终没能完成。如果大家感兴趣或许可以往这方面钻研一下。

  • 17
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值