OS/161中的系统调用

  • 本文关键字:系统调用 OS os161
  • 更新时间 :
  • 英文 :


我一直在浏览OS/161中关于如何执行系统调用的代码。据我所见,系统调用(例如reboot())实际上被OS/161内核转换为对sys_reboot()的调用。类似地,对fork()的调用将被转换为对sys_fork()的调用。

我的理解正确吗?

谢谢。

每个系统调用都有一个唯一的标识号,在OS161中,这些系统调用号在kern/include/kerne/syscall.h:中定义

#define SYS_reboot       119  

库过程reboot()将系统调用号放在寄存器(v0)中,并向操作系统发出陷阱,系统调用处理程序从汇编语言异常处理程序接收一个名为trapframe的数据结构,其中包含系统调用号等信息。

此数字用于开关情况语句中选择功能:

void syscall(struct trapframe *tf)
    ...
    callno = tf->tf_v0;
    ...
    switch (callno) {
        case SYS_reboot:
        err = sys_reboot(tf->tf_a0);
        break;

最新更新