就職面接の準備中に、オンラインでこの質問を見ました。
非プリエンプティブ カーネルの場合、パフォーマンスの面でどのタイプのプロセスがより影響を受けるでしょうか。またその理由は何ですか。
I\Oバウンド
CPUバウンド
私はそれを知っています:
CPU バウンド プロセスは長いクォンタムを取得しますが、優先度は低くなります。一方、I/O バウンド プロセスは短いクォンタムを取得しますが、優先度は高くなります。
最初は、ディスクからの読み取りが完了するのを待たなければならないため (準備ができたときに OS に起動するように依頼するだけではない)、I\O バウンドの影響がより大きくなると考えていました。しかし、非プリエンプティブ カーネルでもプロセスが自らジョブを終了して別のプロセスに作業を任せることができるため、これは間違っていると思います。
ここで何が欠けているのかを深く理解するために、詳細な回答を探しています。
答え1
「CPU バウンドのプロセスは長いクォンタムを取得しますが、優先度は低くなります。一方、I/O バウンドのプロセスは短いクォンタムを取得しますが、優先度は高くなります。」というのは正しくありません。
これが事実であれば理想的ですが、各プロセスがほぼ同じタイムスライスを取得する場合がよくあります。I/O バウンド プロセスは CPU をかなり早く放棄します。
異なる優先順位を設定する動的にそうでなければ、実行するのは非常に困難であり、カーネルはプリエンプトできないため、この優先順位付けがどのように実装されるかは明確ではありません。