私の知る限り、Linux で下位半分を実装するメカニズムは多数あります。
- ソフトリク
- タスクケット
- ワークキュー
- スレッド化された irq ( request_threaded_irq() )
これらはすべて、スケジューリング可能性に関する特性を持っています。私が文献から得られないのは、彼らのプリエンプションの可能性です。さまざまな下位半分の実装をプリエンプトできるのは、どのような種類のタスクですか?
具体的には、スレッド化された irq とワークキューに興味があります。スレッド化された irq またはワークキューが一度スケジュールされると、完了前にプリエンプトされない、つまり 1 回で実行されるとどの程度確信できるでしょうか? それらを先取りできるタスクの種類は何ですか?
たとえば、Robert Love による Linux Kernel Development は、ソフト IRQ をプリエンプトできるのはトップ ハーフだけであると述べているため、ほとんどの場合、ソフト IRQ は 1 ショットで完了すると言えます (または、プリエンプトされたとしても、それは非常に短い時間だけです)。
私の目標は、同じスレッド化された irq またはワークキューでの 2 つの操作間の時間を定性的に評価することです。特に、i2c データの読み取りとシステムクロックの読み取りの間の時間。
ありがとう。