Linux kernel 内核不同子系统如何共享CPU时间

Linux kernel 内核不同子系统如何共享CPU时间,linux-kernel,resources,operating-system,kernel,scheduled-tasks,Linux Kernel,Resources,Operating System,Kernel,Scheduled Tasks,用户空间中的进程由内核调度器调度以获得处理器时间,但是不同的内核任务如何获得CPU时间呢?我的意思是,当用户空间中没有进程在重新查询CPU时间时(因此通过执行NOP指令CPU是空闲的),但一些内核子系统需要定期执行某些任务,计时器和其他硬件和软件中断是在内核空间中获取CPU时间的常用方法吗?这几乎是相同的调度器。我所能想到的唯一区别是内核代码对执行流有更多的控制。例如,可以直接调用调度程序 在内核中,您还有3个执行上下文—硬件中断、软件中断/bh和进程。在硬(可能是软)中断上下文中,您无法睡眠,

用户空间中的进程由内核调度器调度以获得处理器时间,但是不同的内核任务如何获得CPU时间呢?我的意思是,当用户空间中没有进程在重新查询CPU时间时(因此通过执行NOP指令CPU是空闲的),但一些内核子系统需要定期执行某些任务,计时器和其他硬件和软件中断是在内核空间中获取CPU时间的常用方法吗?

这几乎是相同的调度器。我所能想到的唯一区别是内核代码对执行流有更多的控制。例如,可以直接调用调度程序


在内核中,您还有3个执行上下文—硬件中断、软件中断/bh和进程。在硬(可能是软)中断上下文中,您无法睡眠,因此在该上下文中执行代码时不会进行调度。

我不理解同一个调度程序如何调度内核任务。是否有运行内核空间指令的进程在等待调度的队列中等待?这个内核进程是如何创建的?调度器与
struct tast\u struct
的实体一起工作。每次创建新进程(通过
fork
或最终
clone
),创建线程(
pthread\u create
)或创建内核线程(
kthread\u create
),都会创建相应的
任务结构。调度程序在此结构上运行,仅此而已。似乎您对内核和用户空间执行感到困惑,因此我推荐您使用Robert Love的“Linux内核开发”(关于“进程管理”和“进程调度”的章节)。