XV6 で単純な優先度ベースのスケジューラを作成しようとしています。これを行うには、プロセスが優先度を設定できるようにするシステム コールも作成する必要があります。ここや他の場所で説明されているように、システム コールを作成するために必要なすべてのことを行いました。
xv6 でシステム コール / ユーティリティを追加するにはどうすればよいですか
問題は、関数を呼び出すときに変数を渡すことができないことです。むしろ、何も問題がないように実行されますが、正しい値が関数内に表示されません。
外部宣言 (syscall.c):
...
extern int sys_setpty(void);
static int (*syscalls[])(void) = {
...
[SYS_setpty] sys_setpty,
};
システムコール ベクトル (syscall.h):
#define SYS_setpty 22
実装 (sysproc.c):
void
sys_setpty(int pid, int pty)
{
cprintf("function pid: %d \n", pid);
cprintf("function pty: %d \n", pty);
}
(defs.h & user.h):
void setpty(int, int);
マクロ (usys.S):
SYSCALL(setpty)
関数呼び出し:
setpty(3, 50);
出力:
function pid: 16843009
function pty: 16843009
値は常にまったく同じ 16843009 です。値を pid と pty に割り当てて、cprintf が正しく機能しているかどうかを確認しました。考えられるすべての可能な組み合わせを試すのに約 6 時間を費やしましたが、XV6 にはシステム コールを介して値を渡す組み込みのメカニズムがないと考え始めています。何か不足していますか?前もって感謝します。