О задаче бездействия Linux PID0 на ядро ​​​​процессора

Я работаю над CPU-IDLE в Linux. У меня есть вопрос, кто порождает задачи бездействия для каждого ядра ЦП, то есть, если есть 4 ядра ЦП, кто порождает задачу бездействия для каждого процессора? Где находится код того же самого для создания задач бездействия? Я понимаю, что start_kernel в init/main.c запускается процессом инициализации.

Может ли кто-нибудь указать расположение кода, в котором задачи бездействия создаются для каждого ядра ЦП для бездействия ЦП?

С уважением, Сну


person snu    schedule 19.11.2019    source источник


Ответы (1)


Использование ядра 5.3 в качестве эталона:

  • start_kernel() в "init/main.c" вызывает arch_call_rest_init().
  • arch_call_rest_init() в "init/main.c" вызывает rest_init().
  • rest_init() в "init/main.c" вызывает kernel_thread() для создания процесса инициализации с kernel_init в качестве функции потока.
  • kernel_init() в "init/main.c" вызывает kernel_init_freeable().
  • kernel_init_freeable() в "init/main.c" вызывает smp_init().
  • smp_init() в "kernel/smp.c" вызывает idle_threads_init().
  • idle_threads_init() в "kernel/smpboot.c" вызывает idle_init(cpu) для каждого процессора, кроме загрузочного.
  • idle_cpu(cpu) в "kernel/smpboot.c" вызывает fork_idle(cpu).
  • fork_idle(cpu) в "kernel/fork.c" клонирует поток процесса инициализации и вызывает init_idle(task, cpu).
  • init_idle(task, cpu) в "kernel/sched/core.c" устанавливает поток бездействия для ЦП.
person Ian Abbott    schedule 20.11.2019