首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在这段代码中,参数num的用途是什么?

在这段代码中,参数num的用途是什么?
EN

Stack Overflow用户
提问于 2020-08-02 06:09:13
回答 1查看 94关注 0票数 0

"os161“操作系统包含以下代码。具体来说,这里定义了syscall:

代码语言:javascript
复制
...

#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都得到一个数字。我似乎不知道这些数字的用途是什么。

我不是问syscall数字的用法,而是要求将参数num用于宏SYSCALL。我找不到它的用途。

即使将syscall号移到v0,也不使用参数num。相反,它移动文件kern/syscall.h中定义的常量。

代码语言:javascript
复制
...

#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的论点怎么会有用呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-02 06:41:23

它用于其他工具,以简化源代码的维护。

以下是理解系统调用的引文

S:这个文件是在编译时从syscalls-mips.S创建的,是组装到C库中的实际文件。系统调用的实际名称被放置在这个文件中,它使用一个名为callno-parse.sh的脚本从内核的头文件中读取它们。这避免了系统调用的第二个列表。在实际系统中,通常每个系统调用存根都放在自己的源文件中,以便有选择地将它们链接到其中。OS/161号文件将所有这些内容组合在一起,以简化制作过程。在重新构建用户级代码时,向callno.h添加新的条目会自动导致定义新的用户级系统调用过程。该文件中的每个"SYSCALL(name,num)“宏语句都由C预处理器扩展为相应系统调用函数的声明。

kern/syscall.h很可能是由其中一个工具生产的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63212933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档