3

私の知る限り、Linux で下位半分を実装するメカニズムは多数あります。

  • ソフトリク
  • タスクケット
  • ワークキュー
  • スレッド化された irq ( request_threaded_irq() )

これらはすべて、スケジューリング可能性に関する特性を持っています。私が文献から得られないのは、彼らのプリエンプションの可能性です。さまざまな下位半分の実装をプリエンプトできるのは、どのような種類のタスクですか?

具体的には、スレッド化された irq とワークキューに興味があります。スレッド化された irq またはワークキューが一度スケジュールされると、完了前にプリエンプトされない、つまり 1 回で実行されるとどの程度確信できるでしょうか? それらを先取りできるタスクの種類は何ですか?

たとえば、Robert Love による Linux Kernel Development は、ソフト IRQ をプリエンプトできるのはトップ ハーフだけであると述べているため、ほとんどの場合、ソフト IRQ は 1 ショットで完了すると言えます (または、プリエンプトされたとしても、それは非常に短い時間だけです)。

私の目標は、同じスレッド化された irq またはワークキューでの 2 つの操作間の時間を定性的に評価することです。特に、i2c データの読み取りとシステムクロックの読み取りの間の時間。

ありがとう。

4

1 に答える 1

1

ワークキューとスレッド化された IRQ ハンドラーはプロセス コンテキストで実行され、プリエンプトされる可能性があります。それらがいつプリエンプトされるかは、実際にはカーネル構成 (CONFIG_PREEMPTまたはCONFIG_PREEMPT_VOLUNTARY) と、処理スレッドに設定したリアルタイム優先度によって異なります。

ワークキューまたは下半分が中断されないと仮定することはできません。これは、上位半分とリソースを共有する場合、適切なロックを使用する必要があることを意味します。

于 2015-10-18T11:53:59.633 に答える