2

Windowsでは、KeSetSystemAffinityThreadを使用してドライバーコードのプロセッサー親和性を設定し、KeGetCurrentProcessorNumberを使用してコードが実行されているプロセッサーを確認できます。

Linuxカーネルモジュールで同様のことをしようとしていますが、表示されるアフィニティ呼び出しはユーザーランドプロセスのみです。特定のプロセッサでアセンブリコードを実行できるように、これを行う方法はありますか?(つまりsgdt)

編集:

現在のプロセッサを入手する方法を理解したと思います。smp_processor_id()は機能するはずです。

4

2 に答える 2

4

おそらくカーネルを変更する必要があると思いますが、変更はそれほど大まかなものではありません。モジュールにエクスポートsched_setaffinityするだけです。sched.c

  long sched_setaffinity(pid_t pid, const struct cpumask *in_mask)
  {
    ...
  }
+ EXPORT_SYMBOL_GPL(sched_setaffinity); // Exported, now callable from your code.
于 2010-06-13T18:57:30.853 に答える
1

smp_processor_id()実行している論理プロセッサを教えてくれるはずです。

一部のアーキテクチャはsmp_call_function_single、プロセッサ間割り込みを使用して別のプロセッサで関数を実行するカーネル関数もサポートしています。

于 2010-06-15T16:53:19.830 に答える