linux-kernel - 关于 Linux 每个 cpu 核心 PID0 空闲任务

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

我正在 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/

相关文章:

linux - 在 debian 上升级内核

c - 用户空间代码以什么顺序执行?

c - 内核 block 设备

Linux - dmesg 不显示 printk 消息

linux-kernel - 在 linux 中获取指向结构设备的指针的更简洁方法是什么?

c++ - Linux 内核事件 : timeval or timespec

c - 测量矩阵乘法参数的程序错误

c - 如何在 C 中获取 CPU 使用率?

c - 为什么我们需要针对不同的平台(例如 Windows/Linux)进行编译?

Linux 内核 regmap irq 处理程序有问题