【问题标题】:About Linux PID0 Idle task per cpu core关于每个 cpu 内核的 Linux PID0 空闲任务
【发布时间】:2020-03-15 05:40:04
【问题描述】:

我正在研究 Linux 中的 CPU-IDLE。我有一个问题是谁产生每个 CPU 核心的空闲任务,即如果有 4 个 arm CPU 核心,谁产生每个 CPU 空闲任务?用于创建空闲任务的相同代码位于何处?我知道 init/main.c 中的 start_kernel 是由 init 进程运行的。

有人可以指出每个 CPU 内核为 CPU 空闲创建空闲任务的代码位置吗?

问候, 斯努

【问题讨论】:

    标签: linux-kernel linux-device-driver cpu power-management android-kernel


    【解决方案1】:

    以5.3内核为参考:

    • “init/main.c”中的start_kernel() 调用arch_call_rest_init()
    • “init/main.c”中的arch_call_rest_init() 调用rest_init()
    • "init/main.c" 中的rest_init() 调用kernel_thread() 创建以kernel_init 作为线程函数的init 进程。
    • “init/main.c”中的kernel_init() 调用kernel_init_freeable()
    • “init/main.c”中的kernel_init_freeable() 调用smp_init()
    • “kernel/smp.c”中的smp_init() 调用idle_threads_init()
    • “kernel/smpboot.c”中的idle_threads_init() 为除引导 CPU 之外的每个 CPU 调用 idle_init(cpu)
    • “kernel/smpboot.c”中的idle_cpu(cpu) 调用fork_idle(cpu)
    • “kernel/fork.c”中的fork_idle(cpu) 克隆init 进程线程并调用init_idle(task, cpu)
    • “kernel/sched/core.c”中的init_idle(task, cpu) 为CPU 设置空闲线程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-25
      • 2011-05-03
      • 2013-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多