2

在 Windows 中,我可以使用 KeSetSystemAffinityThread 设置驱动程序代码的处理器亲和性,并使用 KeGetCurrentProcessorNumber 检查我的代码在哪个处理器上运行。

我正在尝试在 Linux 内核模块中做类似的事情,但我能看到的唯一关联调用是针对用户态进程的。有没有办法做到这一点,以便我可以在特定处理器上运行汇编代码?(即新加坡元)

编辑:

我想我已经弄清楚如何获得当前的处理器了。smp_processor_id() 似乎应该可以工作。

4

2 回答 2

4

我认为您可能必须修改内核,但更改并不太粗略。只需导出sched_setaffinitysched.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 回答