Kernel Monolítico, Híbrido e microKernel

Kernel Monolítico, Híbrido e microKernel? O que isso tudo quer dizer? Quais os pontos positivos e negativos de cada um? E se o kernel Linux fosse híbrido? Estas e outras questões, aqui!


| Se você apoia nosso site, desative o AdBlock quando visitá-lo, inclusive em Mobile!
Os anúncios são poucos e não invasivos. Se quiser contribuir com nosso trabalho, clique em qualquer banner de sua preferência, exceto dos Parceiros. 
Mais detalhes clicando aqui.


Antes de mais nada, precisamos colocar os pingos nos i’s.

Recomendo a leitura desta publicação de nosso site, onde explico o que é exatamente o GNU e o Kernel Linux. Tambem recomendo a leitura desta outra postagem, onde detalhei como é o processo de boot de um sistema que executa sob Linux. Para finalizar, faça uma leitura dessa publicação, pois nela expliquei detalhes sobre o funcionamento do processador e os famigerados anéis de execução de software!

Bom, agora que você já sabe o que é um kernel, onde fica e mais explicitamente, sabe qual o papel do kernel Linux num computador, podemos continuar.

Temos basicamente 2 tipos de kerneis:

Kernel Monolítico

O Kernel Monolítico descreve a maioria dos kerneis dos sistemas baseados em UNIX.
O termo, Monolítico, vem da palavra monólito: formado de uma só pedra, que forma um só bloco.

O belo monólito que é a imagem de chamada da publicação.

Com exceção do Apple macOS, todos os demais sistemas UNIX e UNIX-like populares são Monolíticos:
FreeBSD – e seus derivados –, Oracle Solaris®, IBM AIX®, HP-UX® e todos os Linux – e seus derivados.

  • Mas qual a principal característica de um kernel monolítico?

O núcleo monolítico é uma arquitetura de núcleo onde todo o conjunto de instruções de controle do hardware é executado no espaço de núcleo no modo de supervisão, ou seja, é um único executável que possui todos os códigos de suporte necessários agregados.

O kernel monolítico se assemelha a um galho de jabuticabeira!
O galho é o kernel, as jabuticabas são os módulos.

Lembra dos posts que pedi para ler? Pois é, agora ele serão importantes. Neles expliquei onde o kernel Linux se encontra e como de fato ele é caracterizado como um executável: O GRUB o executa, que o faz iniciar o carregamento de drivers e inicializar o sistema. E uma vez executado, o kernel executa sob 1 slot da memória RAM chamado “espaço de kernel” o qual o usuário não tem acesso.

Em teoria, um kernel monolítico pode quebrar o sistema inteiro caso 1 módulo pare de funcionar adequadamente.

Kernel Híbrido

O Kernel Híbrido é utilizado nos sistemas operacionais Apple macOS, Windows 10 e MINIX, de Andrew Tanembaum, base do Linux – Conheça mais sobre a história do MINIX clicando aqui!

Ao contrário do kernel Linux, o kernel Darwin do macOS roda partes do kernel BSD e do microKernel Mach.
Enquanto isso o Windows executa 1 kernel e 2 microKerneis paralelamente no espaço de usuário: Win32 e WSL.
Diversas chamadas do Kernel NT do Windows, como o SysWOW, ocorre na camada de usuário, o que reforça a descrição de híbrido.

Mapa do núcleo Darwin do macOS

No lado Apple, núcleo Darwin é composto por utilitários de sistema e do kernel XNU, este composto dos microKerneis BSD e Mach. O BSD gerencia sistemas de arquivos, redes e outras funções POSIX, enquanto o Mach cuida de I/O e drivers (Audio e Video).

MicroKernel

O microKernel é basicamente um pequeno kernel que cuida de módulos restritos.
No exemplo da Apple, o microKernel Mach é um executável que cuida das chamadas de I/O e também dos drivers que fizerem esses acessos. Além disso cuida de áudio e vídeo. Teoricamente, se o Mach quebrar, o Darwin não vai parar de funcionar por completo.

