Primeiro: o crédito vai link
Threads do usuário e threads do kernel são exatamente os mesmos. (Você pode ver procurando em / proc / e ver que os encadeamentos do kernel também estão lá).
Um thread de usuário é aquele que executa o código de espaço do usuário. Mas ele pode chamar o espaço do kernel a qualquer momento. Ainda é considerado um segmento "Usuário", mesmo que esteja executando código do kernel em níveis elevados de segurança.
Um encadeamento de kernel é aquele que apenas executa o código do kernel e não está associado a um processo de espaço do usuário. Eles são como "daemons do UNIX", exceto que são daemons somente do kernel. Então você poderia dizer que o kernel é um programa multi-threaded. Por exemplo, existe um segmento do kernel para swap. Isso força todos os problemas de troca a serem "serializados" em um único fluxo.
Se um segmento de usuário precisar de algo, ele chamará o kernel, que marca esse segmento como inativo. Posteriormente, o encadeamento de swap localiza os dados, portanto, ele marca o encadeamento do usuário como executável. Mais tarde ainda, o "user thread" retorna do kernel de volta para o userland como se nada tivesse acontecido.
Na verdade, todos os encadeamentos iniciam no espaço do kernel, porque a operação clone () acontece no espaço do kernel. (E há muita contabilidade do kernel para fazer antes que você possa 'retornar' para um novo processo no espaço do usuário.)