「非プリエンプティブ」、「プリエンプティブ」、「オプションのプリエンプティブ」コアの違いは何ですか?
誰かがこれについて明らかにできることを願っています。
ベストアンサー1
プリエンプティブカーネルでは、カーネルモードで実行されているプロセスをカーネル機能の実行中に他のプロセスに置き換えることができます。
これはカーネルモードで実行されるプロセスにのみ適用され、ユーザーモードでプロセスを実行するCPUは「アイドル」と見なされます。ユーザーモードプロセスがカーネルからサービスを要求するには、カーネルが処理できる例外を発生させる必要があります。
たとえば、
プロセスはA
例外ハンドラを実行し、B
IRQ要求によってプロセスが起動し、カーネルはそのプロセスを(強制プロセス切り替え)A
に置き換えます。B
プロセスはA
まだ完了していません。その後、スケジューラはプロセスにA
CPU 時間があるかどうかを判断します。
非プリエンプティブコアでは、プロセスはA
完了するまで、または他のプロセスがそれを中断することを自発的に決定するまで、すべてのプロセッサ時間を使用します(スケジュールされたプロセス切り替え)。
今日のLinuxベースのオペレーティングシステムには、通常、完全にプリエンプティブなカーネルは含まれておらず、中断することなく実行する必要があるいくつかの重要な機能がまだあります。だから私はこれを「オプションのカーネルプリエンプション」と呼ぶことができると思います。
それに加えて、Linuxカーネルを(ほぼ)完全にプリエンプティブにする方法があります。