O kernel XNU por exemplo, se enquadra como Monolitico e Hibrido ao mesmo tempo, pois utiliza o melhor das 2 tecnologias.

Diferenças?

Precisar as diferenças dentro da listagem de kerneis Híbridos atuais, seja ele um “monolítico com recursos extras” (tal qual o Linux) ou um “monolítico que opera com um microKernel ao seu lado” (tal qual o macOS) é algo controverso.

De acordo com Torvalds, a nomenclatura Híbrido é puramente marketing, já que tem sistemas que apenas utilizam um kernel Monolítico hibridizado: diversos módulos despejados no espaço de usuário em vez de utilizar espaço de kernel – tal qual o Windows faz! – enquanto que seu núcleo não é misto, basicamente a união de vários em 1.

Basicamente o kernel Monolítico comanda tudo sozinho, o microKernel delega boa parte de suas funções para outros aplicativos/servidores do espaço de usuário, enquanto que o Híbrido opera mesclando recursos do kernel monolítico e do microKernel. A imagem abaixo representa bem essa ideia:

Para ampliar, abra a imagem numa nova aba.

Vantagens

Monolítico

Em teoria, se o kernel monolítico sofrer uma pane, ou erro, o sistema inteiro vai cair, enquanto que um kernel híbrido isso não acontece.

Arte retrata como um kernel teoricamente funciona, comparado á composição de um único kernel
composto de diversos microkerneis.

Mas não é bem o que vemos na prática, já que os drivers de áudio ou mesmo o servidor gráfico XOrg podem morrer, porém o sistema não para de funcionar.

  • Como isso é possível? Se o kernel roda inteiro como 1 grande bloco, ele deveria exibir uma tela de Kernel Panic ao presenciar um erro do XOrg ou outro módulo!

Isso se deve a algumas características da filosofia de kernel adotada no Linux. Um kernel Monolítico convencional sofre dos males citados, porém o Linux não! Isso porque o pinguim é todo modular, que o permite ganhar características semelhantes ás de um kernel híbrido.

No exemplo anterior do galho de jabuticabas, é como se algumas das frutas caíssem de maduras, mas o galho vai continuar firme provendo outras tantas. Se a teoria do kernel monolítico proposto em 1992 no auge da “briga” entre Torvalds e Tanembaum fosse posto á prova hoje, era pro galho inteiro cair caso perdesse 1 jabuticaba.

Uma grande, imensa vantagem do kernel monolítico modular do Linux, é que isso permite a existência do live boot por LiveUSB ou LiveDVD! Como o kernel Linux é um bloco, mas pequeno, ele apenas inicia e agrega os módulos consigo no momento do boot. Sim, toda vez que seu sistema Linux inicia, ele carrega novamente todos os modulos – Alguns entusiastas afirmam que isso deixa o boot mais lento.

Como o kernel sempre carrega os módulos novamente em cada boot, o LiveUSB busca e carrega os módulos necessários para aquele hardware no momento do boot, deixando o sistema pronto. A exemplo do que ocorre com o Apple macOS ou Windows, migrar o disco rígido para uma máquina com as mesmas especificações causa quebra do sistema, pois ele não possui todos os módulos: O boot ocorre de forma linear com os mesmos módulos sempre.

Um outro ponto importante sobre os kerneis monolíticos: um kernel monolítico tem melhor desempenho para uso geral do que outras arquiteturas de kernel. Como tudo está centralizado no kernel, qualquer tarefa, desde que não seja necessariamente de tempo real, será mais rapidamente lida, interpretada e executada pelo núcleo.

Híbrido e MicroKernel

Dentro do kernel híbrido e do microKernel, a maior vantagem é a segurança e a estabilidade.

Isso se deve pois o kernel sozinho não lida com todos os recursos do sistema permitindo que uma determinada área afetada por um malware por exemplo, possa ser isolada do restante. Basicamente o microKernel permite que o kernel seja modular; Se considerarmos cada microKernel como o conjunto de um maior, você pode dar manutenção em tempo real no kernel sem precisar reiniciá-lo!

