Snažil jsem se pochopit linuxové řízení procesů a plánování. Vím, že plánovač naplánuje různé procesy na základě rozdělení podle priority/času. Existují však úlohy jádra (neuvádím systémová volání procesu, která proces převedou do režimu jádra), které je také nutné zpracovat (např.:plánovač/časovače nebo nějaký kód jádra, který běží věčně). Nechápal jsem, pokud plánovač naplánuje CPU pro různé procesy, jak jsou mezi tím obsluhovány úlohy jádra.
Přijatá odpověď:
Úlohy jádra, které nejsou spuštěny „v procesu“ (pro obsluhu systémového volání nebo přerušení), jsou samy o sobě zpracovávány jako samostatné procesy a můžete je vidět v ps
výstup:
root 2 0.0 0.0 0 0 ? S Sep16 0:02 [kthreadd]
root 3 0.0 0.0 0 0 ? I< Sep16 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< Sep16 0:00 [rcu_par_gp]
root 6 0.0 0.0 0 0 ? I< Sep16 0:00 [kworker/0:0H-kblockd]
root 8 0.0 0.0 0 0 ? I< Sep16 0:00 [mm_percpu_wq]
root 9 0.0 0.0 0 0 ? S Sep16 9:11 [ksoftirqd/0]
root 10 0.2 0.0 0 0 ? I Sep16 173:25 [rcu_sched]
root 11 0.0 0.0 0 0 ? I Sep16 0:00 [rcu_bh]
root 12 0.0 0.0 0 0 ? S Sep16 0:20 [migration/0]
root 14 0.0 0.0 0 0 ? S Sep16 0:00 [cpuhp/0]
root 15 0.0 0.0 0 0 ? S Sep16 0:00 [cpuhp/1]
Tyto procesy jsou naplánovány stejným způsobem jako procesy, které znáte blíže.
Běžným vzorem pro takové úkoly jsou pracovní fronty; dokumentace jádra je docela dobrá, doporučuji vám ji přečíst, pokud vás toto téma zajímá.