2012-02-22 12 views
5

El kernel de Linux sabe de pthreads en el espacio de direcciones del usuario (que no creo que sea ... pero no encontré ninguna información). ¿Cómo cambia el puntero de Instrucción cuando tiene lugar el cambio de hilo?¿Cómo se divide el intervalo de tiempo entre los subprocesos en un proceso?

+0

Si bien no existe una diferencia de programación entre subprocesos y procesos, puede agrupar subprocesos/procesos en grupos de control, cada uno de los cuales será tratado por el planificador como una "entidad de contabilidad", es decir, cargará todo el grupo de control para el Tiempo de CPU, por lo tanto, si agrupa, p. Ej. una invocación de maven (que crea muchos subprocesos), los grupos de control restantes obtendrán una participación más equitativa del tiempo de CPU. – ninjalj

Respuesta

1

1) El kernel no sabe acerca de los subprocesos de nivel de usuario. Sin embargo, NPTL no es el nivel de usuario

2) Esta es una pregunta realmente amplia. Deberías mirar un libro del sistema operativo. Se profundizará en ese tema y en todos los demás involucrados en un cambio de contexto.

+0

hey ¡Gracias! Los libros de AFAIK, OS cubren el cambio de contexto del proceso. pero me estaba preguntando, ¿cómo se lleva a cabo la gestión del intervalo de tiempo entre los hilos ... si el kernel no tiene conocimiento del hilo, es algo así como parcialmente, las activaciones del programador? si no, cómo es el proceso, puede administrar y reservar mantener los hilos. y más de lo que siento, esto está más relacionado con la programación a nivel de usuario ... entonces, hizo la pregunta aquí ... – SpinLocked

+0

Si está interesado en conocer cómo Linux hace estas cosas, consulte Desarrollo del Kernel de Linux por Robert Love. Cubre mucho, pero es bastante accesible. Disfrutar. – Avi

2

Bueno, el kernel de Linux no conoce los subprocesos de los usuarios (pthread sí lo hace en el espacio de usuario, además el kernel en realidad no se preocupa por ellos, excepto que solo necesita saber qué programar).

El puntero de instrucción se cambia en el kernel durante lo que se denomina un cambio de contexto. Durante este cambio, el núcleo esencialmente pregunta al programador qué sigue. el planificador le entregará una task_struct que contiene toda la información sobre el hilo y el manejador de interrupciones para un cambio de contexto continuará y establecerá los valores en la CPU en consecuencia (tablas de páginas, puntero de instrucción, etc.) y cuando ese código hecho, la CPU simplemente comienza a ejecutar desde allí.

+0

Entonces, ¿es esencial decir que ... un hilo se apodera de una porción de tiempo completo, el proceso fue asignado? y no hay división de tiempo en el tiempo entre los hilos en un proceso? – SpinLocked

+0

@SpinLocked Al kernel no le importa si se trata de un proceso o hilo (en realidad no hace distinción) solo le importa la prioridad (cantidad de tiempo para dar el hilo) y si es programable o no (esperando E/S o algo) –

+0

Gracias. Probablemente dije mal la pregunta. Disculpas Tengo la intención de conocer el trabajo de programación del nivel de hilo. ¿Se trata de una división de tiempo simple a la asignación de subprocesos o existe alguna inteligencia en el nivel de proceso, que da a cada subproceso una parte del tiempo. – SpinLocked

5

La NPTL nativa (biblioteca de hilos posix nativos) utilizada en los mapas de Linux pthreads a "procesos que comparten recursos y, por lo tanto, parecen hilos" en el kernel. De esta forma, el programador del kernel controla directamente la programación de pthreads.

Un "pthread switch" se realiza exactamente con el mismo código (en el kernel) que maneja los switches de proceso. Simplificado, esto sería algo así como "almacenar el estado del proceso anterior; si el siguiente proceso utiliza un espacio de direcciones virtuales diferente, cambie los espacios de direcciones virtuales; cargue el siguiente estado de proceso;" (donde "estado de proceso" incluye el puntero de instrucción para el proceso/subproceso).

+0

gracias tengo algo de información. ¿Podría citar alguna fuente de información adicional? – SpinLocked

+0

Así es como Linux siempre ha hecho los hilos. Sí encontré algunas referencias. 1) desplácese hacia abajo hasta "5 Linux" en http://www.icir.org/gregor/tools/pthread-scheduling.html. 2) desplácese hacia abajo a "Implementaciones Linux de hilos POSIX" en http://linux.die.net/man/7/pthreads. – Brendan

Cuestiones relacionadas