Claro, esse recurso deixou de ser exclusividade no kernel Linux desde a versão 4.0 quando a Red Hat desenvolveu o módulo de Live Patch. Ele “segura” o sistema no ar enquanto faz a manutenção e substituição dos módulos do sistema na troca de kernel, sem precisar reiniciar o servidor para isso!

Desvantagens

Monolítico

O pinguim é péssimo lidando com áudio. Não, não estou falando de quando você ouve suas músicas no Youtube. O Linux tem um péssimo gerenciamento de áudio. Apesar dos módulos de áudio serem modulares e agregados ao kernel, eles consomem recursos e isso atrapalha sistemas de produção acústica de alto nível.

Exemplo? Você pode pegar o Ubuntu Studio, colocar o kernel Linux modificado Liquorix e compilar com todos os recursos RealTime; O desempenho de qualquer editor de áudio nele ainda será sempre inferior se comparado a qualquer programa editor de áudio encontrado no macOS, que possui um microKernel dedicado a áudio: O coreaudio!

O fato do kernel Linux ser monolítico atrapalha no processo de áudio, que deveria ser real time sem qualquer “empecilho” no caminho; E o Linux, nesse ponto, gera uma rota “suja” que pode causar delays captados por aparelhos de altíssima precisão acústica, de nível profissional, que sejam utilizados no pinguim.

Mas lembrando: O problema maior é na edição e captação de áudio profissional, que consome banda de processamento e exige mais do kernel. Para reprodução comum de áudio ele “segura o tranco”

E no vídeo?
Em vídeos o sistema sabe lidar bem, mas a premissa se mantém: Se você editar vídeos com nível profissional e/ou tentar usar programas mais profissionais poderá presenciar latência de vídeo devido ás naturais barreiras do kernel Linux.

Outro ponto negativo é a manutenção da sua programação, que é mais demorada, pois o kernel deve ser recompilado e substituído por completo sempre. – Note o tempo que demora para lançar uma nova versão do kernel Linux!

Comparando o kernel Linux, monolítico e modular, contra outros monolíticos comuns, temos uma desvantagem a mais: é que ele pode apresentar desempenho menor se comparado ao monolítico puro (mesmo não de forma drástica) devido o kernel ter que requisitar os módulos externamente (estando dentro do kernel, a ação é mais rápida).
O último ponto considerado desvantajoso é a parte de segurança, o modular pode apresentar vulnerabilidades desde que ataques podem (talvez) ser explorados e realizados através de seus módulos. Os módulos podem se tornar alvos passiveis de ataques uma vez estando fora do kernel.

Híbrido e MicroKernel

O problema de um kernel híbrido é o delay, a lentidão entre os módulos e processos que se comunicarem entre 2 ou mais microKerneis.

A desvantagem dessa abordagem é a sobrecarga inescapável de todo o IPC. Se o seu programa deseja carregar dados de um arquivo, ele precisa perguntar ao driver do sistema de arquivos, o que significa IPC para esse processo, uma alternância de contexto de processo e duas transições de anel de execução.

Em seguida, o driver do sistema de arquivos solicita ao kernel que converse com o hardware, o que significa duas transições de anel. Então, o driver do sistema de arquivos envia sua resposta, o que significa mais IPC e duas transições de anel e outra alternância de contexto. Sobrecarga total: dois comutadores de contexto, duas chamadas de IPC e seis transições de anel.

Caso a implementação do microKernel seja mal planejada ou mal implementada, causará uma lentidão no sistema até para tarefas mais simples.

Soma-se isso, ao fato de que nativamente seu desempenho é relativamente menor, pois o kernel tem que comunicar-se com os módulos que são chamados de “servidores”, como por exemplo o serviço de impressão, via mensagens (calls), e isto vai exigir um hardware mais robusto devido ao processamento extra.

Conclusão

