Операционная система « 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)
...
Внизу каждый системный вызов получает номер. Кажется, я не могу понять, для чего нужны эти числа.
Я не спрашиваю об использовании номеров системных вызовов, я прошу использовать аргумент num
для макроса SYSCALL
. Я не могу найти, где он используется.
Даже когда номер системного вызова перемещается на 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
может быть каким-то образом полезен?