2

マルチスレッド アプリ用の小さなデバッグ プログラムを作成しています。私の考えは、たとえば100ナノ秒の間デバッグされているターゲットを実行し、一時停止してそのメモリを調べることです。ただし、これ(単なる疑似コード)

nanosleep(100);             //sleep debuger for 100 nanosec and let a program run
kill(target_app_pid, SIGSTOP); //stop target app

nanosleep の直後にプロセス切り替えが発生し、ターゲットが必要に応じてより長く実行されるため、機能しません。プロセスに「定義された」タイムスライスを与えてから中断する方法はありますか? 私が想像できる唯一の解決策は、システム コールを追加し、スケジューラを修正して必要なものを実現することですが、これには多大な労力と多くのバグが想定されます。おそらく、デバッガープロセスの「リアルタイム」優先度を設定すると役立つでしょうか? それはきれいな解決策でしょうか?

また、ターゲット アプリのソース コードを実装できると仮定します。ある種のタイマーを設定し、(非常に短く正確な) 一定期間後にプロセス全体をスリープ状態にすることは可能ですか?

4

2 に答える 2

1

nanosleep100 ナノ秒できると本当に思いますか? HZあなたのカーネルの価値は何ですか?このスリープの順序に最も近いudelay()のは ですが、それはユーザーランドではなく、プリエンプションを無効にできるカーネルにあります。Linux カーネル ソースをチェックアウトしlinux/include/delay.hてインします。init/calibrate.c

于 2009-11-04T19:16:50.667 に答える
1

Linux はせいぜい「ソフト リアルタイム」OS (特にユーザー空間で動作する) であるため、目的の精度を実現するのは困難です。

組み込みプロセッサで作業している場合、nanosleepとのmicrosleep呼び出しはスピン ループとして実装されることがよくあります。起動時に、プロセッサはこのスピン ループを「調整」するように特徴付けられます。ただし、この種の精度を得るには、プロセッサのアーキテクチャと実行されている内容 (命令レベル) を非常に詳細に理解する必要があります。

Linux カーネルの新しいバージョンには、いくつかの高速タイマーの実装がありますが、まだマイクロ秒の解像度を見ています。

デスクトップ システムで実行している場合、このレベルの精度が必要な理由がわかりません。

于 2009-11-04T19:18:42.533 に答える