Por que os encadeamentos de nível de usuário são mais rápidos que os encadeamentos no nível do kernel?

5

Descobri que os encadeamentos no nível do usuário são muito mais rápidos do que os encadeamentos no nível do kernel, mas não consegui encontrar nenhum exemplo convincente de WHY que os encadeamentos no nível do usuário são mais rápidos que os encadeamentos no nível do kernel? Alguém poderia explicar isso para mim.

The kernel-level threads are slow and inefficient. For instance, threads operations are hundreds of times slower than that of user-level threads.

retirado de aqui

    
por vikkyhacks 05.11.2013 / 16:07

1 resposta

7

Os encadeamentos no nível do kernel requerem uma alternância de contexto , que envolve a alteração de um grande conjunto de registradores do processador que definem o mapa de memória e as permissões atuais. Ele também despeja algum ou todo o cache do processador.

Os encadeamentos em nível de usuário exigem apenas uma pequena quantidade de contabilidade em um encadeamento ou processo do kernel.

No entanto, a diferença não é grande se os seus threads estão fazendo predominantemente operações de E / S, já que eles precisam passar pelo kernel em qualquer caso. É mais importante se você está tentando implementar algum tipo de simulação com um número muito grande de processos independentes. Nesse caso, você precisa prestar muita atenção a quais mecanismos de sincronização de thread você usa, já que alguns deles também vão até o kernel e acionam uma alternância de contexto.

link "Em geral, o custo indireto da troca de contexto varia de vários microssegundos para mais de mil microssegundos para nossa carga de trabalho. "

Editar: os encadeamentos em nível de usuário mantêm uma pilha por encadeamento e podem ou não salvar os registradores de uso geral, dependendo da arquitetura e das regras de bloqueio de sua convenção de chamada. Pode ser tão simples quanto descarregar os registradores para a pilha, saltar para um novo endereço e colocar alguns registradores, que podem estar em seu cache se esse segmento foi executado recentemente.

As alternâncias de contexto no nível do kernel também alteram o mapa de memória escrevendo para o TLB , e alterar o nível de segurança (nível de privilégio ou "toque") do processador. Veja "Considerações de desempenho"

    
por 05.11.2013 / 17:58