3

RTパッチを適用したバニラLinuxカーネルを構築してセットアップしました。すべてがうまくいき、新しいカーネルを正しく起動できるようになりました。

不思議に思うのは、これです。Cで作成したシミュレータープログラムがあり、新しいカーネルで許可されているように、ハードリアルタイムモードで実行したいと考えています。おそらく、シミュレーター全体をリアルタイムの優先順位で実行する必要はありませんが、内部のタスクの一部は実行します。

どうすればこれを達成できますか?プログラムを実行するだけではうまくいかないと思います。

4

1 に答える 1

8

一部のスレッドをリアルタイムコンテキストで実行する方法と、他のスレッドを従来のタイムシェアリングスレッドとして実行する方法を尋ねる場合、必要なのは、を使用してスケジューラーを適切sched_setschedulerに設定することだけです。

タイムシェアリングスレッドはなりたいですSCHED_OTHER; リアルタイムシミュレータスレッドは、SCHED_FIFOまたはになりたいですSCHED_RR

Linuxでは、リアルタイムの優先順位で実行するために、ユーザーはこれを可能にするリソース制限(man 2 rlimit)を持っている必要があります。特に、rtpriorlimitは必要な最高の優先度に設定する必要があります。または、アプリケーションをrootとして実行することもできます。PAMを備えたLinuxシステムでは、これは通常、適切な行をに追加することによって実現されます。 /etc/security/limits.conf

    @realtime-rtprio 99

これにより、リアルタイムグループにリアルタイム優先度99までのrtprio制限が付与されます。次に、にリアルタイムグループを追加し/etc/groups、ユーザーがグループに含まれていることを確認します。

(これは初めてのように思われるので、シミュレーターが手に負えなくなってシステムをレンダリングしないようにするために、「デッドマンスイッチ」の優先度の高いリアルタイムスレッドを使用することもできます。使用できません...高いCPU負荷をシミュレートしている場合、実際に高いCPU負荷が発生し、再起動しないと停止できない場合があります。)

于 2012-05-08T16:35:42.450 に答える