6

過去数か月間、ldd3 を使用しています。最初の数章は何度も読みました。

これら 2 つのリンクは異なる方法を使用しています。1 つはワーク キューを使用し、もう 1 つはタスク キューを使用しています。下半分を実装します。
http://www.tldp.org/LDP/lkmpg/2.4/html/x1210.html http://www.linuxtopia.org/online_books/linux_kernel/linux_kernel_module_programming_2.6/x1256.html

私は、すべてが自由時間に何らかのタスクを実行しているように見えることに疑問を持ってtasklet, taskqueue, work-queueいます:--

a) これら 3 つの違いは正確には何ですか?

b) 割り込みハンドラーの下半分にはどれを使用する必要がありますか?

混乱している ...???

4

2 に答える 2

4

タスクレットとワークキューは通常、下半分で使用されますが、どこでも使用でき、制限はありません。

違いについて。

1)タスクレットは割り込みコンテキストで使用されます。すべてのタスクレットコードはアトミックである必要があるため、アトミックコンテキストに適用されるすべてのルールが適用されます。たとえば。彼らは眠ることができず(再スケジュールできないため)、長時間ロックを保持することもできません。

2)タスクレットとは異なり、ワークキューの実行はプロセスコンテキストで行われるため、スリープ状態になり、ロックを長時間保持できます。

要するに、タスクレットはスリープできないため高速実行に使用されますが、下半分の通常の実行の場合はワークキューが使用されます。どちらも後でカーネルによって実行されます。

于 2013-03-05T04:19:28.963 に答える
1

Softirq とタスクレットはどちらも、割り込みコンテキストで実行される割り込みコンテキスト タスクレットであり、workques はプロセス コンテキスト コードで実行されます。プロセス コンテキスト コードは実行中にスリープすることができますが、割り込みコンテキスト コードは実行中にスリープすることはできません (別の割り込みのみがスケジュールされたものをプリエンプトできます)。割り込みコンテキストの下半分。)

使用する下半分のメカニズムは、作成しているドライバーとその要件に完全に依存します。

例の場合。割り込みベースで HW との間でパケットを送信する nw ドライバーを作成している場合、このアクティビティを遅滞なく完了したいので、使用可能なオプションは softirq または tasklets のみです。

注: Robert Love による Linux Kernel Development の第 8 章をよく読んでください。LDD も読んだことがありますが、Robert Love による Linux Kernel Development は割り込み関連の理解に適しています。

于 2014-04-08T01:08:12.840 に答える