Pregunta

Lo que se guarda con exactitud y restaurada en un cambio de contexto entre dos hilos

  • en el mismo proceso
  • entre dos procesos
¿Fue útil?

Solución

Esto es más bien una cuestión compleja ya que la respuesta (s) dependen de muchas cosas:

  1. La CPU en cuestión
    • Puede variar significativamente incluso dentro de la misma familia, por ejemplo, los registros adicionales añadidos para las operaciones de SSE / MMX.
  2. El sistema operativo, ya que controla los manipuladores, que se disparan cuando un cambio de contexto y decidir si el hardware de la CPU (si lo hay) para ayudar en un cambio de contexto se utiliza o no.
    • Por ejemplo Windows no utiliza el hardware de Intel que puede hacer gran parte del almacenamiento de cambio de contexto para usted, ya que no almacena registros de coma flotante.
  3. Cualquier optimizaciones habilitadas por un programa consciente de que sus propios requisitos y capaz de informar al sistema operativo de este
    • Tal vez para indicar que no se está utilizando FP registradoras por lo que no se moleste con ellos
    • En arquitecturas con los archivos de registro importantes como la mayoría de los diseños RISC existe un considerable beneficio para saber lo que necesita sólo un subconjunto más pequeño de estos registros

Como mínimo el uso de necesitarán ser salvado registros de propósito general y de registro contador de programa (asumiendo que el diseño común de la mayoría de las CPU CISC corriente / estilo RISC de propósito general).

Tenga en cuenta que el intento de hacer sólo la cantidad mínima de esfuerzo en relación con un cambio de contexto es un tema de algún interés académica

Linux, obviamente, tiene más información disponible sobre este tema en el dominio público a través de mis referencias pueden ser un poco fuera de fecha.

Hay un ‘task_struct’ que contiene un gran número de campos relacionados con el estado de la tarea, así como el proceso que la tarea es para.

Uno de ellos es el ‘thread_struct’

  

/ * estado específico de la CPU de esta tarea * /
   - Hilo de estructura thread_struct;
       Contiene información acerca de los descriptores caché TLS, registros de depuración,
       info, punto flotante, modo virtual 86 o permisos IO de fallos.

Cada arquitectura define su propio thread_struct que identifica los registros y los demás valores guardados en un interruptor.

Esto se complica aún más por la presencia de cambiar el nombre de registros que permiten múltiple en instrucciones de vuelo (ya sea a través de superescalar o relacionados tubería diseños arquitectónicos). La fase de restauración de un Swicth contexto es probable que confiar en la tubería de la CPU de ser restaurada en un estado inicialmente vacío tales las instrucciones de los que aún no habían sido retirados en la tubería no tienen ningún efecto y por lo tanto pueden ser ignorados. Esto hace que el diseño de la CPU mucho más difícil.

La diferencia entre un proceso y un hilo es que el interruptor de proceso (que siempre significa un cambio de subproceso en todos los principales sistemas operativos corriente) tendrá que actualizar la información de traducción de la memoria, la información relacionada con IO y permisos estructuras relacionadas.

Estos serán principalmente punteros a los más ricos estructuras de datos, así que no serán un coste significativo en relación con el cambio de contexto hilo.

Otros consejos

Cuando el cambio de contexto es entre los hilos de un mismo proceso, todos los registros de propósito general no volátiles de la rosca actual se guardan y las del nuevo hilo se restauran; registros volátiles necesitan ser salvados sólo si la ejecución del hilo actual ha sido interrumpida por una interrupción. Registros de cualquier co-procesador utilizado por los hilos (por ejemplo flotantes procesador de punto), también deben ser guardados y restaurados Si la conmutación es entre hilos de 2 procesos, además de lo que se necesita para un cambio de contexto normal, los cambios relacionados con la gestión de memoria y IO también deben realizarse; por ejemplo, protección de memoria que necesitan los procesos se consigue utilizando tablas de páginas y páginas mesas de directorio y cada proceso tiene una dirección de la tabla de directorios página única, que tiene que ser cambiado cuando los cambios en el proceso.

Esto depende del sistema operativo que está utilizando, pero seguro que tendrá que guardar el contenido de todos los registros (incluyendo el contador de instrucciones) y cargar los registros de la rosca se está cambiando a.

La única diferencia que viene a la mente en relación con el cambio entre dos hilos en el mismo proceso es que no perder el contenido de la memoria caché L1 y MMU.

No estoy seguro, pero si no recuerdo mal también el conjunto de la memoria de trabajo se cambia.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top