1

私は OS クラスを受講しており、XV6 を拡張exit()して終了ステータスをサポートする必要があるため、 exit2(int).

killされたプロセスの終了ステータスを保存する目的で、2つの候補を考えました。

  1. 最初のオプションはstruct proc、終了ステータスの変数を追加することでした。このソリューションに関する私の問題は、ほとんどの原因で OS の基本的な構造を変更する必要があることです。

  2. 2 番目のアイデアは、強制終了されたプロセスのトラップ フレーム レジスタに終了ステータスを保存することでしたeax

より良いアイデアは何ですか?(またはそれ以下)

4

2 に答える 2

2

オプション 1 が最も簡単で安全です。

オプション 2 は、奇妙に聞こえるかもしれませんが、xv6 で動作します。プロセスが s になったとき、メモリは解放されませんexit()。親が子プロセスを呼び出しwait()た場合にのみ、子カーネル スタックを含むメモリが解放されます。

child が行った後は誰もカーネル スタックを使用しないためZOMBIE、終了ステータスはカーネル スタックのどこにでも保存できます。

そのため、exist ステータスを に保存し、proc->kstack-4 からの待機ルーチンで取得できますp->kstack-4kfree(p->kstack)!の前に必ずフェッチしてください。

于 2015-01-03T19:12:38.507 に答える
0

明確な答えはノーです。目的はeax、プロシージャからの戻り値として使用することです。一部のカーネル実装 (xv6 の rev 6 で動作することはわかっています) では、このトリックが機能する可能性がありますが、カーネルが実際にいつプロセスを強制eax終了するかわからないため、後で頼ることはできません。kill()

于 2014-12-09T07:47:06.083 に答える