【问题标题】:Scheduler for Linux kernel threadsLinux 内核线程的调度程序
【发布时间】:2014-10-23 20:39:52
【问题描述】:

Linux 包含一些称为内核线程的特权进程。是否有运行/暂停它们的调度程序?如果是,这个调度器是否与系统调度器相同(我的意思是调度整个系统进程的调度器)?

【问题讨论】:

    标签: linux linux-kernel


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      通常取决于任务的优先级,公平调度器或实时调度器会启动,并且这些都存在。只是为了保持简单而不是详细介绍,这些是满足不同类型任务的不同调度程序算法。

      现在内核线程也有一个关联的 task_struct 并且正如@Basile Starynkevitch 指出的几个 KPI 一样,我们可以使用 sched_setparam KPI 来修改 sched 参数并更改任务所属的调度程序,具体取决于它们将要执行的操作.

      【讨论】:

        猜你喜欢
        • 2011-09-11
        • 2013-10-20
        • 1970-01-01
        • 2011-07-15
        • 2014-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多