1

システム コールがどのように実行されるかに関して、OS/161 のコードを調べています。私が見る限り、システム コール (例: reboot()) は、実際には OS/161 カーネルによって への呼び出しに変換されますsys_reboot()。同様に、fork()への呼び出しは への呼び出しに変換されsys_fork()ます。

私の理解は正しいですか?

ありがとう。

4

1 に答える 1

1

各システム コールには固有の識別番号があり、OS161 ではこれらのシステム コール番号は kern/include/kern/syscall.h で定義されています。

#define SYS_reboot       119  

ライブラリ プロシージャ reboot() は、syscall 番号をレジスタ (v0) に配置し、OS にトラップを発行します。syscall ハンドラは、アセンブリ言語の例外ハンドラから、他の情報とともにシステム コールを含む trapframe と呼ばれるデータ構造を受け取ります。番号。

この番号は、switch case ステートメントで関数を選択するために使用されます。

void syscall(struct trapframe *tf)
    ...
    callno = tf->tf_v0;
    ...
    switch (callno) {
        case SYS_reboot:
        err = sys_reboot(tf->tf_a0);
        break;
于 2015-03-25T14:12:15.187 に答える