— Renjith G
Eu também recomendaria as páginas da Wikipedia
Outra pergunta útil - stackoverflow.com/questions/1806585/…
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
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
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).
O design do kernel monolítico é muito mais antigo do que a ideia do microkernel, que surgiu no final dos anos 80.
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.
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.
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).
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.
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.
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.
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
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
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
• Processamento mais rápido
• Crash Inseguro • Inflexibilidade de portas • Explosão do tamanho do kernel
Exemplos • MS-DOS, Unix, Linux
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
• Resistente a colisões, portátil, tamanho menor
• Processamento mais lento devido à passagem de mensagem adicional
Exemplos • Windows NT
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
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.
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