добавление кода выхода к процессам в xv6 - PullRequest
1 голос
/ 03 апреля 2020

Я пытаюсь добавить код состояния выхода в процессы в XV6.

Я внес следующие изменения:

1) в sysproc.c:

int
sys_exit(int status)
{
  exit(status);
  return 0;  // not reached
}

2) в defs.h:

...
void            exit(int);
...
* От 1012 * 3) до proc.h:
struct proc {
  PCB struct elements...
  ...
  int status;                  // added
};

4) до proc.c:

void
exit(int status)
{
  struct proc *curproc = myproc();
  struct proc *p;
  int fd;

  cprintf("exit received: %d\n",status); // for debugging purposes

  curproc->status = status; // added

  ...rest of exit system call...
  }

5) до user.h:

// system calls

...
int exit(int) __attribute__((noreturn));
...

Затем я хотел проверить добавленную «функциональность» с помощью простой программы пользовательского пространства:

int
main (int argc, char *argv[]) {
    exit(3);
}

Но было напечатано следующее (обратите внимание на вызов cprintf для отладки в proc.c):

$ exittest
exit received: -2146420507

Что я сделал не так?

Спасибо

1 Ответ

1 голос
/ 03 апреля 2020

Вы не можете прочитать аргумент системного вызова, как в «нормальной» функции, вы должны использовать функцию argint (см. Другие системные вызовы, например sys_kill)

Таким образом, ваш исправленный системный вызов должен быть:

int
sys_exit(void)
{
  int status;
  if(argint(n, &i) < 0) 
      // not arg:pass 0 to exit
      exit(0);
  exit(status);
  return 0;  // not reached
}
...