スレッド生成カーネル操作の優先順位

スレッド生成カーネル操作の優先順位

Linuxカーネルレベルの操作(ファイルシステムのIO操作やイーサネットインターフェースを介した通信)は、それをトリガーしたスレッドの優先順位を継承しますか、それともスレッドYieldが呼び出されたときに別の優先順位で実行されますか?

たとえば、SCHED_FIFOポリシーと優先順位99(最も高い)を使用して緊密なループに座って、シリアルポートからシングルバイトを送信するスレッドを作成するとします。このスレッドをSERIAL_THREADと呼びます。

SCHED_FIFOポリシーと優先順位98を使用して緊密なループに座って、同じTCP IPパケットを送信する2番目のスレッドを作成するとします。このスレッドをIP_THREADと呼びます。

また、システムに1つのコアがあり、スレッド調整が無効になっているため、スレッドがシステムCPUリソースを100%消費し、他のことが発生しないことを前提としています。

一般に、SERIAL_THREAD がシステムで最高の優先順位を持ち、明示的に低い優先順位スレッドに譲渡しないことを考慮すると、IP_THREAD は TCP-IP パケットを送信できないと予想されます。ただし、スレッドはカーネルを介してIOデバイスと対話するため、IP_THREADを実行する機会があるかどうかはわかりません。

ベストアンサー1

優先順位の高いリアルタイムスレッドは、緊密な利得なしループで他のすべてのアクティビティを完全にブロックできます(I / Oが何らかの方法でブロックしない限り)。

SCHED_FIFO時間分割なしで簡単な先入れ先出しスケジューリングアルゴリズムを実装します。実行可能なSCHED_FIFOジョブは常にすべてのジョブの前にスケジュールされますSCHED_NORMAL。ジョブが実行可能になると、SCHED_FIFOプロセッサをブロックまたは明示的に生成するまで実行され続け、時間分割がなく無期限に実行できます。

Robert Love。 Linuxカーネル開発(第3版)。血。 64.

次に考えられる質問は次のとおりです。

同じ優先順位を持つ2つ以上のジョブがSCHED_FIFOループで実行されますが、再び明示的に選択された場合にのみプロセッサを作成します。

おすすめ記事