Micro-Kernel ou Kernel Monolítico?

Não estou aqui para criar uma discussão sobre qual dos dois paradigmas é o melhor ou qual deles deixa a desejar em algo! Provavelmente ambos possuem desvantagens e vantagens e seus defensores. Porém, esses termos por si só causam uma boa dose de dúvidas nos estudantes de Linux. Afinal, o que é um micro-kernel e kernel monolítico?

Micro-kernel, ou também chamado de microkernel, é uma designação de um Sistema Operacional que possui apenas um núcleo que provê recursos mínimos necessários ao ambiente. Outras funcionalidades são oferecidas através de programas chamados servidores, que se localizam na user-space. O Micro-Kernel basicamente provê serviços como gerenciamento do espaço de memória, gerência de threads e comunicação entre os processos (IPC – Inter-Process Communication). Serviços como rede, vídeo, são considerados não essenciais, e residem no user-space. A figura abaixo representa a interação entre os softwares que são executados sobre o sistema e sua relação com o kernel.

Representação de um Micro-Kernel

Exemplos de micro-kernel que posso citar são o Hurd e Minix. Utilizando o mesmo conceito, surgiram outras implementações, como os nanokernels e exokernels, sendo que todos utilizam o mesmo princípio minimalista.

O paradigma do Kernel Monolítico é justamente o oposto do Micro-Kernel. A principal característica do kernel monolítico é permitir que funções como rede, vídeo e acesso a outros periféricos sejam possíveis através do kernel-space. Isso é possível através do uso de módulos. O que significa que um módulo, apesar de não estar no mesmo código do kernel, é executado no espaço de memória do kernel. Sendo assim, apesar de modular, o kernel monolítico continua sendo único e centralizado. Isso pode levar a considerações errôneas sobre o conceito. Segue abaixo uma representação do kernel monolítico.

Representação de um Kernel Monol�tico

Como exemplo desse tipo de arquitetura, posso citar o Linux, BSD e alguns Windows. Em comum com a arquitetura de Micro-Kernels, o kernel define uma interface de alto nível sob o hardware do computador, com um conjunto de primitivas, ou chamadas de sistema para implementação de serviços no sistema operacional.

Há um tempo, Andrew Tanenbaum, grande professor de Sistemas Operacionais, escreveu um artigo sobre segurança e confiabilidade em ambientes críticos. Nesse artigo, descreveu que o paradigma de Micro-Kernels leva vantagem sobre o Kernel Monolítico. Linus Torvalds, grande, e esperado, defensor do Kernel Monolítico, escreveu uma resposta a esse artigo, indicando o motivo pelo qual prefere esse tipo de arquitetura. Em contrapartida, Tanenbaum escreveu uma tréplica a Linus, indicando o motivo pelo qual discorda do uso de Kernels Monolíticos, citando exemplos de sistemas operacionais que implementam, como o próprio Minix3.

Enfim, como o povo diz, se nem os “deuses” se entendem, como os pobres mortais podem acreditar em algo? 😛

Até mais! 🙂

