Qual é a diferença entre monolítico e micro kernel?

Respostas:

113

O kernel monolítico é um grande processo único executado inteiramente em um único espaço de endereço. É um único arquivo binário estático. Todos os serviços do kernel existem e são executados no espaço de endereço do kernel. O kernel pode invocar funções diretamente. Exemplos de SOs baseados em kernel monolítico: Unix, Linux.

Nos microkernels, o kernel é dividido em processos separados, conhecidos como servidores. Alguns dos servidores são executados no espaço do kernel e alguns são executados no espaço do usuário. Todos os servidores são mantidos separados e executados em espaços de endereço diferentes. Os servidores invocam "serviços" uns dos outros enviando mensagens via IPC (comunicação entre processos). Essa separação tem a vantagem de que, se um servidor falhar, outros servidores ainda poderão funcionar com eficiência. Exemplos de sistemas operacionais baseados em microkernel: Mac OS X e Windows NT.

Sariful Islão
fonte
35
tanto o Mac OS X quanto o Windows são kernel híbridos, pois estão mais intimamente relacionados a um kernel monolítico. exemplos de micro kernels seriam: Mach QNX AmigaOS Minix
zeitue
7
GNU Hurd é um ótimo exemplo de sistema operacional rodando em um microkernel. Ainda está em desenvolvimento ativo e algumas distribuições Linux populares têm um porte Hurd (Debian / Hurd, Arch Hurd, etc).
beatgammit
76
  1. O design do kernel monolítico é muito mais antigo do que a ideia do microkernel, que surgiu no final dos anos 80.

  2. Os kernels Unix e Linux são monolíticos, enquanto QNX, L4 e Hurd são microkernels. Mach era inicialmente um microkernel (não Mac OS X), mas posteriormente convertido em um kernel híbrido. O Minix (antes da versão 3) não era um microkernel puro porque os drivers de dispositivo eram compilados como parte do kernel.

  3. Os núcleos monolíticos geralmente são mais rápidos do que os micronúcleos. O primeiro Mach microkernel foi 50% mais lento do que a maioria dos kernels monolíticos, enquanto os posteriores, como L4, foram apenas 2% ou 4% mais lentos do que os designs monolíticos.

  4. Os kernels monolíticos são grandes em tamanho, enquanto os microkernels são pequenos - eles geralmente se encaixam no cache L1 do processador (microkernels de primeira geração).

  5. Em kernels monolíticos, os drivers de dispositivo residem no espaço do kernel, enquanto nos microkernels os drivers de dispositivo são espaço do usuário.

  6. Como os drivers de dispositivo dos kernels monolíticos residem no espaço do kernel, os kernels monolíticos são menos seguros do que os microkernels e falhas (exceções) nos drivers podem causar travamentos (exibidos como BSODs no Windows). Microkernels são mais seguros do que kernels monolíticos, portanto, mais frequentemente usados ​​em dispositivos militares.

  7. Os kernels monolíticos usam sinais e soquetes para implementar a comunicação entre processos (IPC), os microkernels usam filas de mensagens. Os microkernels de primeira geração não implementavam bem o IPC e eram lentos nas trocas de contexto - isso é o que causava seu desempenho ruim.

  8. Adicionar um novo recurso a um sistema monolítico significa recompilar todo o kernel ou o módulo do kernel correspondente (para kernels monolíticos modulares), enquanto com microkernels você pode adicionar novos recursos ou patches sem recompilar.

simplePerson43
fonte
1
mencionando MINIX, qual versão você quer dizer? A 3ª versão separou drivers de dispositivo e sistema de arquivos do kernel .
orustammanapov
Sobre 8. Isso significa que quando você instala um programa no Linux, todo o binário do kernel é recompilado? Além disso, onde está o binário do kernel? Obrigado.
Nikos de
@ Nik-Lz: Não é um programa, mas recursos. Os programas geralmente são executados no espaço do usuário. Se você deseja executar código no espaço do kernel, você tem duas opções: compilá-lo no kernel ou carregá-lo com um módulo do kernel. ref
bayuah de
25

Kernel monolítico

Todas as partes de um kernel como o Agendador, Sistema de Arquivo, Gerenciamento de Memória, Pilhas de Rede, Drivers de Dispositivo, etc., são mantidas em uma unidade dentro do kernel no Kernel Monolítico

