Estaba tratando de entender la gestión y programación de procesos de Linux. Sé que el programador programa diferentes procesos en función de la prioridad/fracción de tiempo. Pero hay tareas del kernel (no estoy mencionando las llamadas al sistema del proceso que llevan el proceso al modo kernel) que también deben procesarse (por ejemplo:programador/temporizadores o algún código del kernel que se ejecuta para siempre). No entendí si el programador programa la CPU para diferentes procesos, cómo se atienden las tareas del kernel en el medio.
Respuesta aceptada:
Las tareas del núcleo que no se ejecutan "en proceso" (para atender una llamada al sistema o una interrupción) se manejan como procesos separados y puede verlos en ps
Salida de:
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]
Estos procesos se programan de la misma manera que los procesos con los que está más familiarizado.
Un patrón común para tales tareas son las colas de trabajo; la documentación del núcleo para esos es bastante buena, lo animo a leerla si está interesado en el tema.