2011-11-14 8 views
7

En un proceso de Linux, cada hilo tiene su propia pila. Además de eso, ¿qué más es local para cada hilo? He leído cosas como la tabla de asignación de archivos, etc. ... ¿Puede alguien proporcionarme una lista de cosas que son específicas de un hilo y cómo se organizan en la memoria?Qué hay en un hilo al lado de una pila

segundo lugar, he notado que cuando asigno una pila para un hilo (Ver código de abajo), la dirección de la primera variable en la función del hilo es de alguna manera bastante bytes después de la dirección de pila que I asignados (stackAddr) . Creo que es porque la parte superior de la pila es la dirección final de la memoria de pila asignada, ya que la diferencia en el valor de la dirección de la variable local y la pila asignada es aproximadamente del tamaño de la pila (STACKSIZE). En otras palabras, parece que crece desde abajo hacia arriba.

pthread_attr_init(&attr[tid]); 
stackAddr = malloc(STACKSIZE); 
pthread_attr_setstack(&attr, stackAddr, STACKSIZE); 
+2

sí, la pila crece en la otra dirección, por lo que respondió a su propia pregunta. –

+0

@yi_H, pero necesito que alguien responda la primera parte de mi pregunta: ¡p! – MetallicPriest

Respuesta

6

Para la primera pregunta que puedo pensar:

  • ID del tema
  • Pila
  • máquina registra
  • hilos específicos variables (ambos pares clave/valor establecidos por pthread_setspecific y __thread clase de almacenamiento)
  • signal mask
  • conjunto de señales pendientes
  • valor errno

En segundo lugar, sí, tienes razón, en x86 la pila crece a bajar direcciones. Por lo tanto, si usa pthread_attr_setstack, el área comenzará a utilizarse desde el final.

5

Per POSIX XBD 3.396

un único flujo de control dentro de un proceso. Cada subproceso tiene su propio ID de subproceso, prioridad de planificación y política, valor de errno, enlaces de clave/valor específicos de subprocesos y los recursos de sistema necesarios para admitir un flujo de control. Cualquier cosa cuya dirección puede ser determinada por un hilo, incluyendo pero no limitado a variables estáticas, el almacenamiento obtenido a través de malloc(), el almacenamiento directamente direccionable obtenido a través de funciones definidas por la implementación y las variables automáticas, son accesibles para todos los hilos en el mismo proceso.

0

En Linux el programador de la aplicación tiene un gran control sobre las cuales los recursos son privados para cada hilo y el que se comparten con otros hilos, si optan por utilizar el clone() API nativa en lugar de los pthreads roscado aplicación.

Esto significa que es imposible dar una respuesta definitiva: los recursos que son específicos de subprocesos dependen de qué indicadores pasaron al clone() cuando se creó el subproceso.

Tenga en cuenta también que muchos de estos recursos no viven en absoluto en la memoria de espacio de usuario; cosas como la máscara de señal se mantienen dentro del kernel.

Cuestiones relacionadas