xv6添加一个计算系统调用的系统调用
编辑:
得到它了
这是我做的:
在syscall.c中:
extern int numSysCalls;
在sysproc.c中:
int numSysCalls = -1;
好的,所以我正在努力实现一个简单的系统调用,它返回系统调用的次数。 看起来很简单,但我收到一个我不明白的错误…
基本上,这就是我所做的:在syscall.c中有一个名为syscall()的函数,用于检查它是否是一个系统调用。 我基本上已经声明了一个变量,并且每次调用此函数时都会递增它。
syscall.c中的Var声明:
18: int16_t numSysCalls = -1; //global
Syscall()函数:
115: void syscall(void){ 116: numSysCalls++; ...
我得到的错误:
kernel/syscall.c:116: error: 'numSysCalls' undeclared (first use in this function) kernel/syscall.c:116: error: (Each undeclared identifier is reported only once kernel/syscall.c:116: error: for each function it appears in.)
然后,在sysproc.c中,我有相同的extern int,当我调用我的函数numCalls时,只返回int,如下所示:
sysproc.c中的外部变量:
extern int numSysCalls;
问题方法:
int sys_numSys(void){ if (numSysCalls == -1) return numSysCalls; else return numSysCalls + 1; }
总结: 每当调用一个系统调用(任何类型) 时, numSysCalls应该递增 – 成功与否。
numSys仅返回数字,如果错误则返回-1。
答案是extern和int类型与位置/调用的混合。 进行了一些试验和错误。