35 comentários sobre “Micro-Kernel ou Kernel Monolítico?

  1. Avatar
    freakcode disse:

    Se não estou enganado, um bom exemplo de microkernel seria o Mach (ou XNU, usado no Mac OS X), ou então o QNX. Assim você dá um exemplo “da vida real”, com sistemas testados e aprovados, ao invés do HURD (protótipo) e Minix (defasado).

  2. Avatar
    ThigU disse:

    Ah sim, o XNU é um bom exemplo de uso de micro-kernel. Porém, o Minix hoje não anda tão defasado. A última versão do Minix (versão 3) possui a maior parte das implementações existentes em outros sistemas operacionais modernos. Ele tem sido útil para implementação em dispositivos portáteis, devido sua filosofia minimalista. Ele faz sucesso em seu nicho de mercado.

    Agora, esse QNX, eu nunca ouvi falar. Sabe algo a respeito?

  3. Avatar
    freakcode disse:

    Ah, só um adendo: o HURD é um projeto bastante “ousado”… seria o mais MICRO kernel entre os kernels citados, já que uma parte bem maior da funcionalidade procura ser colocado em daemons.

    Esse é um dos motivos pelos quais o HURD demora tanto pra ficar pronto. O segundo motivo, seriam problemas de performance para efetuar troca de mensagens entre os diversos daemons no user-space (problema inerente ao desenho do microkernel), e que fica ainda mais agravado no caso do HURD.

  4. Avatar
    freakcode disse:

    O QNX é um sistema (microkernel) que tem vários anos de estrada já… ele é usado em tarefas críticas, suas principais características são alta estabilidade e prioridade em tempo real. Ele foi inicialmente concebido para administrar usinas nucleares (!!!).

    Windows nem pensar né.

    http://www.qnx.com/

  5. Avatar
    Steel disse:

    Um outro exemplo de microkernel muito eficiente e estável é o do BeOS R5, R6beta, que apesar de não ser um núcleo tipo UNIX rigoroso, implementa a maioria das funções do sistema no userspace, um conceito semelhante ao HURD/Gnumach, o que o tornou, em sua época, um dos melhores para processamento multimídia. Além disso, estes núcleos implementam um suporte a drivers de dispositivos modulares cuja instalação ainda não tem precedentes: para se instalar um novo driver, de uma placa de som, por exemplo, basta descompactar o arquivo e movê-lo, copiá-lo para a pasta de drivers do sistema. Depois é só reiniciar o “Media Server” através de um botão no painel de controle de mídia, e bingo! tudo funciona de primeira. E isso sem executar scripts, sem permissões de ROOT, sem dar um “modprobe -a”, etc. Para a desistalação, é só apagar o respectivo driver, reiniciar o servidor e pronto.

    Apesar destes kernels estarem um pouco defasados em relação ao suporte de hardware hoje em dia, o projeto haiku tem feito muitos progressos na reconstrução de todo o Sistema BeOS, oque é muito positivo para toda a comunidade livre.

  6. Avatar
    ThigU disse:

    O Linux é um kernel monolítico sim. Porém, possuir módulos necessariamente não o torna um micro-kernel, pois o módulos são executados no kernel-space, ao contrário do que ocorre com os micro-kerneis, onde os recursos externos são executados no user-space.

  7. Avatar
    Marcel Ribeiro Dantas disse:

    Parabéns pelo artigo, ele ficou bem simples, ilustrado e com coerência passando um conteúdo de qualidade para o leitor. Apesar de tratar de um tema relativamente básico, são esses dados que fortalecem a base de um conhecimento mais avançado, e por falta de atenção nisso pessoas que se dizem grandes na área acabam fazendo confusão e falando besteira.

    Abraço,

    1. Avatar
      Costa disse:

      Meu caro Paulo Andrade de onde você tirou essa informação de que o Minix é monolítico se o prórpio desenvolvedor do Minix documenta-o como microkernel ou kernel modular?

  8. Avatar
    ThigU disse:

    Paulo,

    Pelo que pesquisei na Internet, os primeiros Windows eram monolíticos, como o Windows 98 e Windows 95, até por possuir sua base no DOS.

    Agora, não conheço a fundo o Minix, porém, de acordo com sua documentação, possui suas funções realizadas no user-space. Veja o trecho da documentação abaixo.

    “As partes que rodam no modo usuário são divididos em pequenos módulos, bem isolados de outros. Por exemplo, cada driver de dispositivos roda em um processo modo usuário separado então um bug em um driver não leva abaixo o Sistema Operacional inteiro.”
    Fonte: http://www.minix3.org/

    No link com o artigo de Tanenbaum também fica bem explícito em alguns desenhos a arquitetura do Minix, mostrando-o como um sistema de Micro-kernel.

  9. Avatar
    natan disse:

    Só pra contribuir um pouco, o “XNU, usado no Mac OS X” não é o mach, é um kernel baseado nele e não é micro-kernel, é hibrido. Os windows atuais támbem são hibridos e o minix é micro-kernel, foi monolitico e posteriormente foi todo reescrito para ser micro-kernel.

    1. Avatar
      Fernando disse:

      Concordo, o pessoal arrebentou nos comentários que chamaram mais minha atenção que o próprio artigo, que também está de parabéns. Tirei todas as minhas dúvidas.

      Muito obrigado!

  10. Avatar
    Patthy Lemos disse:

    ola!
    olhe sabe o que eu nao entendi ate agora foi esses nomes por exemplo kernel é kernel monolitico me diz eles sao á mesma é muda os nomes ou um ea versao mas atulizada do outro?
    isso tb aconteçe com os micro-kernel é micro-kernel monolitocos?

  11. Avatar
    Carlos H. M. Moreira disse:

    6 anos se passaram e o artigo ainda é muito útil, principalmente os comentários que ajudam mais ainda, obrigado por compartilhar o conhecimento!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *