Os encadeamentos de um processo funcionam no mesmo espaço de memória virtual no linux?

0

Então, eu estava lendo esta pergunta:

link

e com base na resposta, "segmentos compartilham todos os segmentos, exceto a pilha, mas um segmento ainda pode acessar a pilha de outro segmento" ??

mas ainda tenho três perguntas:

  1. todos os threads de um processo funcionam no mesmo espaço de memória virtual?

  2. quando dizemos que as threads ainda podem acessar a pilha de outras threads, isso significa, por exemplo, se a pilha começa de 0x00 a 0xff, então uma thread pode funcionar de 0x00 a 0x0f e a outra funciona de 0x10 a 0xff? ou ..?

  3. é empilhar a única parte na memória virtual que é única por encadeamento no linux?

por John P 25.10.2018 / 15:17

1 resposta

2
  1. Do all threads of a process work in the same virtual address space?

Sim. Cada thread tem sua própria pilha, mas toda a memória associada ao processo está no mesmo espaço de endereço virtual. Se uma função em um thread tivesse um ponteiro para uma variável alocada em pilha em outro thread, essa função poderia ler de / write para aquela variável.

  1. When we say threads can still access stack of other threads, dos that mean for example if our stack starts from 0x00 to 0xff then one thread might work from 0x00 to 0x0f and the other one works for 0x10 to 0xff?

Como eu disse na minha resposta à sua primeira pergunta, cada thread recebe seu próprio stack. No resumo, isso significa que a pilha de um encadeamento é executada de A a B, e que uma pilha de encadeamento diferente é executada de C para D, em que A < B < C < D (isto é, o intervalo A-B não se sobrepõe ao intervalo C-D).

  1. Is the stack the only part in virtual memory that is unique per thread in Linux?

A singularidade das pilhas não está relacionada à memória virtual. A pilha (na verdade, "pilha de registros de ativação") é usada para armazenar informações sobre as funções em execução (a função atualmente em execução e todas as funções de chamada). Se houver vários encadeamentos, haverá múltiplas funções (e funções de chamada). Se as threads compartilhassem uma pilha onde os registros de ativação fossem intercalados, seria quase impossível saber a qual função de chamada retornar quando uma função termina.

    
por 25.10.2018 / 16:16