
Gerenciador do Kernel Linux e Monitor de Atividades 🐧💻
Gerenciador do Kernel Linux e Monitor de Atividades 🐧💻
O kernel é a parte do sistema operacional que facilita as interações entre componentes de hardware e software. Na maioria dos sistemas, ele é carregado na inicialização após o bootloader e lida com requisições de E/S, bem como periféricos como teclados, monitores, adaptadores de rede e alto-falantes. Tipicamente, o kernel é responsável por gerenciamento de memória, gerenciamento de processos, gerenciamento de dispositivos, chamadas de sistema e segurança. Aplicações usam o mecanismo de chamada de sistema para solicitar um serviço do sistema operacional e, na maioria das vezes, essa requisição é passada ao kernel usando uma biblioteca fornecida pelo sistema operacional para invocar a função do kernel relacionada. Enquanto o kernel executa essas tarefas de baixo nível, ele reside em uma parte separada da memória chamada espaço do kernel protegido, que não é acessível por aplicações ou outras partes do sistema. Em contraste, aplicações como navegadores, editores de texto, gerenciadores de janelas ou players de áudio/vídeo usam uma área separada diferente da memória, o espaço do usuário. Essa separação impede que dados do usuário e do kernel interfiram entre si, causando instabilidade e lentidão, além de evitar que programas aplicativos defeituosos derrubem todo o sistema operacional. Existem diferentes designs de kernel devido às diferentes formas de gerenciar chamadas de sistema e recursos. Por exemplo, enquanto kernels monolíticos executam todas as instruções do sistema operacional no mesmo espaço de endereço por velocidade, microkernels usam espaços diferentes para serviços de usuário e kernel por modularidade. Além desses, existem kernels híbridos, nanokernels e exokernels. A arquitetura de kernel híbrido baseia-se na combinação de aspectos de microkernel e kernels monolíticos.
O kernel Linux é o kernel de sistema operacional de código aberto, monolítico e do tipo Unix usado nas distribuições Linux, vários sistemas embarcados como roteadores e também em todos os sistemas baseados em Android. Linus Torvalds concebeu e criou o kernel Linux em 1991 e ainda hoje é desenvolvido por milhares de desenvolvedores. É um exemplo proeminente de software livre e de código aberto e é usado em outros projetos de software livre, notavelmente o sistema operacional GNU. Embora os sistemas operacionais baseados em Linux dominem a maior parte da computação, eles ainda carregam algumas das falhas de design que foram bastante debatidas nos primórdios do Linux. Por exemplo, ele tem a maior pegada e a maior complexidade em relação a outros tipos de kernel. Mas é uma característica de design que os kernels monolíticos têm inerentemente. Esse tipo de problema de design levou os desenvolvedores a adicionar novos recursos e mecanismos ao kernel Linux que outros kernels não possuem.
Ao contrário dos kernels monolíticos padrão, o kernel Linux também é modular, aceitando módulos de kernel carregáveis (LKMs) que são tipicamente usados para adicionar suporte a novos hardware (como drivers de dispositivo) e/ou sistemas de arquivos, ou para adicionar chamadas de sistema. Como os LKMs podem ser carregados e descarregados no sistema em tempo de execução, eles têm a vantagem de estender o kernel sem reinicializar e recompilar. Assim, as funcionalidades do kernel fornecidas por módulos não residem na memória sem serem usadas, e o módulo relacionado pode ser descarregado para liberar memória e outros recursos.
Os módulos de kernel carregáveis estão localizados em /lib/modules com a extensão .ko (kernel object) no Linux. Enquanto o comando lsmod pode ser usado para listar os módulos de kernel carregados, modprobe ou insmod/rmmod são usados para carregar ou descarregar um módulo de kernel. insmod/rmmod são usados para módulos independentes do modprobe e sem exigir uma instalação em /lib/modules/$(uname -r).
Aqui está um exemplo simples de um módulo de kernel Linux que imprime uma mensagem quando é carregado e descarregado. As etapas de construção e instalação do módulo usando um Makefile são mostradas abaixo.``` make # build sudo make install # install sudo modprobe lkm_example # load sudo modprobe -r lkm_example # unload
O comando [dmesg](https://linux.die.net/man/8/dmesg) é usado abaixo para recuperar o buffer de mensagens do kernel.```
[16994.295552] [+] Example kernel module loaded.
[16996.325674] [-] Example kernel module unloaded.
kmon fornece uma interface de usuário baseada em texto para gerenciar os módulos do kernel Linux e monitorar as atividades do kernel. Por gerenciar, entende-se carregar, descarregar, colocar na lista negra e mostrar as informações de um módulo. Essas atualizações nos módulos do kernel, logs sobre o hardware e outras mensagens do kernel podem ser rastreadas com o monitor de atividades em tempo real no kmon. Como o uso de diferentes ferramentas como dmesg e kmod é necessário para essas tarefas no Linux, o kmon visa reuni-las em uma única janela de terminal e facilitar o uso tanto quanto possível, mantendo a funcionalidade.
kmon é escrito em Rust e usa as bibliotecas Ratatui e termion para sua interface de usuário baseada em texto.