Loading AI tools
Da Wikipédia, a enciclopédia livre
Em computação, um módulo carregável do núcleo, do inglês loadable kernel module (ou LKM), é um arquivo objeto que contém código para estender o núcleo em execução, ou o chamado núcleo base, de um sistema operacional. Os LKMs são normalmente usados para adicionar suporte para novos hardwares (como controladores de dispositivos) e/ou sistemas de arquivos, ou para adicionar chamadas de sistema. Quando a funcionalidade fornecida por um LKM não for mais necessária, ela pode ser descarregada com o objetivo de liberar memória e outros recursos.[1]
A maioria dos sistemas tipo Unix e Microsoft Windows atuais suportam módulos carregáveis do núcleo, apesar de poderem usar um nome diferente para eles, como kernel loadable module (kld) no FreeBSD, kernel extension (kext) no OS X,[2] kernel extension module no AIX, kernel-mode driver no Windows NT[3] e downloadable kernel module (DKM) no VxWorks. Eles também são conhecidos como Módulos do Núcleo ou Kernel Modules (KMOD).
Sem módulos carregáveis do núcleo, um sistema operacional teria de incluir todos as possíveis funcionalidades antecipadamente e já compiladas diretamente no núcleo base. Muitas dessas funcionalidades iria residir na memória sem serem utilizados, desperdiçando memória, e exigiria que os usuários reconstruíssem e reiniciassem o núcleo base toda vez que necessitassem de novas funcionalidades. A maioria dos sistemas operacionais que suportam os módulos carregáveis do núcleo incluirão módulos para suportar as funcionalidades mais desejadas.
Uma crítica menor de preferir um núcleo modular sobre um núcleo estático é a chamada penalidade de fragmentação. O núcleo base é sempre descompactado na memória contígua real por suas rotinas de configuração, desta forma, o código do núcleo base nunca é fragmentado. Uma vez que o sistema está em um estado em que os módulos podem ser inseridos, por exemplo uma vez que os sistemas de arquivos foram montados que contêm os módulos, é provável que qualquer nova inserção de código de núcleo fará com que o núcleo se torne fragmentado, introduzindo assim uma pequena penalidade de desempenho por meio do uso de mais entradas TLB, causando mais acidentes TLB.
Sem os módulos carregáveis do núcleo, as distribuições Linux teriam que incluir nos núcleos todos as funcionalidades possíveis, adicionando este código antecipadamente na imagem do núcleo distribuído. Esta abordagem, além de gerar grandes imagens do núcleo, faria com que o usuário tivesse que recompilar o núcleo toda vez que uma nova funcionalidade fosse necessária.
Não há restrição técnica sobre em que local da hierarquia de arquivos os módulos devem ser colocados, porém, por convenção, eles são usualmente instalados no diretório /lib/modules/
, que é dividido em subdiretórios de versões do núcleo e categorias de módulos.[1]
Na opinião dos mantenedores do Linux, os módulos são trabalho derivado deste núcleo. Os mantenedores toleram a distribuição de módulos proprietários mas fazem com que os símbolos sejam disponíveis apenas para os módulos que adotem a licença GPL.
Carregar um módulo proprietário irá "contaminar" o núcleo sendo executado, levando a que quaisquer problemas ou defeitos encontrados não sejam investigados pelos mantenedores. Como o módulo é parte do núcleo sendo executado, eles podem corromper estruturas de dados ou introduzir erros que não podem ser investigados devido à natureza proprietária do módulo em questão.
Devido ao íntimo relacionamento entre os módulos carregáveis e o núcleo base, diferenças relativamente pequenas nas estruturas internas ou métodos podem resultar em problemas. Para mitigar este problema, inclui-se versões dos símbolos na seção .modinfo do ELF dos módulos.
A versão pode ser comparada com o núcleo sendo executado e, se incompatível, o módulo não será carregado.
Uma crítica em relação a utilização dos módulos, reside no fato que a memória de um núcleo que suporta módulos carregáveis é fragmentada, ao contrário da abordagem estática (todas as funcionalidades compiladas no núcleo) em que a memória é contígua. Esta fragmentação levaria a uma pequena diminuição no desempenho do núcleo.
Módulos carregáveis são um modo conveniente de modificar o núcleo, o problema é que, em tese pelo menos, isto poderia ser utilizado por um usuário mal intencionado, que poderia fazer o sistema ignorar os seus processos e arquivos, permitindo que ele tomasse o controle total do sistema.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.