優先度の異なる 2 つのタスクが同じセマフォで待機しています。セマフォが解放されると、優先度の高いタスクがスケジュールされますか? またはそのランダム?、SCHED_RRスケジューラ ポリシーを使用しています。
2 に答える
使用している場合SCHED_RR
、スケジューラは最も優先度の高いタスクを実行し、そのようなタスクを最初に実行します。のタスクがSCHED_RR
あり、それが状態TASK_RUNNING
の場合、実行されます。
ユニプロセッサ システムでは、 のタスクが存在する場合、このSCHED_RR
タスクのみが実行されます。ただし、マルチコア システムでは、優先度の低いタスクが別のプロセッサでスケジュールされる可能性があります。TASK_RUNNING
私の意見では、優先度が高くSCHED_RR
スケジュールされたタスクが最初にスケジュールされますが、このプロセッサが割り込みの処理などのより重要な作業を行う可能性があるため、このタスクが最初にセマフォを取得するという保証はありません。
繰り返しますが、これは私の唯一の意見であり、私は Linux カーネルにかなり慣れていません。より経験豊富な人に承認してもらうことは素晴らしいことです。
編集:
スケジューラはセマフォにとって重要ではありません。優先度に関係なく、1 つのタスクを起動するだけです。
したがって、タスクが最初にロックを取得しようとすると、最初にロックを取得できます (困難で安全ではありません)。または、セマフォ キューを自分で管理することもできます。
一般的に言って、セマフォが解放されたときに、どの待機タスクが最初に起床されるかというルールは知らないので、スケジューラーの選択次第です。タスクの「優先順位」はおそらく、セマフォによる同期ではなく、通常のスケジューリング メカニズムの場合にのみスケジューラに関連します。