Linuxカーネルを変更して、現在のPIDが変更されるたびに、つまり新しいプロセスが切り替えられるたびに、いくつかの診断コードが実行されるようにしたいと考えています(興味がある場合は、以下の詳細な説明)。いろいろ調べてみたところ、スケジューラーが新しいプロセスを選択するたびに関数context_switch()
が呼び出されるようです。これは理にかなっています (これはsched.c/schedule()
.
問題は、Linux スケジューラーが今の私にとって基本的にブラック マジックなので、その仮定が正しいかどうか知りたいということです。CPU で時間を取得するために新しいプロセスが選択されるたびに、context_switch() 関数が呼び出されることが保証されていますか? または、他の状況でスケジューリングを処理できるカーネル ソース内の他の場所はありますか? (または、私はこれらすべてを完全に誤解していますか?)
いくつかのコンテキストを提供するために、私は MARSS x86 シミュレーターを使用して、特定のプログラムの計測と測定を実行しようとしています。問題は、データの誤解を避けるために、特定のコード イベントがどの実行プロセスに対応するかをインストルメンテーションが知る必要があることです。MARSS に組み込みのメッセージ パッシング システムを使用して、すべてのコンテキスト スイッチで新しいプロセスの PID を渡し、現在実行中の PID を常に認識できるようにするという考え方です。誰かがそれを達成するためのより簡単な方法を考えることができれば、それも大歓迎です.