Linux内核线程的调度程序

时间:2014-10-23 20:39:53

标签: linux linux-kernel

Linux包含一些称为内核线程的特权进程。是否有任何调度程序运行/挂起它们?如果是,该调度程序是否与系统调度程序相同(我是指调度整个系统进程的调度程序)?

2 个答案:

答案 0 :(得分:1)

Linux调度程序正在调度任务。这些可以是

  • 内核线程(例如kswapd)或
  • 单线程进程(例如bash)或
  • 多线程进程的各个线程(例如某些浏览器或服务器)

多线程进程的许多线程是共享公共地址空间的任务(以及其他东西,例如文件描述符)。

AFAIK,调度程序不会将内核线程与其他任务分开。但调度程序确实考虑了调度策略(sched_setscheduler(2))和优先级(setpriority(2))(对于大多数内核线程,优先级通常非常高)。见sched(7)

答案 1 :(得分:1)

是的!让我在这里澄清系统调度程序部分。

每个任务都与一个task_struct相关联,其中包含每个任务的详细信息,例如它的pid,它的名称,最近启动的时间,优先级等等。http://lxr.free-electrons.com/source/include/linux/sched.h#L1224

通常根据任务的优先级,公平调度程序或实时调度程序启动并且这些共存。为了保持简单而不详细,这些是不同的调度算法,可以满足不同类型的任务。

现在内核线程也有一个关联的task_struct,而@Basile Starynkevitch指出了几个KPI,我们可以使用sched_setparam KPI修改sched params并更改任务所属的调度程序取决于他们将要做什么。