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.
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.
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:
| Tipo | Como é | 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 sistema | Linux |
| Microkernel (microkernel) | O kernel é mínimo, e os demais serviços rodam como programas separados. Há mais isolamento, e mais pedidos entre as partes | Minix, QNX |
| Híbrido (hybrid) | Mistura as duas ideias | Windows (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.
strace -c lsO 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.