在xv6中哪里初始化用于系统调用的锁?

问题描述 投票:0回答:1

我在 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 函数的正确位置和文件吗?

c locking qemu xv6 spinlock
1个回答
0
投票

只是为了回答我自己的问题 - 我将锁初始化函数的声明添加到“defs.h”中,如下所示:

void init_locks(void);
并在“syscall.c”中定义它:
void init_locks(void) { initlock(&countlock, "counter"); }
。该函数在“main.c”的主函数中调用,在系统启动过程中:

int
main(void)
{
  ...
  init_locks();
  ...
}

一切顺利。

© www.soinside.com 2019 - 2024. All rights reserved.