conmutador de contexto de hilo vs conmutador de contexto de proceso


¿Podría alguien decirme qué se hace exactamente en ambas situaciones? ¿cuál es el costo principal de cada uno de ellos?

Author: Leon, 2011-03-26

7 answers

La principal distinción entre un interruptor de hilo y un interruptor de proceso es que durante un interruptor de hilo, el espacio de memoria virtual permanece igual, mientras que no lo hace durante un interruptor de proceso. Ambos tipos implican entregar el control al núcleo del sistema operativo para realizar el cambio de contexto. El proceso de cambiar dentro y fuera del núcleo del sistema operativo junto con el costo de cambiar los registros es el mayor costo fijo de realizar un cambio de contexto.

Un costo más difuso es que un el interruptor de contexto interfiere con los mecanismos de cacheo de los procesadores. Básicamente, cuando cambia de contexto, todas las direcciones de memoria que el procesador "recuerda" en su caché se vuelven inútiles. La única gran distinción aquí es que cuando cambia los espacios de memoria virtual, el búfer de búsqueda de traducción (TLB) o equivalente del procesador se vacía haciendo que los accesos a la memoria sean mucho más caros por un tiempo. Esto no sucede durante un cambio de hilo.

 157
Author: Abhay Buch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-12 20:46:52

El cambio de contexto del proceso implica cambiar el espacio de direcciones de memoria. Esto incluye direcciones de memoria, asignaciones, tablas de páginas y recursos del núcleo, una operación relativamente costosa. En algunas arquitecturas, incluso significa limpiar varias cachés de procesador que no se pueden compartir entre espacios de direcciones. Por ejemplo, x86 tiene que vaciar el TLB y algunos procesadores ARM tienen que vaciar la totalidad de la caché L1!

El cambio de hilo es el cambio de contexto de un hilo a otro en el mismo proceso (cambiar de hilo a hilo entre procesos es simplemente cambiar de proceso).Cambiar el estado del procesador (como el contador del programa y el contenido del registro) es generalmente muy eficiente.

 8
Author: aditya dogra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-24 03:57:07

En primer lugar, el sistema operativo trae el hilo saliente en modo kernel si no está ya allí, porque el interruptor de hilo solo se puede realizar entre hilos, que se ejecutan en modo kernel. Luego se invoca scheduler para tomar una decisión sobre el hilo al que se realizará el cambio. Después de tomar la decisión, el kernel guarda parte del contexto del subproceso que se encuentra en la CPU (registros de cpu) en el lugar dedicado en la memoria (frecuentemente en la parte superior de la pila del kernel del subproceso saliente). Entonces kernel realiza el cambio de la pila del kernel del hilo saliente a la pila del kernel del hilo entrante. Después de eso, el kernel carga el contexto previamente almacenado del hilo entrante de la memoria en los registros de la CPU. Y finalmente devuelve el control de nuevo en modo de usuario, pero en modo de usuario del nuevo hilo. En el caso de que el sistema operativo haya determinado que el subproceso entrante se ejecuta en otro proceso, el kernel realiza un paso adicional: establece un nuevo espacio de direcciones virtuales activo.

El costo principal en ambos escenarios es relacionado con una contaminación de caché. En la mayoría de los casos, el conjunto de trabajo utilizado por el hilo saliente diferirá significativamente del conjunto de trabajo utilizado por el hilo entrante. Como resultado, el subproceso entrante comenzará su vida útil con avalancha de errores de caché, por lo tanto, vaciando los datos viejos e inútiles de las cachés y cargando los nuevos datos de la memoria. Lo mismo es cierto para TLB. En el caso de restablecimiento del espacio de direcciones virtuales (subprocesos se ejecutan en diferentes procesos) la penalización es aún peor, porque restablecimiento de el espacio de direcciones virtual conduce a la descarga de TLB. La triste historia es que todo TLB se vacía, incluso si el nuevo hilo realmente necesita cargar solo unas pocas entradas nuevas. Como resultado, el nuevo hilo comenzará su quantum de tiempo con errores de TLB y caminar página frecuente. El costo directo del interruptor de subprocesos tampoco es despreciable (de ~250 y hasta ~1500-2000 ciclos) y depende de la complejidad de la CPU, los estados de ambos subprocesos y los conjuntos de registros que realmente utilizan.

P.d.: Buen post sobre el contexto interruptor de sobrecarga: http://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html

 6
Author: ZarathustrA,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-27 10:16:20
  • cambio de proceso: es una transición entre dos residentes de memoria de proceso en un entorno de multiprogramación;
  • cambio de contexto: es un contexto cambiante de un programa en ejecución a una rutina de servicio de interrupción (ISR).
 3
Author: john,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-03 05:52:38

En el Cambio de Contexto de Subproceso, el espacio de memoria virtual permanece igual mientras que no lo es en el caso del Cambio de Contexto de Proceso. Además, el Cambio de Contexto de Proceso es más costoso que el Cambio de Contexto de Hilo.

 0
Author: Palak Jain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-14 12:40:54

En resumen, el conmutador de contexto de subproceso no asigna un nuevo conjunto de memoria y pid, utiliza el mismo que el padre ya que se está ejecutando dentro del mismo proceso. Un proceso uno genera un nuevo proceso y por lo tanto asigna nuevos mem y pid.

Hay un loooooot más a él. Han escrito libros sobre él.

En cuanto al costo, un proceso de cambio de contexto >>>> hilo como usted tiene que restablecer todos los contadores de pila, etc.

 -1
Author: CtrlDot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-26 03:14:30

Suponiendo que la CPU que ejecuta el sistema operativo tiene Algunos Dispositivos de Alta Latencia Conectados,

Tiene sentido ejecutar otro subproceso del Espacio de Direcciones del Proceso, mientras que el dispositivo de alta latencia responde.

Pero, si el Dispositivo de Alta Latencia está respondiendo más rápido que el tiempo necesario para configurar la tabla + traducción de memorias Virtuales A Físicas para un NUEVO Proceso, entonces es cuestionable si un interruptor es esencial en absoluto.

También, HOT cache (datos necesarios para ejecutar el proceso / hilo es accesible en menos tiempo) es mejor opción.

 -1
Author: delete me,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-17 05:02:24