para - Cómo maneja Linux los hilos y la programación de procesos
procesos e hilos en linux (3)
Estoy tratando de entender cómo Linux maneja la programación de procesos y la programación de hilos. Leí que Linux puede programar tanto procesos como hilos.
¿Linux tiene un programador de hilos Y un programador de procesos? Si es así, ¿cómo cooperan?
Bajo LINUX no hay un concepto de subprocesos, hacer que el subproceso de reclamo de LINUX POSIX no sea otra cosa que otro proceso. Cuando intenta obtener un ID de proceso, se mostrará el ID de proceso líder debajo de cualquier subproceso. Para más detalles, intente consultar este libro "Entendiendo el kernel de LINUX".
Los subprocesos del núcleo en Linux se implementan como procesos que comparten recursos. El planificador no diferencia entre un hilo y un proceso
Consulte aquí para obtener más información: http://www.linuxquestions.org/linux/articles/Technical/Linux_Kernel_Thread
El programador del kernel de Linux en realidad está programando tareas, y éstas son procesos o subprocesos.
Así que una tarea (una task_struct
dentro del kernel), en el contexto del programador, es lo que se está programando, y puede ser un hilo del kernel como kworker
o kswapd
, un hilo de usuario de un proceso de múltiples subprocesos (como firefox
), o el subproceso único de un proceso de un solo subproceso (como bash
), identificado con ese proceso de un solo subproceso.
Un process es un conjunto finito no vacío (a veces un singleton) de threads comparten el mismo espacio de direcciones virtuales (y otras cosas como descriptores de archivos , directorio de trabajo , etc.). Ver también credentials(7) , capabilities(7) etc.
Los subprocesos en Linux son subprocesos del kernel (en el sentido de ser administrados por el kernel, que también crea sus propios subprocesos), creados por el syscall de clone específico de Linux (que también se puede usar para crear procesos en Linux). La función pthread_create probablemente se construyó (en Linux) encima del clone
dentro de NPTL y Gnu Libc (que integró NPTL en Linux) y musl-libc .