xv6 Lab (syscall)
Nowherechan 学徒

整个 syscall 实验感觉就是照猫画虎实现一些系统调用,在已有的框架的基础上。

Using gdb

没什么好说的。

System call tracing

实现 trace 系统调用,然后用户程序 trace.c 会对它进行调用,来追踪其他系统调用。

本质上是在 struct proc 里面加一个掩码,系统调用的时候掩码对上了就给它 print 一下。子进程做的系统调用也要进行追踪,因此 fork 的时候要把掩码复制过去。基本上就跟着 hints 去做就行。
代码

Sysinfo

实现 sysinfo 系统调用,就是返回一些系统信息,这里包括剩余内存和当前进程数。

从由于系统调用运行在内核中,而系统调用需要将数据传给用户进程,那么由于二者所用的并不是同一个页表(在 lab pgtbl 中会更深入地体会这一点),需要用 copyout 来将数据传出去。
其他方面也是跟着 hints 一步一步做就行了。
代码

 Comments