O kernel é um processo?

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

Basicamente, o que me confunde é a estrutura do kernel, se é um processo, é um processo único ou consiste em múltiplos processos.

    
por Wuffers 07.10.2010 / 22:02

5 respostas

18

Respostas curtas:

  1. Não, não é um processo
  2. Os encadeamentos do usuário não estão enraizados no init.

A inicialização é apenas o primeiro processo; ele não gerencia nenhum processo ou encadeamento. Ele cria alguns, usando o kernel syscalls fork () e exec.

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

  • Executa no espaço do usuário
  • é executado com um ID de 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 inicializa, ele executa o init, que então gera quaisquer outros processos que sua configuração diz.

No que diz respeito ao # 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 código blob. 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.

    
por 07.10.2010 / 23:13
15

O kernel realmente não se comporta como um processo. Ele não é agendado, ele é executado em nome de um processo (chamado de contexto de processo ou contexto de usuário) ou é executado como resultado de uma interrupção ou exceção (chamado de contexto de interrupção).

Dito isso, 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 poderiam causar: drop audio ,. ..).

Você pode ver os encadeamentos do kernel na saída do comando ps . Eles são facilmente identificados: seu nome está entre parênteses. Alguns deles executam uma instância por CPU, a CPU é identificada com um número após uma barra, portanto [ksoftirqd / 0] é a instância do ksoftirqd na CPU 0.

    
por 09.10.2010 / 15:17
1

Existem conceitos em micro-kernels onde várias partes do kernel são de fato processos com o sentinela primário, na maioria das vezes apenas gerencia o IPC.

Linux - para melhor ou pior - não é um sistema micro kernel.

    
por 07.10.2010 / 23:00
1

Não, não é ... Kernel (e extensões do kernel) são carregados diretamente na memória. Se houver código inseguro no kernel, não há nada 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. no 2. parte do kernel / sua extensão)

    
por 07.10.2010 / 22:11
0
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 nenhum lugar) que está programado e sempre em um estado executável.

    
por 09.11.2010 / 23:48

Tags