【问题标题】: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 设置空闲线程。