Para usuários casuais e fãs menos experientes, o Linux é um sistema operacional de código aberto. Para os puristas, no entanto, o título "Linux" é reservado para o kernel que alimenta o sistema operacional. Se você está curioso para saber o que é o kernel do Linux, vamos responder a essa pergunta, com foco nos usuários mais leigos.

Modos

Antes de explicar o que é o kernel, é importante entender os termos "modo de usuário" e "modo de kernel". O modo de usuário é quando a execução do código não tem capacidade de acessar diretamente o hardware ou a memória de referência. Para obter acesso ao hardware e à memória, o código em execução no modo de usuário deve delegar instruções às Interfaces de Programação de Aplicativo (APIs) do sistema. O modo de kernel é quando a execução do código tem acesso irrestrito a todo o hardware, e é reservada para as funções mais confiáveis do sistema operacional.

O que é o kernel do Linux?

Todo sistema operacional possui um kernel. Windows, macOS, iOS, Android, SO Chrome e Linux têm, cada um, um sistema de baixo nível que é responsável pela interface de todos os softwares com o hardware físico do computador. Sem o kernel, nenhum dos seus aplicativos seria capaz de usar o computador físico; aplicativos como Firefox, Chrome, LibreOffice, MS Office ou Outlook não funcionariam. O kernel também é responsável por permitir que os processos troquem informações usando o que é chamado Comunicação entre Processos (IPC).

Existem três tipos de kernels:

Kernels monolíticos: Esses kernels abrangem a CPU, a memória, o IPC, os drivers de dispositivos, o gerenciamento do sistema de arquivos e as chamadas do servidor do sistema. Também é responsável por distribuir memória do sistema para os aplicativos. Esses tipos de kernel geralmente são melhores para acessar o hardware e multitarefa.

Microkernels: Microkernels adotam uma abordagem minimalista e gerenciam apenas a CPU, a memória e o IPC.

Kernels Híbridos: Os Kernels Híbridos têm a capacidade de decidir o que eles querem executar no Modo Usuário ou Kernel. Embora isso forneça o melhor dos dois mundos, exige muito mais dos fabricantes de hardware para criar drivers que sirvam para fazer interface entre a execução de código e hardware.

Qual o kernel que o Linux usa?

Como o Linux usa código aberto, o Kernel dele é Monolítico, enquanto o MacOS e o Windows usam Kernels Híbridos. O kernel do Linux foi concebido em 1991 por Linus Torvalds. Até hoje, o Sr. Torvalds continua a ser o desenvolvedor líder no kernel do Linux, enquanto desenvolvedores de todo o mundo contribuem para o kernel do Linux.

Na verdade, estima-se que cerca de 10.000 desenvolvedores, de mais de 1.000 empresas, contribuíram para o kernel do Linux (desde que o rastreamento começou, em 2005).

Onde está o kernel?

Se você abrir uma janela de terminal e emitir o comando ls/boot, verá um arquivo chamado vmlinuz-VERSION (onde VERSION é o nome ou número da versão). O arquivo vmlinuz é o atual kernel Linux inicializável, e o "z" indica que o kernel está compactado; então ao invés de vmlinux temos vmlinuz.

vmlinuz-VERSION
vmlinuz-VERSION

A listagem do diretório/boot.

Dentro desse diretório/boot existem outros arquivos importantes do kernel, como initrd.img-VERSION, system.map-VERSION e config-VERSION (onde VERSION é um nome ou um número de release). Esses outros arquivos servem para os seguintes propósitos:

  • Initrd: usado como um pequeno disco RAM que extrai e executa o arquivo real do kernel.
  • System.map: usado para gerenciamento de memória, antes do carregamento do kernel.
  • Config: instrui o kernel sobre quais opções e módulos carregar.

Módulos

Sem módulos, o kernel não seria muito útil. Os módulos ativam efetivamente os drivers necessários para se comunicar com o hardware, sem consumir toda a memória do sistema.

Os módulos também adicionam funcionalidade ao kernel, como comunicação com periféricos, gerenciamento de sistemas de arquivos, segurança, etc. É possível listar, adicionar e remover módulos do kernel com os seguintes comandos:

  • O lsmod irá listar todos os módulos do kernel atualmente carregados.
  • O insmod carregará um módulo do kernel em execução.
  • O rmmod descarregará um módulo do kernel em execução.

Então você vê, com a ajuda de alguns comandos simples, o kernel do Linux pode ser bastante flexível.

O Kernel Atual

No momento desta publicação, o kernel estável do Linux é o 5.0, mas nem todas as distribuições do Linux incluirão o kernel mais recente. Na verdade, a distribuição atualizada da interface do Elementary OS é o kernel 4.15.0-30. O que esse número significa? No caso do kernel mais recente no Elementary OS, isso significa:

  • 4 é a versão principal
  • 15 é a versão menor
  • 0-30 é a revisão>

Também é possível fazer o download de versões diferentes do kernel do Linux a partir do kernel.org, e compilá-lo. A compilação do kernel do Linux é uma tarefa que deve ser executada apenas para quem já tem um conhecimento mais avançado.

Um kernel compilado incorretamente pode tornar o sistema não inicializável. Então, a menos que você esteja pronto para mergulhar na tarefa desafiadora de compilar um código nesse nível, use o kernel padrão, que é enviado e atualizado na sua distribuição de escolha.