Quando um encadeamento é criado, como o contexto inicial é determinado? [fechadas]

1

Como o contexto inicial de um thread (estado de registros) é determinado na criação de threads?

Por exemplo: Contexto de thread atual eax = 0x4, ebx = 0x9000, ecx = 0xfff, etc ... Criar um segmento é chamado para começar a executar em 0xbfbfbf. Parece óbvio que o eip do thread será definido como 0xbfbfbf, mas e os outros registradores. Eles são copiados do segmento atual? Eles estão configurados para 0x00000000? O ponteiro da pilha é o mesmo? Eu quero saber o que acontece com o contexto de thread inicial na criação de threads. Verifiquei os livros internos do Google e do sistema operacional e não encontrei o que estou procurando.

Além disso, é o mesmo processo em outro sistema operacional, em especial o Linux e o Windows?

    
por user179659 12.12.2012 / 01:47

1 resposta

0

Quando um novo thread começa a ser executado, seus registros são carregados de seu contexto armazenado, exatamente como um thread que já está em execução. O encadeamento que cria o encadeamento pode preencher a estrutura de contexto do novo encadeamento da maneira que preferir antes de adicioná-lo à tabela de encadeamentos em execução do sistema operacional.

Basicamente funciona assim:

  1. Uma nova estrutura de tarefas é alocada.

  2. Os campos nessa nova estrutura de tarefa são preenchidos, no entanto, desejados. Isso inclui registros, o ponteiro da pilha e assim por diante.

  3. A estrutura da tarefa é marcada como pronta para ser executada e adicionada à lista de tarefas do agendador.

  4. O agendador decide agendar o novo thread, carrega seu contexto da estrutura da tarefa e alterna para ele.

  5. O encadeamento agora tem todos os registros, pilha e ponteiro de instrução que o encadeamento de criação preencheu para ele.

por 12.12.2012 / 02:50