OS/161 中的系统调用
System Calls in OS/161
我一直在研究 OS/161 中关于如何执行系统调用的代码。据我所知,系统调用(例如 reboot()
)实际上被 OS/161 内核翻译成对 sys_reboot()
的调用。同样,对 fork()
的调用将转换为对 sys_fork()
的调用。
我的理解对吗?
谢谢。
每个系统调用都有一个唯一的标识号,在OS161中这些系统调用号在kern/include/kern/syscall.h中定义:
#define SYS_reboot 119
库过程 reboot() 将系统调用编号放入寄存器 (v0) 并向 OS 发出陷阱,系统调用处理程序从汇编语言异常处理程序接收一个名为 trapframe 的数据结构,该数据结构除其他信息外,还包含系统调用号。
此数字用于 select 函数的 switch case 语句:
void syscall(struct trapframe *tf)
...
callno = tf->tf_v0;
...
switch (callno) {
case SYS_reboot:
err = sys_reboot(tf->tf_a0);
break;
我一直在研究 OS/161 中关于如何执行系统调用的代码。据我所知,系统调用(例如 reboot()
)实际上被 OS/161 内核翻译成对 sys_reboot()
的调用。同样,对 fork()
的调用将转换为对 sys_fork()
的调用。
我的理解对吗?
谢谢。
每个系统调用都有一个唯一的标识号,在OS161中这些系统调用号在kern/include/kern/syscall.h中定义:
#define SYS_reboot 119
库过程 reboot() 将系统调用编号放入寄存器 (v0) 并向 OS 发出陷阱,系统调用处理程序从汇编语言异常处理程序接收一个名为 trapframe 的数据结构,该数据结构除其他信息外,还包含系统调用号。
此数字用于 select 函数的 switch case 语句:
void syscall(struct trapframe *tf)
...
callno = tf->tf_v0;
...
switch (callno) {
case SYS_reboot:
err = sys_reboot(tf->tf_a0);
break;