システム コールがどのように実行されるかに関して、OS/161 のコードを調べています。私が見る限り、システム コール (例: reboot()
) は、実際には OS/161 カーネルによって への呼び出しに変換されますsys_reboot()
。同様に、fork()
への呼び出しは への呼び出しに変換されsys_fork()
ます。
私の理解は正しいですか?
ありがとう。
システム コールがどのように実行されるかに関して、OS/161 のコードを調べています。私が見る限り、システム コール (例: reboot()
) は、実際には OS/161 カーネルによって への呼び出しに変換されますsys_reboot()
。同様に、fork()
への呼び出しは への呼び出しに変換されsys_fork()
ます。
私の理解は正しいですか?
ありがとう。
各システム コールには固有の識別番号があり、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;