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.
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.
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! 🙂
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).
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?
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.
De tanto falar no Hurd, surgiu a curiosidade para instala-lo! Acho que uma máquina virtual para isso poderia vir a calhar. 🙂
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/
Sim, o QNX é um microkernel bastante utilizado para sistemas embarcados onde o tempo de processamento é crucial. Utilizado também na industria aeronautica.
Para sistemas que precisam de performance no procesamento em tempo real, QNX é indicado.
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.
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/
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.
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.
Para quem prefere o QNX, seria interessante analisar a possibilidade de utilização do RT-Linux em seus projetos.
http://www.fsmlabs.com/
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,
Só uma resalva:
É Micro-Kernels e não Micro-Kerneis…
Parabéns pelo artigo.
…. bobagem, Micro-kerneis é o termo aportuguesado …
Parabéns pelo artigo.
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.
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?
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.
Anonymous,
Realmente achei meio “feio” escrever Micro-kerneis 😛 Vou corrigir! Valeu pela dica!
Se não me engano o Windows usa um Kernel Hibrido, alguem pode confirmar?
sim
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
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
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…
faz um artigo sobre kernel hibrido e parabens pelo artigo…
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.
Gostei muito das respostas de todos!!
to cursando Análise e desenvolvimento de Software, e me ajudou muitoo!!
obrigado
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!
Boatos que hibrido não existe. Segundo Linus torvalds. Hibrido não passa de marketing. Hibrido seria o monolitico kernel. Daria na mesma. Wikipedia -> http://en.wikipedia.org/wiki/Hybrid_kernel
logo de inicio voces verão o que linus diz.
Post bacana….
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?
6 anos se passaram e o artigo ainda é muito útil, principalmente os comentários que ajudam mais ainda, obrigado por compartilhar o conhecimento!
Obrigado. Me ajudou muito aqui 🙂
Gostei muito das discussões. Parabéns a todos, foram muito esclarecedores e o nível da conversa excelente.