6.s081 Lab:Xv6 and Unix utilities

Lab:Xv6 and Unix utilities

1.实验目的

进一步了解熟悉xv6和系统调用命令。

2.实验内容

1)为xv6实现UNIX程序sleep;sleep应该暂停一段用户指定的时间间隔。解决方案放在user/sleep.c文件中。
2)编写一个程序,它使用UNIX系统调用在两个进程之间通过一对管道“ping-pong”一个字节,每个方向一个。父进程通过向父进程parent_fd[1]写入一个字节来发送,子进程通过从父进程parent_fd[0]读取来接收。在从父进程接收到一个字节后,子进程用自己的字节响应,向child_fd[1]写入数据,然后由父进程读取。解决方案放在user/pingpong.c文件中。
3) 使用管道编写prime-siever的并发版本。这个想法源于Unix管道的发明者dougmcilroy。这一页中间的图片和周围的文字解释了如何做到这一点。解决方案放在user/primes.c文件中。
4)编写一个简单版本的Unix find程序:查找目录树中名称与字符串匹配的所有文件。解决方案放在user/find.c文件中。
5)编写一个简单版本的Unix xargs程序:从标准输入中读取行并为每一行运行一个命令,将该行作为命令的参数提供。解决方案放在user/xargs.c文件中。

3.实验步骤

3.1 sleep

1)进入util分支。

图 1 进入util分支

2)模仿学习user中其他的程序来编写sleep,并使用到了系统调用命令sleep。
图 2 程序截图

3)修改Makefile文件,将我们编写的sleep加入进去。

图 3 修改Makfile文件

4)编译启动,并执行命令,发现结果与网站展示相同,只是sleep了一下,成功。

图 4 执行sleep程序

3.2 pingpong

1)编写pingpong程序。
2)编写pingpong程序,根据提示使用了pipe、fork和read,故编写如下。
提示说道,父进程通过parent_fd向子进程发送一字节,然后子进程通过child_fd再写回自己的一字节给父进程。
图 5 程序截图

3)修改Makefile文件,将我们编写的pingpong加入进去。
图 6 修改Makfile文件

4)编译启动,并执行命令,发现与网站展示相同,成功。

图 7 执行pingpong程序

3.3 primes

1)编写primes程序。
2)修改Makefile文件,将我们编写的primes加入进去。

图 8 修改Makfile文件

3)编译启动,并执行命令,发现与网站展示相同,成功

图 9 执行primes程序

3.4 find

1)根据提示,其中大部分程序都是在ls.c和grep.c中存在的,可以直接用来编写find程序。
2)修改Makefile文件,将我们编写的find加入进去。

图 10 修改Makfile文件

3)编译启动,并执行命令,发现与网站展示相同,成功。

图 11 执行find程序

3.5 xargs

1)根据要求编写xargs程序,其中要求说道这个命令作用——是从标准输入读取并执行命令,例如题目中所提到的echo,显示一段文字。根据提示使用到了exec()和wait(),但是fork()这里感觉意义不大,所以没有使用,只用一个进程一个一个读就可以,遇到回车或空格就知道是下一个参数了。同时,提示还提到kernel/param.h中的MAXARG,进去看后是32,使用到了程序中。
2)修改Makefile文件,将我们编写的xargs加入进去。

图 12 修改Makfile文件

3)编译启动,并执行命令,发现与网站展示相同,成功。注意make qemu之前先make clean。

图 13 执行xargs程序

图 14 执行测试

4.实验结论与心得体会
这个实验是本次实习的开始,万事开头难,从第一个就感觉到了自己阅读和编写代码能力的下降,通过查阅实验指导书等资料,磕磕绊绊完成了该实验。通过本次实验,让我稍微了解了xv6和它的系统调用,希望自己能再接再厉,在接下来的实验中更进一步通过查阅资料学习来提升自己。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值