【问题标题】:System Calls in OS/161OS/161 中的系统调用
【发布时间】:2015-05-28 10:00:42
【问题描述】:

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

我的理解正确吗?

谢谢。

【问题讨论】:

    标签: os161


    【解决方案1】:

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

    #define SYS_reboot       119  
    

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

    这个数字在switch case语句中用于选择函数:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-16
      • 2016-01-16
      • 2011-03-26
      • 2014-12-25
      • 1970-01-01
      • 2014-12-20
      • 2012-07-28
      • 1970-01-01
      相关资源
      最近更新 更多