Pergunta

Então, eu fui ficando em um pouco de montagem ultimamente e eu sou um novato, então eu queria saber se alguém poderia esclarecer algo. Presumo que cada processo tem seu próprio conjunto de registros, e cada thread pode modificar esses registros certo ?. Como, então, vários segmentos usam os mesmos registros sem causar confrontos? Ou será que cada fio tem seu próprio conjunto de registros?

Foi útil?

Solução

A mudança de contexto segmento envolve salvar os registros do contexto de execução atual e carregar os registros com valores salvos de contexto de execução começam mudaram para. (entre outras coisas). Então, cada thread efetivamente tem seu próprio conjunto de registros. Também a sua própria pilha, uma vez que ESP é um dos registros.

Uma maneira de pensar sobre isso é que você começa tópicos salvando fora do estado actual registo, e carregando os registros com um novo estado. Se isso não está acontecendo, então não é um interruptor de rosca. Se você também estão migrando para um conjunto diferente de tabelas de endereços virtuais, então o que você tem é um interruptor de processo em vez de um interruptor fio.

você diz:

eu levá-la cada processo tem seu próprio conjunto de registros, e cada thread pode modificar esses registros certo?

Mas isso não está certo. Cada núcleo do processador tem um único conjunto de registros. Estes registos são alterados sempre que o OS muda para um segmento diferente. Mas há apenas um thread em execução em um núcleo da CPU a qualquer momento. Processos realmente não têm os seus próprios registros, processos próprios tópicos (ou, pelo menos, um segmento), e tópicos têm registros, ou melhor, um lugar para manter os valores para os registros, enquanto o thread está à espera de um núcleo da CPU de estar disponível para correr.

Outras dicas

Em hardware, não é apenas um conjunto de registros para cada núcleo do processador. Devido a isso, apenas um thread por vez pode usar os registros. Vários segmentos são executadas ao mesmo tempo num único núcleo por rapidamente mudar de um fio para outro. Agendamento qual thread é executado quando é o trabalho do sistema operacional.

Quando se muda de um segmento para outro, o conteúdo dos registros são salvos em uma área especial de memória, e os registros para o próximo tópico são copiados de volta para o processador. Isto inclui o ponteiro de instrução, de modo que o fio sabe onde continuar a executar quando se obtém o controle de volta. Este processo é chamado de troca de contexto.

Desde programador do sistema operacional está em ainda outro segmento, ele só pode agendar processos quando ele está sendo executado. Isto significa que um recurso de hardware especial - uma interrupção - é necessário trocas de contexto controle. Apenas o sistema operacional pode agendar interruptor interrupções de contexto.

O fio é feito por um kernel ou um sistema operacional, para que o programa não deve se preocupar com isso. Se nenhum kernel ou sistema operacional está disponível, então você precisa implementá-lo. para isso você vai precisar de:

  • uma função que vai salvar o sate de toda registo em sua CPU (SP: Pilha ponteiro, o valor de registo interno, PC: contador de programa etc ...) em uma outro espaço de memória para mudar para um novo fio.
  • uma função para carregar um ambiente de thread para o seu ambiente de CPU, restaurar o valor registro interno salvo anteriormente para o seu registo CPU.

Dependendo do processador, não é apenas um conjunto de registros. Não um conjunto por fio.

Existem maneiras de salvar o estado de todos os registos, de modo que um fio pode levar até onde parou.

Alguns processadores facilitar este .

Você

  • conjunto de processos que é o único do seu sistema operacional,
  • cada processo tem um espaço de memória que contém dinâmica memória alocada , os dados estáticos e código de montagem ,
  • cada processo tem uma lista de tópicos
  • cada fio tem o seu próprio conjunto de registros , contador de programa e pilha

com mudança de contexto seus swaps agendador dados de segmento para passar a execução para outra.

Normalmente, um processo é mais pesado do que um fio e vários agendamento aproxima existir:

  • fazer mudanças de contexto apenas internamente ( tópicos verdes ) para seu programa (o seu sistema operacional só vai considerá-lo um único processo para: hard multi-core)
  • você pode atribuir um número de processos reais para ter uma abordagem híbrida que permite a otimização fácil multi-core.

Cada segmento tem sua própria contexto , que inclui o conjunto de registros, bandeiras CPU, pilha, etc.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top