Я пытаюсь создать простой планировщик на основе приоритетов в XV6. Для этого мне также нужно создать системный вызов, который позволит процессу установить свой приоритет. Я сделал все необходимое для создания системного вызова, как описано здесь и в других местах:
как добавить системный вызов / утилиту в xv6 < / а>
Проблема в том, что я не могу передавать какие-либо переменные при вызове функции, или, скорее, она работает так, как будто все в порядке, но правильные значения не отображаются внутри функции.
Объявление Extern (syscall.c):
...
extern int sys_setpty(void);
static int (*syscalls[])(void) = {
...
[SYS_setpty] sys_setpty,
};
Вектор системных вызовов (syscall.h):
#define SYS_setpty 22
Реализация (sysproc.c):
void
sys_setpty(int pid, int pty)
{
cprintf("function pid: %d \n", pid);
cprintf("function pty: %d \n", pty);
}
(defs.h и user.h):
void setpty(int, int);
Макрос (usys.S):
SYSCALL(setpty)
Вызов функции:
setpty(3, 50);
Выход:
function pid: 16843009
function pty: 16843009
Значения всегда совпадают с точным числом: 16843009. Я проверил, правильно ли работает cprintf, присвоив значения pid и pty. Я потратил около 6 часов, пытаясь каждую возможную комбинацию всего, что я могу придумать, и начинаю думать, что в XV6 нет встроенного механизма для передачи значений через системный вызов. Я что-то упускаю? Заранее спасибо.