Para usuários casuais e fãs menos que hardcore, o Linux é um sistema operacional. Para os puristas, no entanto, o título Linux está reservado para o kernel que alimenta o sistema operacional.
Modos
Antes de explicarmos o que é um kernel, é importante entender os termos modo de usuário e modo 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 aplicativos do sistema. O modo kernel ocorre quando o código em execução tem acesso irrestrito a todo o hardware – é reservado 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, Chrome OS e Linux têm, cada um, um sistema de baixo nível que é responsável por fazer a interface de todos os aplicativos com o hardware físico do computador. Sem o kernel, nenhum de seus aplicativos seria capaz de fazer uso do computador físico; aplicativos como Firefox, Chrome, LibreOffice ou Outlook não funcionariam. O kernel também é responsável por permitir que os processos troquem informações usando o que é chamado de comunicação entre processos. Existem (em geral) três tipos de grãos:
- Kernels monolíticos: Esses kernels abrangem a CPU, memória, IPC, drivers de dispositivo, gerenciamento do sistema de arquivos e chamadas do servidor do sistema. Também é responsável por distribuir memória livre do sistema para aplicativos. Esses tipos de kernels são normalmente melhores no acesso a hardware e multitarefa.
- Microkernels: Os microkernels têm uma abordagem minimalista e gerenciam apenas a CPU, a memória e o IPC.
- Kernels híbridos: Kernels híbridos têm a capacidade de decidir o que desejam executar no modo de usuário ou no modo de kernel. Embora isso forneça o melhor dos dois mundos, exige muito mais dos fabricantes de hardware para criar drivers que sirvam para fazer a interface entre o código em execução e o hardware.
O Linux usa um kernel monolítico de código-fonte aberto, enquanto o macOS e o Windows usam Kernels híbridos. O kernel Linux foi concebido em 1991 por Linus Torvalds. Até hoje, 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 o início do rastreamento 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 do lançamento). O arquivo vmlinuz é o kernel Linux inicializável real, e o z indica que o kernel está compactado – então, em vez de vmlinux temos vmlinuz.
Nesse diretório / boot estão outros arquivos de kernel importantes, como initrd.img-VERSION, system.map-VERSION e config-VERSION (onde VERSION é um nome ou número de versão). Esses outros arquivos têm as seguintes finalidades:
- initrd: Usado como um pequeno RAMdisk que extrai e executa o arquivo de kernel real.
- 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 com eficácia os drivers necessários para se comunicar com o hardware sem consumir toda a memória do sistema. Os módulos também adicionam funcionalidades ao kernel, como comunicação com periféricos, gerenciamento de sistemas de arquivos, segurança, etc. Liste, adicione e remova módulos do kernel com os seguintes comandos:
- lsmod lista todos os módulos do kernel carregados atualmente.
- insmod carrega um módulo do kernel no kernel em execução.
- rmmod descarrega um módulo do kernel em execução.
Com a ajuda de alguns comandos simples, o kernel do Linux pode ser bastante flexível.