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类型与位置/调用的混合。 进行了一些试验和错误。