'proc' не определен при попытке добавить системный вызов к xv6 - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь добавить системный вызов "клон" в ОС xv6.Вызов создает новый поток ядра, который разделяет адресное пространство вызывающего процесса.Ниже приведен мой код в proc.c

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, если бы это помогло.

Спасибо!

1 Ответ

0 голосов
/ 23 февраля 2019

Это не имеет ничего общего с реализацией вашего системного вызова, потому что планировщик устанавливает глобальную переменную proc непосредственно перед возобновлением выбранного "работоспособного" процесса.

Причина нуля, вероятно, заключается в том, что вызов этой функциииз неправильного контекста.Ожидается, что реализация системного вызова будет выполнена из функции-обертки с именем sys_mysysfunc, которую функция syscall вызвала из-за системного вызова, инициированного кодом пользовательского приложения.

Пожалуйста, поделитесь с нами всем потоком реализации для получения дополнительной помощи.

...