以前のLinuxカーネルがプリエンプティブではないのはなぜですか?

以前のLinuxカーネルがプリエンプティブではないのはなぜですか?

最初のLinux開発者が非線形カーネルを実装することを選択したのはなぜですか?同期保存ですか?

私が知る限り、Linuxは1990年代初頭にPCにプロセッサが1つしかなかったように開発されました。そのようなPCでの非線形コアの利点は何ですか?しかし、マルチコアプロセッサが利点を減らすのはなぜですか?

ベストアンサー1

Linuxカーネルの文脈では、人々がプリエンプションについて話すとき、通常、カーネルが自分自身を中断する能力、つまり本質的にカーネルコードが実行されている間にタスクを切り替える能力を指します。これを可能にするのは非常に複雑で、おそらくコアがプリエンプションされるのに長い時間がかかる主な理由です。

最初は、ほとんどのカーネルコードが大規模なカーネルロックで保護されているため、中断することはできません。ロックはますます多くのカーネルコードから徐々に削除され、複数のカーネルを同時に並列に呼び出すことができるようになりました(SMPシステムが汎用化されるにつれて、これはより重要になりました)。しかし、これはまだコア自体をプリエンプション可能にするわけではありません。それまだより多くの開発が必要であり、最終的にPREEMPT_RTパッチセットは最終的にメインラインカーネルにマージされました(そしてとにかくBKLを先取りすることができました)。これで、必要なスループットとレイテンシの特性に基づいてコアをプリエンプティブに設定できます。関連カーネルの設定もっと学ぶ。

カーネル構成の説明に示すように、プリエンプションは並行性ではなくスループットとレイテンシに影響します。単一のCPUシステムでは、プリエンプションはより短い応答時間でイベントを処理できるため、まだ便利です。ただし、これによりスループットが低下します(カーネルがジョブを切り替えるのに時間を費やすため)。プリエンプションを使用すると、単一のCPUまたは複数のCPUシステムの特定のCPUを他のジョブにすばやく切り替えることができます。マルチCPUシステムの制限要因は、プリエンプションではなくロック(大小)です。すべてのタイムコードがロックを獲得すると、他のCPUが同じタスクの実行を開始できないことを意味します。

おすすめ記事