4

Linuxカーネルのドライバーのコンテキストで実行しています-このドライバーは値をレジスターに書き込みます-操作には時間がかかります(〜5ミリ秒)。他のスレッドに CPU を渡すためにその間はスリープしたいのですが、ウェイクアップ後すぐに CPU を元に戻すことが非常に重要です (超えてはならない短いタイムアウトがあります)。同じ質問がミューテックスの取得にも当てはまります-ミューテックスでブロックしている(そして再スケジュールをトリガーしている)としましょう-そのミューテックスが解放されたときにすぐにCPUを元に戻すにはどうすればよいですか?

これを行う方法はありますか?それは何を含みますか?(プロセスに優先度を設定する? 特別なスケジューリング モード? カーネル構成を変更する?)

編集:ミューテックスに関する質問はもう少し複雑なので、言い換えます:重要なスレッドで使用されるミューテックスがあります(そのタイムアウト制限のために重要です)。このミューテックスを使用したいと思います。これをブロックして再スケジュールすると、ロックがすぐに解放され (これらのスレッドの優先度が高いため)、その後すぐに、ブロックされたスレッドができるようになります。実行します(他の無関係なプログラムではありません)。このようにして、タイムアウト違反の危険を冒さずに CPU 時間を節約できます。現在、再スケジュールを避けるためにビジー待機を使用しています (私のカーネルはプリエンプティブではありません) が、この解決策は好きではありません。

どんな助けでも大歓迎です!

ありがとう

4

1 に答える 1

1

あなたは、執筆中に遅延を観察していると言いました。この状況では関数を使用できると思います schedule_timeout。デバイス ドライバーは、システムをロックアップしないように、レジスタへの書き込み中にこの手法を使用します。最近、レジスタへの書き込みが遅延を引き起こしているという問題に遭遇しました。schedule_timeout私の場合もそうする予定です。

優先順位の設定、スケジューリング モードはここでは役に立ちません。

于 2013-08-15T00:23:01.083 に答える