我正在 Linux 中研究 CPU-IDLE。我有一个问题,谁为每个 CPU 核心生成空闲任务,即如果有 4 个 Arm CPU 核心,谁为每个 CPU 核心生成空闲任务?用于创建空闲任务的相同代码位于哪里?据我所知,init/main.c中的start_kernel是由init进程运行的。
有人可以指出为 CPU 空闲而为每个 CPU 核心创建空闲任务的代码位置吗?
问候, 斯努
最佳答案
使用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()
创建 init 进程,以kernel_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设置空闲线程。
关于linux-kernel - 关于 Linux 每个 cpu 核心 PID0 空闲任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58938509/