Глядя на источник, strace
я обнаружил использование флага клонирования, CLONE_IDLETASK
который описан там как:
#define CLONE_IDLETASK 0x00001000 /* kernel-only flag */
После более глубокого изучения я обнаружил, что, хотя этот флаг не охватывается, man clone
он фактически используется ядром во время процесса загрузки для создания незанятых процессов (каждый из которых должен иметь PID 0) для каждого процессора на машине. то есть машина с 8 процессорами будет иметь как минимум 7 (см. вопрос ниже), такие процессы «работают» (обратите внимание на кавычки).
Теперь это приводит меня к вопросу о том, что на самом деле делает этот «простой» процесс. Я предполагаю, что он выполняет операцию NOP непрерывно до тех пор, пока не истечет его временной интервал, и ядро не назначит реальный процесс для повторного запуска или назначения незанятого процесса (если ЦП не используется). Тем не менее, это полное предположение. Так:
На машине с, скажем, 8 процессорами будут созданы 7 таких бездействующих процессов? (и один процессор будет удерживаться самим ядром, пока не будет выполняться пользовательская область?)
Действительно ли простой процесс представляет собой просто бесконечный поток операций NOP? (или цикл, который делает то же самое).
uptime
Рассчитывается ли использование ЦП (скажем ) просто по тому, как долго неактивный процесс был на ЦП и как долго его не было в течение определенного периода времени?
PS Вполне вероятно, что большая часть этого вопроса связана с тем, что я не до конца понимаю, как работает процессор. то есть я понимаю сборку, временные рамки и прерывания, но я не знаю, как, например, процессор может использовать больше или меньше энергии в зависимости от того, что он выполняет. Я был бы признателен, если бы кто-то тоже смог меня просветить.