Skip to content
22/07/2007 / Thiago

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!🙂

26 Comentários

Deixe um comentário
  1. freakcode / jul 22 2007 22:01

    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. ThigU / jul 22 2007 22:06

    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. freakcode / jul 22 2007 22:07

    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. ThigU / jul 22 2007 22:10

    De tanto falar no Hurd, surgiu a curiosidade para instala-lo! Acho que uma máquina virtual para isso poderia vir a calhar.🙂

  5. freakcode / jul 23 2007 1:12

    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/

  6. PopolonY2k / jul 23 2007 9:55

    Sim, o QNX é um microkernel bastante utilizado para sistemas embarcados onde o tempo de processamento é crucial. Utilizado também na industria aeronautica.

  7. PopolonY2k / jul 23 2007 9:57

    Para sistemas que precisam de performance no procesamento em tempo real, QNX é indicado.

  8. Steel / jul 23 2007 10:25

    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.

  9. GCR / jul 23 2007 11:17

    Além do QNX, um exemplo legal de sistema baseado em micro-kernel que é amplamente utilizado na vida real é o Symbian, usado no mercado de celulares.

    http://www.symbian.com/

  10. nomadsoul / jul 23 2007 12:00

    Linux é kernel monolítico ,mas absorvendo conceitos de microkernel, como por exemplo os modulos. Pelo menos é o que leio por ai e me parece verdade.

  11. ThigU / jul 23 2007 12:07

    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.

  12. PopolonY2k / jul 23 2007 13:43

    Para quem prefere o QNX, seria interessante analisar a possibilidade de utilização do RT-Linux em seus projetos.

    http://www.fsmlabs.com/

  13. Marcel Ribeiro Dantas / jul 23 2007 20:52

    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,

  14. Anonymous / jul 23 2007 23:13

    Só uma resalva:
    É Micro-Kernels e não Micro-Kerneis…

    Parabéns pelo artigo.

  15. Paulo Andrade / jul 24 2007 8:13

    Que eu saiba somente o dos era monolítico, nenhum outro da microsoft é, sendo micro-kernel todos os windows nt.

    Outra coisa, o minix não é micro-kernel é sim monolitico.

    • Costa / abr 16 2010 13:58

      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?

  16. ThigU / jul 24 2007 9:18

    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.

  17. ThigU / jul 24 2007 9:19

    Anonymous,

    Realmente achei meio “feio” escrever Micro-kerneis😛 Vou corrigir! Valeu pela dica!

  18. anonymous / jul 24 2007 9:22

    Se não me engano o Windows usa um Kernel Hibrido, alguem pode confirmar?

  19. ThigU / jul 24 2007 9:30

    anonymous,

    De acordo com documentação da Wikipedia, os Windows baseados no NT são híbridos.

    Fonte: http://en.wikipedia.org/wiki/Hybrid_kernel#NT_kernel

  20. ThigU / jul 29 2007 23:10

    Notícia recente enviada para o BR-Linux.org adiciona uma característica ao kernel Linux que pode defini-lo como híbrido, afinal, será possível o uso de drivers residentes no espaço de memória do usuário (user-space). Segue abaixo o link com notícia.

    Fonte: http://br-linux.org/linux/kernel-linux-passara-a-ter-api-estavel-para-drivers-no-userspace

  21. Alan Victor Bariani / mar 25 2009 16:08

    Citaram o MAC OS X como exemplo de micro kernel, mas na verdade, ele é baseado no MACH, que é hibrido. Grande parte dele está nos daemons, mas como roda algumas coisas em kernel space, ele ainda é considerado hibrido…

  22. Francisco Pedro da Costa Filho / abr 24 2009 19:54

    faz um artigo sobre kernel hibrido e parabens pelo artigo…

  23. natan / maio 21 2009 17:53

    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.

  24. thiago vidal / set 26 2010 19:17

    Gostei muito das respostas de todos!!
    to cursando Análise e desenvolvimento de Software, e me ajudou muitoo!!
    obrigado

Trackbacks

  1. Top Posts « WordPress.com

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: