Respostas curtas:
- Não, não é um processo
- Os threads do usuário não estão enraizados no init.
Init é apenas o primeiro processo; ele não gerencia nenhum processo ou encadeamento. Ele cria alguns, usando o fork do syscalls do kernel () e o exec.
Eu acho que você tem uma idéia confusa do que é um processo. não significa apenas um pouco de código de execução. Sim, o kernel é executado antes do init (e o carregador de inicialização antes mesmo). Mas um 'processo' tem uma definição específica de:
- Executa no espaço do usuário
- Executa com um ID do processo
- Muitas interações precisam passar pelo kernel
- Todos os recursos precisam vir do kernel
- Precisa ser agendado pelo kernel
Assim, uma vez que o kernel é inicializado, ele executa o init, que gera quaisquer outros processos que sua configuração solicite.
No que diz respeito ao número 2, todo o material do kernel está, bem, no kernel. Pense no kernel como uma grande área de código. Novamente, não um processo, mas um grande blob de código. Partes do kernel lidam com gerenciamento de memória, partes dele com partes de agendamento de si mesmo (como drivers, etc.) e partes dele com processos de agendamento.
O kernel realmente não se comporta como um processo. Ele não é agendado, é executado em nome de um processo (chamado de contexto do processo ou contexto do usuário) ou como resultado de uma interrupção ou exceção (o chamado contexto de interrupção).
Dito isto, o kernel do Linux gera threads do kernel para executar algumas tarefas ou para evitar executar algo no contexto de interrupção por muito tempo (é o que o thread do ksoftirqd faz, evitando latências excessivas que podem levar, por exemplo, a perda de áudio, ...) .
Você pode ver os threads do kernel na saída do
ps
comando. Eles são facilmente identificados: o nome está entre colchetes. Alguns deles executam uma instância por CPU, a CPU é identificada com um número após uma barra, então [ksoftirqd / 0] é a instância do ksoftirqd na CPU 0.fonte
Existem conceitos nos micro-kernels em que várias partes do kernel são de fato processos com o sentinela primário, na maioria das vezes, gerencia o IPC.
Linux - para melhor ou para pior - não é um sistema de microssistema.
fonte
Não, não é ... O kernel (e as extensões do kernel) são carregados diretamente na memória. Se houver um código inseguro no kernel, nada ficará entre ele e um grande problema.
Além disso, o kernel basicamente executa / alterna entre processos. Obviamente, algo que realmente executa processos não será um processo em si.
(tl; dr 1. não 2. parte do kernel / sua extensão)
fonte
ninjalj escreveu: "O kernel não se comporta realmente como um processo. Não é agendado"
Bem, existe o processo inativo (basicamente o pid 0, embora não seja mostrado em nenhum lugar) que é agendado e quase sempre em um estado executável.
fonte
Fonte: https://courses.cs.washington.edu/courses/cse351/19su/lectures/18/CSE351-L18-processes_19su.pdf , página 36
fonte