Você deve estar se perguntando: E aí? Qual a melhor implementação de kernel?
Monolítico? Híbrido? microKernel?

Depende da aplicação. Aplicações em tempo real de alta segurança de nível militar, como sondas espaciais, usam kerneis que dispõe desse recurso nativamente, como é o caso dos microKerneis, que, outroram fossem de baixo desempenho, sempre ofertaram maior segurança e estabilidade. Hoje, consegue suprir todos estes requisitos.

Sistemas operacionais servidores de alto desempenho fazem bom uso do Linux sendo monolítico e modular, devido a praticidade e ao alto desempenho, que outrora representou uma queda na qualidade da segurança ou mesmo estabilidade. Hoje, consegue suprir todos estes requisitos.

Não existe o melhor, nem o pior.

Hoje o Linux é diferente do Linux da discussão acalorada de Torvalds com Tanembaum em 1992 e é diferente da polêmica de 2006. O pinguim está maduro, tão modular quanto o MINIX original e tão estável e seguro quanto o UNIX.

Da mesma forma a Apple fez um grande trabalho com o desempenho do seu kernel híbrido, em somatória do uso do Mach e do BSD, provando que a teórica lentidão de outros tempos não existe mais. Até a Microsoft se beneficiou das evoluções ao hibridizar seu kernel NT – não necessariamente microKernel – que originalmente era monolítico também.

Portanto essa briga de qual o melhor kernel por arquitetura é apenas mera questão de gosto.

#UrbanCompassPony

Referências Bibliográficas:
RealWorldTech: Torvalds Says “hybrid is just marketing”
Channel 9 WSL and Ubuntu
StackOverflow: Terminologia
TocaDoTux: Diferentes Kernels
Viva o Linux: O Kernel Linux
Viva o Linux: Kernel Monolitico
Finnel 2000, Capítulo 1: Introduction to Microsoft Windows 2000, página 7–18.
Ferreira, Rubem E. Editora: Novatec. Linux: Guia do Administrador do Sistema. 2008. São Paulo

 

5 comentários em “Kernel Monolítico, Híbrido e microKernel”

  1. Cara que conteúdo foda…. mas me tire uma duvida!!

    Irei citar um cenário em que um usuário tem acesso diretamente ao núcleo que pode alterar valores binários, qual seria o melhor para dificultar essa falha ou então isolar?

    Todo esse contexto que estou citando é um problema que temos com os hacker de jogos que atualmente estão trabalhando diretamente no kernel para manipulação de valores binário.

    Você teria alguma ideia de solução?

    Responder
    • Agradeço o carinho! Seguinte, o tipo do kernel pode ajudar a solucionar problemas de segurança, porém é algo teórico e não-prático. Por que? O kernel Windows é hibrido simplesmente por possuir partes do XP dentro do 10; a base do W10 é puramente monolítica, tal qual possui a mesma logística do Linux. O kernel do MacOS é hibrido por apenas dividir partes, como filesystem em um lado, enquanto controladores de chipset e CPU ficam do outro… O debate é antigo mas no fim não há um consenso de qual o melhor, apenas meios diferentes de fazer a mesma coisa. Voltando á dúvida, como isolar o kernel com segurança? Eu te sugiro que pesquise a respeito do trabalho fantástico sobre o projeto OSTree, que busca solidificar a segurança do kernel colocando-o como somente leitura, de um modo que updates e modificações só podem ser feitas reiniciando a máquina.

      Responder
  2. Conhece o Qubes OS? Um sistema operacional que tem como “núcleo” principal o software xen para promover as aplicações como artefatos virtualizados (ou DomUs). As AppVMs são extensões de templateVMs, onde estas rodam em modo offline e aquelas em espaço de usuário, sem abrir possibilidade de o usuário (e atacante) conseguir gravar no template, que contém as aplicações instaladas. Apesar de todos os artefatos dessa metodologia explicada serem baseados em kernel monolítico, a segurança promovida através do método de execução é fantástica.

    Grande abraço e ótimo artigo!

    Responder

Deixe um comentário