c - 内核 - Linux - 内核在哪里与 cpu 对话?

标签 c linux linux-kernel scheduler

上下文:

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

问题:

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

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

更新

它扩展了我最初的问题:我们如何告诉 CPU 任务队列在哪里?

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

最佳答案

我会尝试写一个简单的解释来说明它是如何工作的,如果有任何不清楚的地方请告诉我。

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

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

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

总而言之,CPU 不“知道”任何事情。内核运行时,会跳转到其他进程代码,使它们运行。只有内核“知道”。

关于c - 内核 - Linux - 内核在哪里与 cpu 对话?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28857574/

相关文章:

linux - 写时复制与非法访问

c++ - Gnuplot 保存许 multimap 像

C 和字符串处理

在 Swift 中比较指向 C 函数的指针

android - 在 Linux 中运行/编译 Android 应用程序

linux-kernel - 无法访问打开的/arch/x86/syscalls/syscall_32.tbl

c - 读取一个 bmp 文件并在 C 中反转它

c - shmat()等在Linux内核中是如何实现的。还有其他共享内存的方法吗?

linux - 如何在 Centos 7 上设置网站目录(自定义主机)

c - 如何在 Linux 内核中为 char* 类型的字符串分配内存?