Подивившись на джерело, strace
я знайшов використання прапора-клона, CLONE_IDLETASK
який описується як:
#define CLONE_IDLETASK 0x00001000 /* kernel-only flag */
Заглянувши в нього глибше, я виявив, що, хоча цей прапор не висвітлений, man clone
він фактично використовується ядром під час завантажувального процесу для створення непрацюючих процесів (у всіх яких повинен бути PID 0) для кожного процесора на машині. тобто машина з 8 процесорами матиме щонайменше 7 (див. питання нижче) такі процеси "працюють" (примітки).
Тепер це призводить мене до пари запитань про те, що насправді робить цей "непрацюючий" процес. Моє припущення полягає в тому, що воно виконує операцію NOP постійно, поки не закінчується її часовий проміжок, і ядро призначає реальний процес для запуску або призначення режиму очікування ще раз (якщо ЦП не використовується). І все-таки, це повна здогадка. Тому:
На машині з, скажімо, 8 процесорами буде створено 7 таких непрацюючих процесів? (і один процесор буде утримуватися самим ядром, поки робота з робочим простором користувача не працює?)
Чи справді непрацюючий процес є лише нескінченним потоком операцій NOP? (або цикл, який робить те саме).
Чи використання процесора (скажімо
uptime
) просто обчислюється тим, наскільки тривалий час роботи в режимі очікування на процесорі та скільки часу його не було протягом певного періоду часу?
PS Цілком ймовірно, що велика частина цього питання пов'язана з тим, що я не повністю розумію, як працює ЦП. тобто я розумію складання, часові рамки та переривання, але я не знаю, як, наприклад, процесор може використовувати більше або менше енергії залежно від того, що він виконує. Буду вдячний, якщо хтось може просвітити і мене.