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;