Os 5 diferentes modelos de kernels

/* observação: não estou defendendo qual modelo é melhor ou não. Estou simplesmente demonstrando neste artigo as características de cada um dos modelos de kernel. */




 Tratando do assunto sobre o sistema operacional Linux (ou como já mencionei no título do meu canal, não entro em debate caso queira chamá-lo de GNU/Linux ou não; isso é uma coisa individual), precisamos antes analisar um pouco a anatomia de um sistema.
Um sistema operacional é um conjunto de software, cada item construído para um propósito especifico. Dividindo o sistema em partes e sem entrar em detalhes, temos o kernel, as bibliotecas do sistema, as ferramentas do sistema e as ferramentes de desenvolvimento. Todas as demais ferramentas que utilizamos no dia a dia são construídas com base nessas.
E como já é notório a todos que Linux é o núcleo (kernel) do sistema, vamos tratar aqui somente desta parte.
 O kernel possui quatro responsabilidades básicas:
  • Gerenciamento de dispositivos
  • Gerenciamento de memória
  • Gerenciamento de processos
  • Manipular as chamadas do sistema
É o que o núcleo do sistema operacional é encarregado de realizar; gerenciamento de comunicações entre dispositivos e software, gerencia os recursos do sistema e etc...

Dentro do assunto kernel, temos quatro modelos diferentes entre eles: O monolítico, o microkernel, o nanokernel e o exokernel.


Kernel monolítico:

Também por vezes escutei sendo chamado de monobloco ou estático. É o modelo em que a maioria de seus recursos são executados pelo próprio kernel no kernel space (espaço reservado para carregar o kernel e para que o kernel realize suas funções).


Exemplos de sistemas operacionais kernel monolítico:
(FreeDOS)

  • Mac OS nas versões abaixo do 8.6 [possuo uma cópia do Mac OS 8.5. Na época, o Macbook preto usava dispositivo drive de disquete removível para conectar o drive de CD (no mesmo local)].

Kernel Monolítico e modular

O Linux possui a característica de ser tanto monolítico e modular. Ambos possuem (digamos) vantagens e desvantagens; o ponto positivo do monolítico é que ele proporciona melhor segurança e melhor desempenho devido seus recursos residirem dentro do próprio kernel (built-in); porém, por esse fato, seus recursos (mesmo que não sejam necessários em algumas circunstancias) estarão sempre em execução do momento em que ligar o computador até o momento que desligá-lo, consumindo assim recurso do hardware. Isso em um PC hoje em dia, onde pode-se possuir processadores com 8 núlceos, em torno de 8 Gigabytes de RAM, placas mães monstruosas com barramentos de 1333 pode até não parecer incomodo; mas em um servidor isso ainda é uma boa prática a ser mantida.

(verificando a quanto tempo o computador com o comando uptime)

