[解決済み] XV6でシステムコール関数に値を渡すにはどうしたらいいですか?
2022-02-14 14:38:41
質問内容
XV6でシンプルなプライオリティベースのスケジューラーを作ろうとしています。 これを行うには、プロセスが優先順位を設定できるようなシステムコールも作成しなければなりません。 ここや他の場所で議論されているように、システムコールを作成するために必要なことはすべて行いました。
問題は、関数を呼び出すときに変数を渡すことができない、というか、何も問題がないように実行されるのですが、正しい値が関数内に表示されないことです。
Extern宣言(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にはシステムコールで値を渡す仕組みが組み込まれていないのではと思い始めています。 私は何かを見逃しているのでしょうか? よろしくお願いします。
解決方法は?
XV6では、ユーザーレベル関数からカーネルレベル関数への引数の受け渡しができません。 XV6には、カーネル関数に引数を渡すための独自の組み込み関数があります。 例えば、整数を渡すには、argint()関数が呼ばれます。 set-priority関数に使った実装では、次のようになる。
argint(0, &pid);
...最初の引数であるプロセスIDを取得し
argint(1, &pty);
...で、2番目の引数として希望する優先度を取得します。ユーザープロセスからの関数呼び出しは次のようになります。
setpty(getpid(), priority);
関連
-
[解決済み】Valgrind が "Invalid write of size 8" で文句を言う。
-
[解決済み】「ポインタから異なるサイズの整数へのキャスト」エラーが発生するのはなぜですか?
-
[解決済み】Cコンパイルエラーです。Idは1終了ステータスを返した
-
[解決済み】Cygwin - Makefile-error: ターゲット `main.o' のレシピに失敗しました。
-
[解決済み】式は変更可能なL値でなければならない
-
[解決済み] Cプログラムで「配列の添え字が整数でない」。
-
[解決済み] JavaScriptの関数をパラメータとして渡す
-
[解決済み] C言語で関数をパラメータとして渡すにはどうすればよいですか?
-
[解決済み】JavaScriptの関数にデフォルトのパラメータ値を設定する
-
[解決済み】C言語の関数ポインタはどのように機能するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】stdinとSTDIN_FILENOの違いは何ですか?
-
[解決済み】valgrind - サイズ8のブロックが割り当てられた後、アドレス ---- が0バイトになる。
-
[解決済み】ポインタへの代入時に互換性のないポインタ型からの初期化警告が発生した
-
[解決済み】Cygwin - Makefile-error: ターゲット `main.o' のレシピに失敗しました。
-
[解決済み] [Solved] なぜこのようなエラーが発生するのでしょうか。「データ定義に型またはストレージクラスがない」?
-
[解決済み】sizeof float (3.0) vs (3.0f)
-
[解決済み】0LLや0x0ULの意味は何ですか?
-
[解決済み】未定義参照 makefile が間違っているのかも?
-
[解決済み】execvp: バッドアドレスエラー
-
[解決済み】Errno: 11, Resource Temporarily Unavailable(リソースが一時的に利用できない