内核 - Linux - 内核在哪里与 cpu 通信?

Lar*_*rry 0 c linux scheduler linux-kernel

语境:

Linux 64。英特尔酷睿 2 双核。

题:

Linux 内核在哪里与 cpu 进行“通信”?我阅读了调度程序的源代码,但无法理解它们如何通信以及内核如何告诉 cpu 需要处理某些内容。

我知道有运行队列,但不是有什么东西可以让内核通过总线中断 CPU 吗?

更新

它扩展了我最初的问题了一下:我们如何判断CPU在那里的任务队列?

因为 cpu 必须轮询某些东西,我想我们会在某个时候告诉它。错过了内核代码中的那一点。

Eld*_*Bug 5

我会尽量写一个简单的解释它是如何工作的,如果有什么不清楚的,请告诉我。

CPU 只做一件事:执行指令。它将从预定义的地址开始并执行。就这样。有时您可以有一个中断,这会暂时使 CPU 跳转到另一条指令。

内核是一个程序(=指令序列),可以轻松执行其他程序。内核将做他的工作来设置它需要的东西。这通常包括构建要运行的进程列表。“进程”的定义完全取决于内核,因为如您所知,CPU 只做一件事。

现在,当内核运行时(由 CPU 执行),它可能会决定需要执行一个进程。为此,内核将简单地跳转到进程程序。它是如何完成的并不重要,但在大多数操作系统中,内核会将周期性中断(CPU 将周期性跳转)映射到一个函数,该函数决定执行哪个进程并跳转到它。它不是必需的,但它很方便,因为程序会定期被强制“中断”,以便其他程序也可以执行。

总而言之,CPU 什么都不“知道”。内核运行,并将跳转到其他进程代码以使它们运行。只有内核“知道”。