Osservando la fonte straceho trovato l'uso della bandiera del clone CLONE_IDLETASKche è 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.