Vantagens

• Processamento mais rápido

Desvantagens

• Crash Inseguro • Inflexibilidade de portas • Explosão do tamanho do kernel

Exemplos • MS-DOS, Unix, Linux

Micro kernel

Somente as partes muito importantes como IPC (comunicação entre processos), agendador básico, manipulação de memória básica, primitivas de E / S básicas, etc., são colocadas no kernel. A comunicação acontece por meio da passagem de mensagens. Outros são mantidos como processos de servidor no Espaço do Usuário

Vantagens

• Resistente a colisões, portátil, tamanho menor

Desvantagens

• Processamento mais lento devido à passagem de mensagem adicional

Exemplos • Windows NT


fonte
14

1. Núcleo Monolítico (Monolítico Puro):all

  • Todos os Kernel Services de um único componente

    (-) adição / remoção não é possível, menos / Zero flexível

    (+) A comunicação entre os componentes é melhor

por exemplo: - Unix tradicional

2. Micro Kernel:few

  • poucos serviços (gerenciamento de memória, gerenciamento de CPU, IPC etc) do núcleo do kernel, outros serviços (gerenciamento de arquivos, gerenciamento de I / O. etc.) de diferentes camadas / componentes

  • Abordagem dividida [alguns serviços estão no modo privilegiado (kernel) e alguns estão no modo normal (usuário)]

    (+) flexível para mudanças / gradações

    (-) sobrecarga de comunicação

por exemplo: - QNX etc.

3. Kernel Modular (Modular Monolítico):most

  • Combinação de kernel micro e monolítico

  • Coleção de módulos - os módulos podem ser -> Estático + Dinâmico

  • Os drivers vêm na forma de módulos

por exemplo: - Linux Modern OS

Naman Vaishnav
fonte
1

No espectro de designs de kernel, os dois pontos extremos são kernels monolíticos e microkernels.

O kernel (clássico) do Linux, por exemplo, é um kernel monolítico (assim como todo sistema operacional comercial até hoje - embora eles possam alegar o contrário);

Nesse sentido, seu código é um único arquivo C dando origem a um único processo que implementa todos os serviços acima.
Para exemplificar o encapsulamento do kernel Linux, observamos que o kernel Linux nem mesmo tem acesso a nenhuma das bibliotecas C padrão. Na verdade, o kernel do Linux não pode usar funções rudimentares da biblioteca C, como printf. Em vez disso, ele implementa sua própria função de impressão (chamada de impressões). Esta, entretanto, é a principal desvantagem de um kernel monolítico: a introdução de qualquer novo hardware não suportado requer uma reescrita do kernel (nas partes relevantes), recompilação dele e reinstalação de todo o sistema operacional.

Essa reclusão do kernel Linux e a autocontenção fornecem ao kernel Linux sua principal vantagem: o kernel reside em um único espaço de endereço1 permitindo que todos os recursos se comuniquem da maneira mais rápida possível, sem recorrer a qualquer tipo de passagem de mensagem. Em particular, um kernel monolítico implementa todos os drivers de dispositivo do sistema.


Mais importante, se algum driver de dispositivo travar, o kernel inteiro sofrerá como resultado. Esta abordagem não modular para adições de hardware e travamentos de hardware é o principal argumento para apoiar a outra abordagem extrema de design para kernels. Um microkernel é, em certo sentido, um kernel minimalista que hospeda apenas os serviços mais básicos do sistema operacional (como gerenciamento de processos e gerenciamento de sistema de arquivos). Em um microkernel, os drivers de dispositivo ficam fora do kernel, permitindo a adição e remoção de drivers de dispositivo enquanto o sistema operacional está em execução e não requerem alternâncias do kernel.

TheLogicGuy
fonte
-1

O kernel monolítico tem todos os serviços do kernel junto com a parte do núcleo do kernel, portanto, são pesados ​​e têm impacto negativo na velocidade e no desempenho. Por outro lado, o micro kernel é leve, causando aumento no desempenho e velocidade.
Eu respondi a mesma pergunta no site do wordpress. Para a diferença entre monolítico, microkernel e exokernel na forma tabular, você pode visitar aqui

Yogesh Jilhawar
fonte