【发布时间】:2020-11-22 13:06:06
【问题描述】:
“os161”操作系统包含以下代码。具体来说,定义系统调用的位置:
...
#include <kern/syscall.h>
...
#define SYSCALL(sym, num) \
.set noreorder ; \
.globl sym ; \
.type sym,@function ; \
.ent sym ; \
sym: ; \
j __syscall ; \
addiu v0, $0, SYS_##sym ; \
.end sym ; \
.set reorder
...
SYSCALL(fork, 0)
SYSCALL(vfork, 1)
SYSCALL(execv, 2)
SYSCALL(_exit, 3)
SYSCALL(waitpid, 4)
SYSCALL(getpid, 5)
...
在底部,每个系统调用都有一个数字。我似乎无法弄清楚这些数字的用途。
我问的不是系统调用号的使用,我问的是宏SYSCALL 的参数num 的使用。我找不到它在哪里被使用。
即使系统调用号移动到v0,参数num 也不会使用。相反,它会移动文件kern/syscall.h 中定义的常量:
...
#define SYS_fork 0
#define SYS_vfork 1
#define SYS_execv 2
#define SYS__exit 3
#define SYS_waitpid 4
#define SYS_getpid 5
...
num 的论点怎么会有用?
【问题讨论】:
-
粘贴冗长的版权声明不会使问题更容易理解。考虑编辑并只保留相关部分!
-
@dash-o 当然。谢谢。
-
据我了解,它根本没有使用。我怀疑以前版本的其余部分使用
SYSCALL宏来定义SYS_sym,而不是将这些定义放在kern/syscall.h中。现在它仍然至少有一个好处:即使num参数被宏忽略,代码仍然显示每个已安装系统调用的系统调用号。无论如何,您是否尝试将其删除并运行一些测试? -
@dash-o 不确定您对版权声明的建议是否明智。您要删除的版权声明明确指出不应删除它...
标签: c operating-system kernel mips os161