mp3tag - ¿Linux programa un proceso o un hilo?
tag editor linux (2)
El programador de Linux (en los kernels recientes de Linux, por ejemplo, 3.0 al menos) está programando tareas programables o simplemente tareas .
Una tarea puede ser:
- un proceso de un solo hilo (por ejemplo, creado por
fork
sin ninguna biblioteca de hilos) - cualquier subproceso dentro de un proceso de subprocesos múltiples (incluido su subproceso principal), en particular subprocesos Posix (pthreads)
- Las tareas del kernel, que se inician internamente en el kernel y permanecen en la tierra del kernel (por ejemplo,
nfsiod
,kjournald
,kauditd
,kswapd
,kauditd
, etc.)
En otras palabras, los subprocesos dentro de los procesos de subprocesos múltiples se programan como procesos sin subproceso (es decir, procesos de un solo subproceso).
El syscall de bajo nivel clone(2) crea tareas planificables en el territorio del usuario (y se puede usar tanto para crear un proceso de fork
como para la implementación de bibliotecas de hilos, como pthread ). A menos que sea un implementador de bibliotecas de subprocesos de bajo nivel, no desea utilizar la clone
directamente.
AFAIK, para procesos de subprocesos múltiples, el kernel (casi) no está programando el proceso, sino cada subproceso individual dentro (incluido el subproceso principal).
En realidad, existe cierta noción de grupos de hilos y affinity en la programación, pero no los conozco bien.
En estos días, los procesadores generalmente tienen más de un núcleo, y cada núcleo ejecuta una tarea (en un momento dado) por lo que tiene varias tareas que se ejecutan en paralelo.
Los tiempos cuánticos de la CPU se asignan a las tareas, no a los procesos.
Después de leer this pregunta, tengo algunas dudas. Por favor ayuda en la comprensión.
La programación implica decidir cuándo ejecutar un proceso y durante qué cantidad de tiempo.
¿El kernel de Linux programa un hilo o un proceso? Como el proceso y el hilo no se diferencian dentro del kernel, ¿cómo los trata un planificador?
¿Cómo se decide cuántica para cada hilo? a. Si se decide una cantidad de tiempo (por ejemplo, 100us) para un proceso, ¿eso se comparte entre todos los subprocesos del proceso? o b. ¿Un cuanto para cada hilo es decidido por el planificador?
Nota: las preguntas 1 y 2 están relacionadas y pueden parecer iguales, pero solo quería dejar en claro cómo funcionan las cosas. Las publicamos aquí.
La implementación NPTL de las especificaciones de subprocesos POSIX ve al subproceso como un proceso diferente dentro del kernel, con task_struct
único (y, por lo tanto, también pid
), por lo que cada hilo es programable en sí mismo como se menciona. Por lo tanto, cada subproceso obtiene su propio intervalo de tiempo y se programa como los procesos mencionados anteriormente.
Solo para agregar, Actualmente, el programador de Linux también es capaz de programar no solo tareas individuales (un proceso simple), sino grupos de procesos o incluso usuarios (todos los procesos, pertenecientes a un usuario) en su totalidad. Esto permite la implementación de la programación de grupos, donde el tiempo de CPU se divide primero entre los grupos de procesos y luego se distribuye dentro de esos grupos a hilos individuales.
Los subprocesos de Linux no operan directamente en procesos o subprocesos, pero funcionan con entidades programables . Representado por struct sched_entity
. Es justo decir que cada proceso / subproceso es una sched_entity
pero lo contrario puede no ser cierto.
Para conocer la programación detallada del proceso, consulte here