Tags: MIT 6.828
redirect()
, twd2 认为可以往 xv6 中加一个 dup2 函数,我表示同意。需要进一步研究 xv6 结构,确定如何添加。遇到的其他问题包括:
uint
类型了。经检查发现用户态程序需要手动 #include "kernel/types.h"
,不然会爆炸。测试结果:
1 |
|
上来直接:
1 |
|
实验指导简要介绍了如何把 xv6 跑起来(make
then make qemu
),如何交作业(make handin
),如何测试成绩(make grade
)。
下面介绍各个子任务如何写。
顾名思义写一个 sleep 例程,休眠一定的 tick 数,tick 的定义是时间中断。
Hints: Look at some of the other programs in user/ to see how you can obtain the command-line arguments passed to a program. If the user forgets to pass an argument, sleep should print an error message. The command-line argument is passed as a string; you can convert it to an integer using atoi (see user/ulib.c). Use the system call sleep (see user/usys.S and kernel/sysproc.c). Make sure main calls exit() in order to exit your program. Add the program to UPROGS in Makefile and compile user programs by typing make fs.img. Look at Kernighan and Ritchie's book The C programming language (second edition) (K&R) to learn about C.
首先 make clean
,然后照猫画虎写一下 user/sleep.c
:
1 |
|
按照说明修改 Makefile ,给 UPROG
变量追加一个项目,运行即可。
如法炮制。
1 |
|
照猫画虎。
负责我的课程助教 twd2 认为,redirect(int, int[])
这个函数有问题,原因在于 xv6 没有 dup2(int, int)
,这个函数是网上抄的。
1 |
|
Bonus 是加 regex 支持,好,抄 user/grep.c
即可。
1 |
|
需要参考 user/sh.c
、user/cat.c
两个例程。
1 |
|