Homework: User-level threads
在此作业中,您将通过实现代码来执行线程之间的上下文切换,从而完成一个简单的用户级线程包。
Switching threads
下载utherad.c和uthread_switch.S 到你的xv6目录,并在xv6Makefile中_forktest之后添加如下规则:
_uthread: uthread.o uthread_switch.o
$(LD) $(LDFLAGS) -N -e main -Ttext 0 -o _uthread uthread.o uthread_switch.o $(ULIB)
$(OBJDUMP) -S _uthread > uthread.asm
每行开头的空白字符应当是tab而非空格,在Makefile中UPROGS下定义一系列用户程序的下方添加_uthread,运行xv6,然后从xv6 Shell中运行utherad,xv6内核会打印一个线程发生页面错误的故障信息。
我们的工作是实现thread_switch.S,实现并编译运行后我们会看到类似下方的输出(确保是在CPUS=1的情况下运行):
~/classes/6828/xv6$ make CPUS=1 qemu-nox
dd if=/dev/zero of=xv6.img count=10000
10