OS / 161中的系统调用

时间:2015-03-24 21:59:12

标签: os161

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

我的理解是否正确?

感谢。

1 个答案:

答案 0 :(得分:1)

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

#define SYS_reboot       119  

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

此数字用于switch case语句中以选择函数:

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