Patrząc na źródło strace, znalazłem użycie flagi klonowania, CLONE_IDLETASKktóra jest tam opisana jako:
#define CLONE_IDLETASK 0x00001000 /* kernel-only flag */
Po głębszym przyjrzeniu się, odkryłem, że chociaż ta flaga nie jest w man cloneniej zakryta , jest faktycznie używana przez jądro podczas procesu rozruchu do tworzenia bezczynnych procesów (wszystkie powinny mieć PID 0) dla każdego procesora na komputerze. tzn. maszyna z 8 procesorami będzie miała co najmniej 7 (patrz pytanie poniżej) takich procesów „działających” (notowania).
To prowadzi mnie do pytania o to, co faktycznie robi ten „bezczynny” proces. Zakładam, że wykonuje on operację NOP w sposób ciągły, aż do upływu czasu, a jądro przypisuje prawdziwy proces do uruchomienia lub ponownie przypisuje proces bezczynności (jeśli procesor nie jest używany). Ale to kompletne przypuszczenie. Więc:
Czy na maszynie z, powiedzmy, 8 procesorami powstanie 7 takich bezczynnych procesów? (a jeden procesor będzie utrzymywany przez samo jądro bez wykonywania pracy w przestrzeni użytkownika?)
Czy proces bezczynności jest tak naprawdę nieskończonym strumieniem operacji NOP? (lub pętla, która robi to samo).
Czy użycie procesora (powiedzmy
uptime) jest po prostu obliczane na podstawie tego, jak długo proces bezczynności był na procesorze i jak długo go nie było przez określony czas?
PS Prawdopodobnie duża część tego pytania wynika z faktu, że nie do końca rozumiem, jak działa procesor. tzn. rozumiem asembler, ramy czasowe i przerwania, ale nie wiem jak, na przykład, procesor może zużywać mniej lub więcej energii w zależności od tego, co wykonuje. Byłbym wdzięczny, gdyby ktoś też mógł mnie oświecić.