首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >尝试将系统调用添加到xv6时未定义“‘proc”

尝试将系统调用添加到xv6时未定义“‘proc”
EN

Stack Overflow用户
提问于 2019-02-22 03:38:23
回答 1查看 299关注 0票数 0

我正在尝试向xv6操作系统添加一个“克隆”系统调用。该调用创建一个新的内核线程,该线程共享调用进程的地址空间。下面是我在proc.c中的代码

代码语言:javascript
运行
复制
int clone(void(*fcn)(void*), void* arg, void* stack)
{
int i, pid;
struct proc *np;
int *myarg;
int *myret;

if((np = allocproc()) == 0)
  return -1;

np->pgdir = proc->pgdir;   //Here's where it tell's me proc is undefined
np->sz = proc->sz;
np->parent = proc;
*np->tf = *proc->tf;
np->stack = stack;

np->tf->eax = 0;

np->tf->eip = (int)fcn;

myret = stack + 4096 - 2 * sizeof(int *);
*myret = 0xFFFFFFFF;

myarg = stack + 4096 - sizeof(int *);
*myarg = (int)arg;

np->tf->esp = (int)stack +  PGSIZE - 2 * sizeof(int *);
np->tf->ebp = np->tf->esp;

np->isthread = 1;

for(i = 0; i < NOFILE; i++)
  if(proc->ofile[i])
    np->ofile[i] = filedup(proc->ofile[i]);
np->cwd = idup(proc->cwd);

safestrcpy(np->name, proc->name, sizeof(proc->name));

pid = np->pid;

acquire(&ptable.lock);
np->state = RUNNABLE;
release(&ptable.lock);

return pid;

}

我发现的大多数实现看起来就像这样,然而,每当我尝试创建它时,它都告诉我'proc‘是未定义的。我所见过的大多数克隆实现看起来几乎是一样的,它们都使用proc。我也很乐意分享我的sysproc.c代码,如果这会有任何帮助的话。

谢谢!

EN

Stack Overflow用户

发布于 2019-02-24 04:13:21

这与系统调用的实现无关,因为proc全局变量是在恢复选定的"runnable“进程之前由调度程序设置的。

null的原因可能是因为从错误的上下文中调用此函数。期望从名为sys_mysysfunc的包装函数执行系统调用实现,该包装函数是由于由用户应用程序代码发起的系统调用而调用的。

请与我们分享您的整个实施流程,以获得更多帮助。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54814949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档