Linux syscall sched_setaffinity() の仕組みを理解しようとしています。これは私の質問hereの続きです。
私はこのガイドを持っています。これは、syscall の使用方法を説明し、かなりきちんとした (動作する!) 例を示しています。
そこで、Linux 2.6.27.19カーネル ソースをダウンロードしました。
そのシステムコールを含む行に対して「grep」を実行したところ、91 件の結果が得られました。有望ではありません。
最終的に、カーネルが特定のコア(またはプロセッサ)の命令ポインターを設定する方法を理解しようとしています。
シングルコア、シングルスレッドのプログラムがどのように機能するかはよく知っています。「jmp foo」命令を発行すると、基本的に IP が「foo」ラベルのメモリ アドレスに設定されます。しかし、複数のコアがある場合、「メモリアドレス foo で次の命令をフェッチし、コア番号 2の命令ポインタを設定して、そこで実行を開始する」と言わなければなりません。
アセンブリ コードのどこで、どのコアがその操作を実行するかを指定していますか?
カーネル コードに戻ります。ここで何が重要なのでしょうか? ファイル 'kernel/sched.c' には sched_setaffinity() と呼ばれる関数がありますが、タイプ "long" を返します。これはマニュアル ページと矛盾しています。では、ここで重要なことは何ですか?これらのモジュールのうち、発行された組み立て手順を示しているのはどれですか? 「task_struct」を読み取り、「cpus_allowed」メンバーを見て、それを命令に変換しているモジュールはどれですか? (glibc のソースも調べてみましたが、このタスクを実行するためにカーネル コードを呼び出すだけだと思います。)