O caso

Três programas, um processador. Quem decide quem roda?

O Isaac deixa a planilha de estoque, a videochamada com o fornecedor e o sistema de pedidos abertos ao mesmo tempo, num computador só. Nenhum dos três derruba os outros, e nenhum consegue ler a memória do vizinho.

Alguém precisa decidir quem usa o processador agora, quanta memória cada um recebe e quem pode abrir cada arquivo.

O kernel é um programa, o software central do sistema operacional. O que o diferencia dos outros programas não é o que ele é, e sim o poder que ele tem sobre o hardware.

O problema

Programas não podem falar direto com o hardware

Um computador tem um processador, uma memória e um disco, e dezenas de programas querendo usá-los. Se cada um falasse direto com o hardware:

  • Colisão: dois programas gravariam no mesmo lugar da memória, e um sobrescreveria o outro.
  • Insegurança: um programa mal-intencionado leria as senhas de outro.
  • Repetição: cada programa precisaria saber operar cada modelo de disco, de placa de rede e de teclado.
  • Queda em cadeia: um erro num programa travaria a máquina inteira.

A solução

O kernel

O kernel (o núcleo) é esse programa: a parte do sistema operacional que roda com todos os privilégios sobre o hardware. Ele é o primeiro a ser carregado quando o computador liga e fica na memória o tempo todo. Os programas comuns pedem a ele o que precisam, e ele decide se atende.

Pense no balcão do café do Isaac. O cliente não entra na cozinha: faz o pedido no balcão. O atendente confere se o pedido é permitido, leva até a cozinha, volta com o resultado e organiza a fila quando chega muita gente. Os clientes são os programas, o pedido é a chamada de sistema, a cozinha é o hardware e o atendente é o kernel.

✕ direto na cozinha☕ Clientes(programas)NavegadorPlanilhaVideochamada🧾 Balcão(o kernel)confere o pedidoatendeorganiza a fila🍳 Cozinha(hardware)ProcessadorMemóriaDiscopedido (system call)executa e devolve
No café do Isaac, quem entra na cozinha é o atendente, nunca o cliente.

Os trabalhos principais do kernel são quatro:

Processos e processador (process management)

Decide qual programa usa o processador e por quanto tempo, e alterna entre eles tão rápido que parecem rodar juntos. Quem faz isso é o agendador (scheduler).

No computador do Isaac: a videochamada e a planilha se revezam no processador.

Memória (memory management)

Dá a cada programa a sua própria visão da memória, a memória virtual, e impede que um acesse a de outro.

No computador do Isaac: o sistema de pedidos não vê a memória da planilha.

Arquivos (file systems)

Organiza o disco em pastas e arquivos, e controla quem pode ler e escrever em cada um.

No computador do Isaac: só o usuário certo abre a pasta de clientes.

Dispositivos (device drivers)

Conversa com o hardware por meio de drivers, e esconde as diferenças entre um modelo e outro.

No computador do Isaac: o mesmo programa imprime em qualquer impressora.

A rede também passa pelo kernel: é ele que monta e entrega os pacotes de dados que o programa quer enviar.

A fronteira

Espaço de usuário e espaço do kernel

O processador tem dois modos de operação. No modo privilegiado, roda o kernel, que pode tudo. No modo restrito, rodam os programas comuns, que não podem mexer direto no hardware nem na memória dos outros. Por isso se fala em duas áreas:

  • Espaço de usuário (user space): onde rodam os aplicativos.
  • Espaço do kernel (kernel space): onde roda o kernel.

Para fazer algo que só o kernel pode, como abrir um arquivo ou enviar dados pela rede, o programa faz uma chamada de sistema (system call, ou syscall). É um pedido formal: o processador passa para o modo privilegiado, o kernel confere se o pedido é permitido, executa e devolve o resultado.

Espaço de usuário (user space)NavegadorBanco de dadosSistema de pedidosChamadas de sistema (system calls): open, read, write, fork…Espaço do kernel (kernel space)ProcessosMemóriaArquivosDriversHardware: processador, memória, disco, rede
Os aplicativos nunca falam direto com o hardware: pedem ao kernel por chamadas de sistema.

Algumas chamadas de sistema do Linux: open (abrir um arquivo), read e write (ler e gravar), fork (criar um processo) e mmap (mapear memória).

Não confunda

Kernel × sistema operacional

Os dois nomes são usados como se fossem o mesmo. Não são.

Kernel

“Quem controla o hardware e divide os recursos entre os programas?”

Exemplo
O Linux, o núcleo usado pelo Ubuntu, pelo Debian e pelo Android.
Foco
O núcleo: processos, memória, arquivos, dispositivos e rede.

Sistema operacional (operating system)

“O que o usuário recebe pronto para usar o computador?”

Exemplo
O Ubuntu: o kernel Linux, mais o terminal (shell), as bibliotecas, os utilitários e a interface.
Foco
O kernel mais tudo o que vem em volta dele.

Por dentro

Tipos de kernel

Existem jeitos diferentes de organizar um kernel:

TipoComo éExemplo
Monolítico (monolithic)Quase tudo (processos, memória, arquivos, drivers) roda dentro do kernel. É rápido, mas um erro num driver pode derrubar o sistemaLinux
Microkernel (microkernel)O kernel é mínimo, e os demais serviços rodam como programas separados. Há mais isolamento, e mais pedidos entre as partesMinix, QNX
Híbrido (hybrid)Mistura as duas ideiasWindows (NT), macOS (XNU)

O Linux é monolítico, mas modular: ele aceita módulos do kernel (kernel modules), pedaços de código, como drivers, que são carregados e descarregados com o sistema rodando, sem reiniciar.

Na prática

Por que isso importa para quem desenvolve

O kernel aparece no dia a dia de quem desenvolve e de quem opera sistemas:

Programa travado (process isolation)

Quando um programa falha, o kernel encerra só aquele processo. O resto do sistema continua.

No computador do Isaac: a videochamada trava, e a planilha segue aberta.

Falta de memória (out of memory)

Se a memória acaba, o kernel do Linux pode encerrar um processo para salvar o sistema. É o OOM killer.

Num servidor: o banco de dados some, e o log do kernel diz o motivo.

Observar as chamadas de sistema (strace)

No Linux, a ferramenta strace mostra as chamadas de sistema que um programa faz.

Servidores, VMs e contêineres

Tudo isso roda sobre um kernel: cada máquina virtual tem o seu, e os contêineres compartilham o do servidor.

bash
strace -c ls

O comando conta as chamadas de sistema feitas por um ls simples, de openat a write.

Termos-chave

Seis termos para fixar

Toque no cartão para ver a definição.

Teste rápido

Três perguntas, estilo prova

01

Um programa precisa ler um arquivo do disco. Como ele faz isso?

02

Estritamente falando, o que é o Linux?

03

Um programa comum tenta ler a memória de outro programa. O que acontece?


O kernel é o árbitro entre os programas e o hardware: divide o processador, a memória, os arquivos e os dispositivos, e só atende o que for permitido, pelas chamadas de sistema. Entender essa fronteira explica por que um erro num programa comum não derruba a máquina inteira, e por que quase toda ferramenta, de um editor de texto a um banco de dados, depende do kernel. O próximo passo é entender o que roda em cima dele: Processos e Threads.