在中断中获取 current->pid

luc*_*uca 3 linux kernel scheduling linux-kernel interrupt-handling

我正在 linux 调度程序上写一些东西,我需要知道在我的中断进来之前哪个进程正在运行..当前的结构是否可用?如果我在中断处理程序中执行 current->pid ,我是否可以获得我中断的进程的 pid?

ugo*_*ren 5

您可以,current->pid存在并且是被中断的进程(可能是空闲线程或任何线程)。

如果您在 Linux 调度程序内部进行编写,则应该非常小心。current由调度程序在选择要运行的新进程时更改,因此它的值取决于您何时阅读它。

  • @mooray,`current` 有效。`current` 首先获取 `thread_info`(在 x86 中,通过屏蔽 %esp),在那里它找到一个指向 `task_struct` 的指针。当切换到中断堆栈时,`do_IRQ` 根据进程的内核堆栈设置这个指针。 (2认同)