1

我需要确定用户进程是否曾经以某种方式被抢占,我知道我们在 preempt.h 和 sched.c 中有钩子,它们允许我们定义 preempt_notifiers,每当进程被重新调度或抢占时,它们又可以调用 sched_in 和 sched_out 函数。

但是我仍然不知道如何将通知程序附加到用户空间中的特定进程或 pid,然后以某种方式记录该特定进程是否曾被抢占。我假设我必须编写一个模块才能做到这一点,但是我将如何将 pid 附加到特定的通知程序?

4

2 回答 2

1

通知程序本质上是每个进程的。当您注册它时,您正在为当前进程注册它。请参阅 中的代码preempt_notifier_register(),它将通知程序附加到current->preempt_notifiers.

于 2012-08-14T07:09:40.550 回答
0

伪文件/proc/<pid>/status包含一行nonvoluntary_ctxt_switches:似乎是您所追求的信息。

于 2012-08-15T07:25:22.367 回答