Será que não seria melhor ter um kernel 100% modular?

Isto sem ter que recompilar para inserir um suporte a um hardware específico.
Simplesmente colocando um arquivo numa pasta, ou tirando ele dela.
Acredito que assim o kernel ia ser muito pequeno e rápido.
Algo no estilo do minix.
O que acham dessa idéia?
É viável?
É “fácil” de implementar?
Alguém já viu algo parecido?

1 curtida

Vc descreveu o Linux.

2 curtidas

Olá @psctec, tudo bem contigo?

O kernel Linux em muitos cenários já opera dessa forma há anos, você pode conferir neste exemplo de instalação do driver de um adaptador bluetooth. O que precisamos ter em mente é que um kernel precisa lidar com muitas variáveis e situações diferentes. Sendo que muitas vezes, o seu comportamento será influenciado pelo periférico ou equipamento que está sendo instalado.

Não existe “um jeito certo” ou “jeito mais fácil” para todos os casos possíveis.

:vulcan_salute:

2 curtidas

O Linux já tem um esquema de módulos. Não é no mesmo estilo do Minix e outros microkernels (um “pedaço” de kernel é adicionado em tempo real, em vez de ser um programa como qualquer outro), mas já é possível instalar um driver sem sequer reiniciar usando, por exemplo, o DKMS ou o programa insmod.

Inclusive, na maioria das distros, apenas os drivers de vídeo e armazenamento genéricos são “compilados”, o resto vai carregado como módulo.

4 curtidas

Mais ou menos.
É que os novos kerneis vem lotados de driver’s que nem utilizamos, ou nem vamos utilizar nunca na vida.
E estão virando um monolito.

É mais ou menos.
O kernel está vindo com milhares de coisas já pré instaladas.
Compilar é algo alienígena pra mim, olha que já tentei.

Então, o microkernel não tem a performance melhor?

Não sei qual é o seu nível de proficiência em programação, mas, compilar o kernel de um sistema operacional não é de maneira alguma algo trivial. Quando você chegar em um ponto que acha trivial, é porque você já avançou muito no seu conhecimento de estrutura de sistemas operacionais.

Isso faz pouco ou nenhuma diferença para sistemas desktop, os módulos que seu hardware não utiliza não são carregados na memória. E os que são, geralmente são módulos genéricos apenas para assegurar o funcionamento na maior quantidade de máquinas possível.

Se você olhar para exemplos de IoT, existem dezenas de construções do kernel Linux que se assemelham a um “micro-kernel”. O objetivo na maioria das vezes é economizar espaço e otimizar para hardwares específicos, o ganho de desempenho costuma ser marginal.

Temos vários tópicos sobre kernel aqui no fórum, sugiro que utilize a ferramenta de pesquisa e leia algumas das discussões. Pode te acrescentar alguns conhecimentos interessantes.

:vulcan_salute:

1 curtida

Uai, como nos, você quer dizer você porque com 8 bilhões de pessoas no mundo como você sabe que ninguém vai usar um drive?
Não queira que o desenvolvimento do kernel seja exclusivamente ao seu interesse, ele é feito para ser de múltiplo propósito e genérico justamente para servir o maior numero de pessoas no mundo.
A razão dele ser modular é para ele satisfazer o seu desejo, mas você não deveria querer que o desenvolvimento dele seja exclusivamente para o seu hardware excluindo todos os outros drivers do código fonte.

Se você não quer baixar o código fonte pq acha grande, você pode baixar o patch e aplica-lo no código fonte de outra versão.

Mesmo que o Linux virasse um microkernel, devido à quantidade insana de drivers, a maioria deles muito pequenos, dificilmente as distros fariam o esforço de separar os drivers em pacotinhos individuais. Tanto que isso é tecnicamente possível atualmente, mas não é feito.

Em algo tão fundamental quanto o reconhecimento de hardware, preferem pecar pelo excesso e garantir que o mínimo de pessoas vai ter que selecionar drivers por fora.


Também veja se ninguém já empacotou o driver específico que você busca no esquema DKMS. Com ele, o driver é compilado e instalado pra você.


Não. Talvez use um pouco menos de memória, mas é uma “escovação de bits” em comparação com os MB (para não dizer GB) de RAM atuais.

(Fora que um microkernel “senso estrito” como o Minix quase que necessariamente vai ter uma performance menor, devido a context switching).

1 curtida

Esta é a diferença do Windows/Linux para o MacOS, eles tem uma enorme possibilidades de hardwares para cobrir, enquanto no MacOS só tem algumas variantes.

Nem isso, porque você pode compilar os drivers em modelos o que só ocuparão espaço de memória os que forem carregados e os que não é o mesmo de não existirem.

Esses drivers simplesmente não serão carregados.

1 curtida

Isso é um equívoco muito comum. Microkernels são na verdade mais lentos. Componentes isolados não devem e não podem acessar e manipular a memória uns dos outros diretamente, isso resulta inevitavelmente em operações extras, para copiar informação de um lado para o outro, forçar a CPU a esquecer o conteúdo de um, para receber o conteúdo do outro, etc.

Obviamente um kernel monolítico não tem nada disso, o kernel inteiro tem acesso a tudo e todos sem precisar trocar de contexto, nem copiar memória de lá para cá, apenas fazendo tais coisas quando necessário por outros motivos.

Outra questão importante é que as pessoas confundem (muito…) velocidade com previsibilidade. É um engano comum pelo fato de a maioria dos kernels real-time serem microkernels, mas esta combinação nada tem a ver com velocidade.

5 curtidas

Não quis dizer isso.
Mas acredito que tem drivers não utilizados pela maioria.
Estava equivocado quanto ao microkernel e me deram outra visão.
Não disse nada sobre ser modular para me agradar, a ideia era por em debate. E para que ficasse enxuto e mais rápido, mais fácil de instalar drivers, essa era a ideia.
Nem tão pouco falei que não queria baixar o fonte.

Esses drivers simplesmente não serão carregados se você não tiver o hardware. A diferença de desempenho entre tê-los ou não compilados no kernel é zero.

Você não vai ter ganho algum de velocidade e vai economizar alguns megabytes apenas.

Entendi.
Só não explicou como instalar um driver de forma mais fácil.
Se vem com o instalador é moleza, ter que compilar já é meio avançado.
Recompilar o kernel já é alienígena, rss

Qual foi a última vez em que você precisou instalar um driver de forma manual? Até os drivers da nVidia e do VirtualBox (que são os únicos casos nos quais eu consigo pensar) estão empacotados pela maioria das distros.

Então, tenho um caso o driver do leitor de digital.
Que é de forma manual.

Talvez você so esteja usando um Linux LTS, vai ver que o driver esta no 6.5, qual o modelo do seu? é esse?

Procura que tem jeito de instalar versões recém lançadas do Linux no Ubuntu sem ter que compilar.

https://kernel.ubuntu.com/~kernel-ppa/mainline/
Vai no final e baixa o 6.5 deb de todos os módulos tmb.