Osservando la fonte strace
ho trovato l'uso della bandiera del clone CLONE_IDLETASK
che è descritta lì come:
#define CLONE_IDLETASK 0x00001000 /* kernel-only flag */
Dopo aver esaminato più a fondo, ho scoperto che, sebbene quel flag non sia coperto man clone
, viene effettivamente utilizzato dal kernel durante il processo di avvio per creare processi inattivi (che dovrebbero avere tutti PID 0) per ogni CPU sulla macchina. cioè una macchina con 8 CPU avrà almeno 7 (vedi domanda sotto) tali processi "in esecuzione" (virgolette).
Ora, questo mi porta a un paio di domande su cosa faccia effettivamente quel processo "inattivo". La mia ipotesi è che esegue l'operazione NOP continuamente fino al termine del suo periodo di tempo e il kernel assegna un processo reale per eseguire o assegnare nuovamente il processo inattivo (se la CPU non viene utilizzata). Eppure, è un'ipotesi completa. Così:
Su una macchina con, diciamo, 8 CPU verranno creati 7 processi inattivi? (e una CPU sarà gestita dal kernel stesso mentre non si esegue alcun lavoro nello spazio utente?)
Il processo inattivo è davvero solo un flusso infinito di operazioni NOP? (o un ciclo che fa lo stesso).
L'utilizzo della CPU (diciamo
uptime
) è semplicemente calcolato da quanto tempo è rimasto il processo inattivo sulla CPU e da quanto tempo non è stato presente in un determinato periodo di tempo?
PS È probabile che buona parte di questa domanda sia dovuta al fatto che non capisco fino in fondo come funziona una CPU. cioè capisco l'assemblaggio, i tempi e gli interrupt ma non so come, ad esempio, una CPU possa usare più o meno energia a seconda di ciò che sta eseguendo. Le sarei grato se qualcuno potesse illuminarmi anche su questo.