O kernel é um processo?

O kernel é um processo?
  1. No Linux, sempre dizemos que o primeiro processo é init(pid==1). Mas por que não é o kernel (inicialização) que configura o sistema e cria o initprocesso. O kernel é um processo?
  2. Sabemos que todos os threads do espaço do usuário estão enraizados no processo init. Então, e quanto ao agendador e outras coisas do kernel, como gerenciamento de memória?

Basicamente, o que me confunde é a estrutura do kernel. Se for um processo, é um processo único ou consiste em vários processos?

Responder1

Respostas curtas:

  1. Não, não é um processo
  2. Threads de usuário não têm raiz no init.

Init é apenas o primeiro processo; ele não gerencia nenhum processo ou thread. Ele cria alguns, usando as chamadas de sistema do kernel fork() e exec.

Acho que você tem uma ideia confusa do que é um processo. isso não significa apenas um pouco de execução de código. Sim, o kernel é executado antes do init (e o gerenciador de boot antes mesmo disso). Mas um 'processo' tem uma definição específica de:

  • Executa no espaço do usuário
  • Executa com um ID de processo
  • Muitas interações precisam passar pelo kernel
  • Todos os recursos precisam vir do kernel
  • Precisa ser agendado por kernel

Assim, uma vez inicializado o kernel, ele executa o init, que então gera quaisquer outros processos que sua configuração indique.

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 o gerenciamento de memória, partes dele com partes de agendamento de si mesmo (como drivers, etc.) e partes dele com processos de agendamento.

Responder2

O kernel realmente não se comporta como um processo. Ele não é agendado, ele é executado em nome de um processo (denominado contexto de processo ou contexto de usuário) ou é executado como resultado de uma interrupção ou exceção (denominado 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 (é isso que o thread ksoftirqd faz, evitando latências excessivas que poderiam levar, por exemplo: à queda de áudio,...) .

Você pode ver os threads do kernel na saída do pscomando. São facilmente identificados: seu 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 de ksoftirqd na CPU 0.

Responder3

Existem conceitos em micro-kernels onde várias partes do kernel são de fato processos com a sentinela primária gerenciando principalmente o IPC.

Linux - para o bem ou para o mal - não é um sistema micro kernel.

Responder4

ninjalj escreveu: "O kernel realmente não se comporta como um processo. Ele não é agendado",

Bem, existe o processo ocioso (basicamente pid 0, embora não seja mostrado em lugar nenhum) que é agendado e quase sempre em estado executável.

informação relacionada