我正在尝试在 XV6 中创建一个简单的基于优先级的调度程序。为此,我还必须创建一个允许进程设置其优先级的系统调用。正如这里和其他地方所讨论的,我已经完成了创建系统调用所需的一切:
问题是,当我调用函数时,我不能传递任何变量,或者更确切地说,它运行起来好像没有错,但正确的值没有显示在函数内部。
外部声明(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。我通过将值分配给 pid 和 pty 来检查 cprintf 是否正常工作。我花了大约 6 个小时尝试所有我能想到的所有可能的组合,我开始认为在 XV6 中没有通过系统调用传递值的内置机制。我错过了什么吗?先感谢您。