System call tracing
实验要求
第一部分的主要任务是在进行系统调用时,打印出系统调用的名字和返回值。
实验思路
系统调用函数syscall()在syscall.c文件中,我们只需要修改syscall()函数即可,即在syscall()函数内添加对应的printf语句。
实验代码
|
|
运行结果
Date system call
实验要求
第二部分的主要任务是想xv6系统中添加并实现一个date系统调用,用以输出当前的UTC时间。
实验思路
要实现date系统调用主要是添加系统调用号和添加对应的系统调用函数,具体过程可以仿照uptime系统调用的实现。
实验步骤
使用grep命令筛选出出现uptime字样的文件和文件中所在行号,以便仿照uptime系统调用实现date系统调用:
在syscall.c中添加系统调用函数的外部声明,共有两处地方需要添加:
在syscall.h中添加系统调用号:
在sysproc.c中添加系统调用函数sys_date()的实现:
在user.h中添加用户态函数的定义:
在usys.S中添加用户态函数的实现:
由于我们还需要在用户空间来对内核提供的系统命令进行调用,新建用户程序date.c文件,写入以下代码:
|
|
运行结果
由于北京时间与UTC时间相差8个小时,因此 输出的北京时间 = UTC时间 + 8小时
,与实际情况相符,说明 date
这一系统调用添加成功。