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.
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.