Unixプロセス図の2つの赤い矢印の違いを教えてください。プリエンプションされたプロセスが、スケジュールを変更せずにユーザー実行に直接移行するのはなぜですか?よくわかりません。PreemptedとReadyinMemeryが破線で接続されているのはなぜですか?前もって感謝します。
2 に答える
プリエンプトされたプロセスはメモリ内で実行する準備ができているため、この図でプリエンプトされた状態とメモリ内で実行する準備ができている状態の間に破線が表示されています。CPU を集中的に使用するプロセスは通常、ハードウェア レベルでタイマー ティックが起動し、カーネルがプロセスをプリエンプトするまで、タイム スライス全体にわたって作業を行い、CPU を使用します。カーネルは、プロセスをプリエンプトする際に、コンテキストの切り替えに必要なすべてのデータ構造を保存するため、プロセスの実行準備が整うわけではありません。
ただし、プリエンプトされたプロセスは、必ずしもユーザー モードで実行する準備ができているとは限りません。代わりに、ネットワーク パケットが到着したとき、ディスクの読み取りが完了したとき、タイマー ティックが起動したとき、またはその他のイベントによってプリエンプションが発生したときに、カーネルがなんらかの作業を行っているため、カーネルはそれ自体をプリエンプトする可能性があります。プロセスがプリエンプトされたときに最初にユーザー モードで実行されていた場合 (最初の段落で説明した状況)、スケジューラーが再度実行する必要があると判断すると、ユーザー モードに戻ります。一番左の赤矢印です。一方、カーネル モードでの実行中にプロセスがプリエンプトされた場合、スケジューラが再実行する必要があると判断するたびに、プロセスはカーネル モードに戻ります。それがもう一方の赤い矢印です。
私見図は偽物です。ゾンビ プロセスに終止符が打たれるはずですが、まだありません。そうしないと、ゾンビのプロセスが蓄積され、蓄積されません。