Patrząc na źródło strace
, znalazłem użycie flagi klonowania, CLONE_IDLETASK
któ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 clone
niej 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ć.