O modular, desde que seus módulos são carregáveis (LKM: Loadable Kernel Modules), proporciona a vantagem de executar somente o que for necessário. Isso mantem um kernel mais enxuto e faz com que mantenha os recursos computacionais o mais livre possível (como uso de memória e de processamento) caso não haja necessidade de utilizá-los. Ele permite ao usuário carregar e descarregar os módulos dinamicamente da memória com o sistema em execução utilizando o comando modprob:
(removendo três módulos que não estão sendo utilizandos)

 É possível listar os módulos carregados com o comando lsmod:


 Com o modinfo obtém-se informação sobre o módulo em questão:

 O lado considerado desvantajoso do modular é que ele pode apresentar desempenho menor se comparado ao monolítico (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 segundo ponto considerado desvantajoso é a parte de segurança, o modular pode apresentar vulnerabilidade 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.
Algo parecido com isso em um sistema são as bibliotecas. Bibliotecas podem ser dividias em três tipos: Bibliotecas estáticas, compartilhadas e dinamicamente carregáveis (ou simplesmente dinâmicas).



(Exibindo as informações e dependências do speedt)

[Exibindo as informações do programa papyrus, onde através dos comandos file e ldd (o mesmo comando usado acima para verificar as dependências dos comandos ls e speedt) é possível notar que é um programa em que suas bibliotecas são estáticas (bibliotecas residem dentro do próprio programa)]
 Somente para ficar fixo na mente, vou usar então as bibliotecas estáticas para compará-las com o kernel monolítico e as dinâmicas para compará-las com o kernel modular. As bibliotecas estáticas são bibliotecas estáticas são bibliotecas que são instaladas nos programas antes que possam ser executados, ou seja, residem dentro do programa. Já as bibliotecas dinâmicas são carregadas e utilizadas a qualquer momento enquanto o programa estiver em execução.
A escolha em que se determina se quais recursos serão inclusos no kernel Linux ou modularizados é feita durante o processo de configuração para compilá-lo e instalá-lo.

(informações de escolha do kernel na parte superior do painel de configuração do kernel)



Obs.: Não confundir com sistema operacional modular (microkernel).


Microkernel (micro-núcleo em português) ou Client-Serevr:

É um núcleo minusculo que trabalha somente com o mínimo de processos possíveis, essenciais para manter o sistema em funcionamento, executando-os no kernel space. Todos os demais processos são executados  por daemons conhecidas como servidores de forma isolada e protegidos no user space.


 O sistema fica dividido mais ou menos assim: Servidor I/O , servidor de memória, servidor de gerenciamento de processos, servidor de sistema de arquivos, servidor de device drivers e etc. Esses servidores se comunicam com o microkernel; o sistema monitora continuamente cada um destes processos e se uma falha for detectada, ele substitui automaticamente este processo defeituoso sem reiniciar a máquina (reboot), sem perturbar os outros processos em execução e, principalmente, sem que o usuário perceba.

(visão geral de um microkernel)

A ideia surgiu na década de 80 onde visavam trabalhar em um kernel que fosse mais seguro, mais estável, mais funcional do que o modelo monolítico e considerando o modelo monolítico obsoleto.
Em que sentido? Explicam que o modelo monolítico possui a desvantagem de que uma pane no kernel pode causar uma pane no sistema inteiro, enquanto no modelo microkernel, se uma pane ocorrer, ainda é possível evitar uma pane no sistema inteiro bastando reiniciar o serviço que causou tal pane.


Exemplo de sistemas operacionais microkernel:


  • Minix quase todos nós que conhecemos Linux conhece esse sistema. Ele é voltado a didática, para quem quer conhecer como um sistema operacional funciona realmente. Pode-se dessecá-lo e analisá-lo. Não tenho criticas ao sistema desde que essa é a intenção do sistema. Linus mesmo afirma na página 87 do Livro “Só por prazer” que Andrew o truncou de propósito, de forma ruim para que estudantes pudessem descobrir os erros por conta própria.
  • Hurd é o microkernel do sistema GNU que vem sido desenvolvido desde 1.990. Ainda não está pronto e nem há previsão para a sua versão estável. É... sim, GNU é um sistema operacional desenvolvido pelo Free Software Foundation. Já vi discussões em que afirmam que GNU não é um sistema e sim um projeto. Tudo por causa da imagem abaixo.


Mas veja o texto abaixo sobre o GNU extraído do próprio website do projeto em https://www.gnu.org/#More-GNU:

More about GNU

GNU is a Unix-like operating system. That means it is a collection of many programs: applications, libraries, developer tools, even games. The development of GNU, started in January 1984, is known as the GNU Project. Many of the programs in GNU are released under the auspices of the GNU Project; those we call GNU packages.
The name “GNU” is a recursive acronym for “GNU's Not Unix.”“GNU” is pronounced g'noo, as one syllable, like saying “grew” but replacing the r with n.
The program in a Unix-like system that allocates machine resources and talk to the hardware is called the “kernel”. GNU is typically used with a kernel called Linux. This combination is theGNU/Linux operating system. GNU/Linux is used by millions, though many call it “Linux” by mistake.
GNU's own kernel, The Hurd, was started in 1990 (before Linux was started). Volunteers continue developing the Hurd because it is an interesting technical project.



  • QNX
  • HelenOS dentre o tais, esse é o que eu mais gosto. Surgiu na universidade da Charles, localizada em Praga, capital da republica Tcheca (na mesma cidade onde Jan Hus, evangelista que foi queimado vivo pela igreja catolica). Baseado no microkernel SPARTAN, escrito por Jakub Jermář, é um sistema operacional microkernel POSIX-similar projetado do zero, de código aberto, multiservidores (daemons que separam e isolam tarefas no user space como:Naming service, VFS, file system drivers, Location service,device drivers, network layers, graphics stack layers, etc); feito para propósito geral. É utilizado como uma plataforma para aprendizado escolar no curso de sistemas operacionais, como hobby, mas também visam mais duas coisas, que seriam criar um sistema operacional totalmente utilizável em algumas tarefas do dia a dia (como servidor, PDA ou desktop) e a outra seria se divertir. Ele não é um UNIX-like como pode ser lido nessa link http://trac.helenos.org/wiki/DiffFromUnix. Eu gosto da ideia da comunidade não ter desavença com a comunidade Linux.

  • L4 É um microkernel escrito do zero, foi criado visando a melhoria de desempenho dos sistemas microkernel. Existem alguns sistemas baseados nesse microkernel; até mesmo um port do Linux para a API do L4 µ-kernel, chamado L4Linux. Existem também algumas implementações desse microkernel, o Code Zero (https://github.com/jserv/codezero) foi o primeiro que eu conheci dessa família.
  • F9 inspirado na família L4.
  • MonaOS é um sistema operacional livre que possui micro kernel pequeno (kernel do tamando de 132KB), novo e rápido; escrito em C++. O sistema não é nem POSIX nem um clone Windows. Está sob a licença MIT e roda em processadores Intel IA32.
  • mikro-SINA desenvolvido na Alemanha e descontinuado em 2004.
  • TUDOS
Quer saber mais sobre Microkernel? Siga o link: http://microkernel.info/

Kernel monolitico X microkernel

Muita se tem discutido sobre o assunto quando o assunto é kernel monolítico ou microkernel. Do lado do microkernel alegam que o modelo monolítico é obsoleto, possui desvantagens de ser vulnerável, não ser portável, seu código fonte pode se tornar enorme e ter menor desempenho. Mas essas afirmações ainda ficam como teoria. Na prática, é difícil afirmar que isso é fato.
Houve até mesmo uma discussão travada Linus e Adrew sobre o assunto. Até o Ken Tompson participou do debate afirmando que é mais fácil implementação do modelo monolítico. Linus concorda que o microkernel é melhor, e que de um ponto de vista teórico e estético o Linux perde, porém afirma também que o fato de ser microkernel não é o único critério a se analisar um bom sistema. Discute até mesmo na questão da portabilidade.

Sistemas operacionais que possuem kernel hibrido:

Existe ainda os sistemas entre meio termo, os sistemas que possuem kernel hibrido. A ideia é que se obtenha o desempenho do kernel monolítico e a estabilidade e segurança do microkernel. Linus Torvalds tem dito que a questão de kernel hidrido, como a coisa toda, é apenas markting.

 Dentre os sistemas de kernel hibrido, cito os de meu conhecimento:
  • Mac OSX: Esse foi o primeiro sistema kernel hibrido que conheci. Seu kernel Darwin, é uma hibridação do microkernel Mach e do kernel monolítico FreeBSD. Antigamente seu kernel era chamado de XUN (uma hibridação do 4.3BSD com o Mach 2.5) quando a Next, empresa que Steve jobs fundou ao ser demitido da Apple possuía o sistema NextStep. Depois, quando a Apple estava chegando à falência, decidiu inovar em uma ultima tentativa. Compram a Next (para obter o NextStep, por que o Mac Os já estava uma m... Era mais fácil comprar um do que escrever outro do zero) aí uniram o Next com a interface do Mac OS.
  • Haiku Esse eu sei que é desenvolvido por antigos desenvolvedores do BeOs, mas a informação real de que ele é um sistema de kernel hibrido foi difícil de encontrar. So vi treta no site do sistema e desencanei de pesquisar.
  • Plan9 Esse é um sistema voltados a pesquisa. Foi desenvolvido por Ken Thompson, criador do Unix e da linguagem C (na época B), Rob Pike, Dave Presotto, and Phil Winterbottom. É um sistema em que cada processo é executado em seu próprio name space mutável.

  • DragonflyBSD Esse foi considerado o primeiro sistema operacional non-Mach que se possui o kernel hibrido no livro da Wikipedia.


 Mas em um post no grupo oficial do sistema em uma rede social, eu encontrei a informação de que ele é na verdade monolítico. O que me fez pesquisar melhor sobre o sistema.



foi então onde entrei em contato com Matt Dillon e ele me afirmou o Dragonfly é tão monolítico quando o kernel Linux e o kernel FreeBSD:


O que o DragonflyBSD faz é gerar o kernel real gera um kernel virtual e trata o processo dentro de uma vmspace. Quando o vkernel termina o processo, o kernel real destrói o vmspace com o processo e o vkernel.

 O NT kernel (utilizado no Windows NT, 2000, XP, Vista e Windows 7) é um kernel hibrido. Francamente? Achei muito difícil conseguir informações deste tipo sobre o Windows. Por fim só consegui alguma informação sobre o kernel NT no web site do ReactOS [se alguém tiver alguma informação, posta aí :) ]:

https://www.reactos.org/wiki/Kernel

Bom, existe muitos e muitos sistemas no mundo por aí, mas isso é uma questão de pesquisas a serem realizadas. Incentivo a todos a fazerem isso para aprofundarem seus conhecimentos.
Não deixem de se inscrever no canal para continuar acompanhando. Dê seu like e compartilhe se gostou das informações. Tem algo para conhecimento a acrescentar? compartilhe aqui nos comentários. Vale lembrar que inscritos no blog tem direito a 5% de desconto na LyTux (tanto para cursos quanto para consultoria em serviços). Alias, vou dar uma breve sumida, por que estou fazendo o meu curso de Asterisk na LyTux. Beleza galera? Um abraço e até a próxima.



Licença Creative Commons

Diferentes modelos de kernels: Monolítico (e modular), microkernel, kernel hibrido (entre os dois primeiros), nanokernel e hexokernel. de Gabriel da Silveira Costa (Toca do Tux) está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual 4.0 Internacional.
Podem estar disponíveis autorizações adicionais às concedidas no âmbito desta licença em http://tocadotux.blogspot.com/2015/03/diferentes-modelos-de-kernels.html.

Sou analista (bilíngue) de microinformática, professor de inglês, tradutor e interprete.

 Sou também redator no blog Diolinux e um dos tradutores da distribuição Funtoo. Já fiz parte da distribuição IPFire por um tempo também, uma distribuição que gosto muito na parte de administrar o servidor por uma interface web.
 Possuo um manual chamado Caixa de Ferramentas do UNIX traduzido por mim e revisado por mais amigos que abrange tanto Linux (dentre algumas distribuições) quanto Solaris, BSDs, Mac OS X e em alguns momentos o Windows (devido a integração cliente servidor).
 Recentemente estou trabalhando em um manual de migração para Linux.

Compartilhe isso

Leia outros posts

Próximo post
« Próximo post
Post Anterior
Próximo Post »

2 comentários

Write comentários

Compre na imago brinquedos

Compre na imago brinquedos
Utilize o cupom de desconto TOCADOTUX e ecnomize 5% na sua compra