Para usuários casuais e fãs menos do que hardcore, o Linux é um sistema operacional. 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 de olho no novo usuário.
Modos
Antes de explicar o que é um 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. Modo Kernel é quando a execução de código tem acesso irrestrito a todo o hardware e é reservada para as funções mais confiáveis de um sistema operacional.
O que é um kernel?
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 todas as aplicações 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 (geralmente falando) três tipos de kernels:
- Grãos Monolíticos: esses kernels abrangem a CPU, memória, IPC, drivers de dispositivos, gerenciamento do sistema de arquivos e chamadas do servidor do sistema. Também é responsável por distribuir memória do sistema gratuitamente para os aplicativos. Esses tipos de kernel normalmente são melhores em acessar hardware e multitarefa.
- Microkernels: Microkernels adotam uma abordagem minimalista e gerenciam apenas a CPU, a memória e o IPC.
- Kernels híbridosOs kernels híbridos têm a capacidade de decidir o que eles querem executar no modo de usuário ou de kernel. Embora isso forneça o melhor dos dois mundos, requer muito mais dos fabricantes de hardware para criar drivers que sirvam para fazer interface entre a execução de código e hardware.
O Linux usa um código aberto, o Kernel 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 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, tenham contribuído 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, você 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.
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 aos 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 para o kernel com os seguintes comandos:
- lsmod listará todos os módulos do kernel atualmente carregados.
- insmod carregará um módulo do kernel no kernel em execução.
- rmmod irá 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 4.18.5, mas nem todas as distribuições do Linux incluirão o kernel mais recente. Na verdade, a distribuição atualizada da área de trabalho do Elementary OS executa 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 diferentes versões do kernel Linux do kernel.org e compilá-lo você mesmo. A compilação do kernel do Linux é uma tarefa que deve ser deixada para aqueles que realmente sabem o que estão fazendo. Um kernel compilado incorretamente pode tornar um sistema não inicializável. Então, a menos que você esteja pronto para mergulhar na desafiadora tarefa de compilar código neste nível, use o kernel padrão que é enviado e atualizado na sua distribuição de escolha.