~によるとhttps://rt.wiki.kernel.org/index.php/RT_PREEMPT_HOWTO、RT-PreemptパッチはLinuxを完全にプリエンプティブなカーネルに変換します。魔法は次のように実行されます。
- rtmutexeを使用してカーネルロックの基本要素(スピンロックを使用)を再実装してプリエンプティブにします。
- spinlock_t と rwlock_t で保護される重要なセクションは、プリエンプション可能です。 raw_spinlock_t(spinlock_tと同じAPI)を使用して(カーネル内で)非線点部分を作成することは依然として可能です。
- カーネルミューテックス、スピンロック、およびrw_semaphoresの優先順位継承を実装します。
- 割り込みハンドラをプリエンプティブカーネルスレッドに変換する:RT-Preemptパッチは、通常のユーザースペースプロセスと同様に、作業構造で表されるカーネルスレッドのコンテキストでソフト割り込みハンドラを処理します。ただし、カーネルコンテキストでIRQを登録することも可能です。
- 以前のLinuxタイマーAPIを高解像度カーネルタイマー用の別々のインフラストラクチャとタイムアウト用のインフラストラクチャに変換して、高解像度のユーザースペースPOSIXタイマーを作成します。
マルチタスクの代わりにリアルタイム処理に欠点がありますか?
ベストアンサー1
-rt(RT-Preempt)カーネルパッチは、Linuxカーネルが汎用カーネル実装に焦点を当てており、Linus Torvaldsが実装を開始したときにマルチタスクを選択したため、カーネルのメインラインにはありません。
奇妙なことは、カーネルがなぜこのような理由です。答えはまさにそれです。なぜなら、Linusがそうすることを選んだからです。そして彼はなぜこの方法を選んだのですか?彼はそれがより良い方法であるか、または達成可能な実装であると信じているからです。
他の人のデザインコンセプトが現実よりも優れていると思う人もいます。しかし、これは不可能です。人ごとに自分の意見があり、時には複雑さと可能性のためにベンチマークができない場合もあります。
Linus TorvaldsとAndrew Tanenbaumの間には、モノリシックカーネルとマイクロカーネルに関する古典的な議論があります。それぞれがより良いモデルであるという主張がたくさんあります。
同様に、マルチタスクとリアルタイムも同様です。どちらが良いですか?それぞれには独自の長所と短所があります。
通常、メインラインカーネルはリアルタイムでパッチされません。シンプル!これはまさに開発者の選択と信念によるものです!