埋め込みターゲットの実行フローをエミュレートしようとするアプリケーションを開発する必要があります。このターゲットには2つのレベルの優先順位があります。優先度の低いレベルはラウンドロビンスケジューラで管理され、各スレッドに1msずつ順番に実行されます。正常に(つまり、最終的に協調的に)スレッド実行を中断する
私の目標は、ターゲットで使用できるthread_create、thread_start、およびすべてのシステムコールを提供するライブラリを作成し、標準のPCでその動作をネイティブに再現するためにPOSIX関数を使用することです。
したがって、高優先度のスレッドが実行されるとき、低優先度のスレッドは、その時点で何をしていても中断する必要があります。優先度の低いスレッドの実装が摂動されないようにするのは、それが責任です。
私は現在、スレッドを中断するのは安全ではないので、なぜ「中断(pid)」機能が見つからないのか説明しています。
私は基本的な問題への2つのソリューションを想像:
は、優先度の高いスレッドを開始するには(これ以上の優先度の高い活動があるときに、それらを再開)
-periodically呼び出すときに、優先度の低いスレッドを一時停止する方法を-find優先度の低いコードでは非常に小さな「suspend_if_necessary」関数が呼び出され、高い優先度を開始する必要があるときは、優先度の低いすべてのプロセスがその関数を呼び出して中断されるのを待ってから単一の高優先度スレッドとして実行し、
私は2番目の解決策を気に入っていますが、まだ1つの問題があります。すべてのコードを変更せずにどこでも関数を呼び出す方法は? 簡単な方法があるのでしょうか?デバッグコードのようなものです:実行されるすべての行でフックコールを追加してフラグをチェックし、そのフラグが変化したときに特定のコードを実行しますか?
私は本当にターゲットの実行フローの動作と代表である必要があるため、その問題に対する簡単な解決策があれば、私はとても幸せになりたい...事前に
おかげで、
Goulou。
ちなみに、high prioスレッドは、low prioスレッド、外部割り込み、スリープ後に起動される3つのソースのみで開始できます。これらのソースはすべて私のライブラリ内にあるので、私はそれを "認識"していて、すぐに他のスレッドにメッセージを送ることができます。 – Goulou