我在 xv6 中实现了一个新的系统调用,用于跟踪自操作系统启动以来“读取”调用的数量。系统调用已基本完成,但我仍然需要正确实现一个锁来保护增量操作。下面是“syscall.c”文件中“void syscall(void)”函数的相关部分,我在其中添加了获取和释放锁函数。
void
syscall(void)
{
int num;
struct proc *curproc = myproc();
num = curproc->tf->eax;
if (num==SYS_read){
acquire(&count_lock);
count++;
release(&count_lock);
...
我试着把
initlock(&count_lock, "counter");
在 main.c 中,但它给出了“隐式声明”错误,总的来说我真的不确定这个解决方案。有人可以帮我找到放置 initlock 函数的正确位置和文件吗?
只是为了回答我自己的问题 - 我将锁初始化函数的声明添加到“defs.h”中,如下所示:
void init_locks(void);
并在“syscall.c”中定义它:void init_locks(void) { initlock(&countlock, "counter"); }
。该函数在“main.c”的主函数中调用,在系统启动过程中:
int
main(void)
{
...
init_locks();
...
}
一切顺利。