Um kernel monolítico é um kernel em que todos os serviços (sistema de arquivos, VFS, drivers de dispositivo etc.), bem como a funcionalidade principal (agendamento, alocação de memória, etc.) são um grupo unido que compartilha o mesmo espaço. Isso se opõe diretamente a um microkernel .
Um microkernel prefere uma abordagem em que a funcionalidade principal é isolada dos serviços do sistema e dos drivers de dispositivo (que são basicamente apenas serviços do sistema). Por exemplo, o VFS (sistema de arquivos virtual) e os sistemas de arquivos de dispositivo de bloco (por exemplo, minixfs) são processos separados que são executados fora do espaço do kernel, usando o IPC para se comunicar com o kernel, outros serviços e processos do usuário. Em resumo, se é um módulo no Linux, é um serviço em um microkernel, indicando um processo isolado.
Não confunda o termo kernel modular como algo menos monolítico. Alguns kernels monolíticos podem ser compilados para serem modulares (por exemplo, Linux), o que importa é que o módulo seja inserido e executado no mesmo espaço que lida com a funcionalidade principal (espaço do kernel).
A vantagem para um microkernel é que qualquer serviço com falha pode ser facilmente reiniciado, por exemplo, não há interrupção do kernel se o sistema de arquivos raiz lançar um aborto. Isso também pode ser visto como uma desvantagem, pois pode ocultar bugs bastante críticos (ou fazê-los parecer não tão críticos, porque o problema parece se corrigir continuamente). É visto como uma grande vantagem em cenários em que você simplesmente não pode consertar algo convenientemente depois que ele foi implantado.
A desvantagem de um microkernel é que as mensagens IPC assíncronas podem se tornar muito difíceis de depurar, especialmente se fibrilas forem implementadas. Além disso, apenas rastrear um problema de FS / gravação significa examinar o processo de espaço do usuário, o serviço de dispositivo de bloco, o serviço VFS, o serviço de sistema de arquivos e (possivelmente) o serviço PCI. Se você ficar em branco, é hora de olhar para o serviço IPC. Isso geralmente é mais fácil em um kernel monolítico. O GNU Hurd sofre com esses problemas de depuração ( referência ). Nem vou entrar em pontos de verificação ao lidar com filas de mensagens complexas. Microkernels não são para os fracos de coração.
O caminho mais curto para um núcleo estável e funcional é a abordagem monolítica. Qualquer uma das abordagens pode oferecer uma interface POSIX, onde o design do kernel se torna de pouco interesse para alguém que simplesmente deseja escrever código para executar em qualquer design.
Eu uso Linux (monolítico) na produção. No entanto, a maior parte do meu aprendizado, hacking ou mexer no desenvolvimento do kernel vai para um microkernel, especificamente o HelenOS .
Editar
Se você chegou até aqui com a minha resposta muito extensa, provavelmente se divertirá lendo o ' Grande debate Torvalds-Tanenbaum sobre o design do kernel '. É ainda mais engraçado ler em 2013, mais de 20 anos após a sua transpiração. A parte mais engraçada foi a assinatura de Linus em uma das últimas mensagens:
Linus "my first, and hopefully last flamefest" Torvalds
Obviamente, isso não se concretizou mais do que a previsão de Tanenbaum de que o x86 logo seria obsoleto.
NB:
Quando digo "Minix", não implico o Minix 3. Além disso, quando menciono The HURD, estou referenciando (principalmente) o microkernel Mach. Não é minha intenção depreciar o trabalho recente de outros.
Kernel monolítico significa que todo o sistema operacional é executado no modo kernel (isto é, altamente privilegiado pelo hardware). Ou seja, nenhuma parte do sistema operacional é executada no modo de usuário (privilégio mais baixo). Somente aplicativos na parte superior do SO são executados no modo de usuário.
Nos sistemas operacionais de kernel não monolítico, como o Windows, grande parte do sistema operacional é executada no modo de usuário.
Em qualquer um dos casos, o sistema operacional pode ser altamente modular.
fonte
Módulos Linux podem significar modular em algum sentido. Como outros observaram, o monolítico geralmente representa um microkernel versus um kernel monolítico . Um microkernel tradicional possui apenas esses recursos,
Não há drivers de hardware , pilhas de protocolos , sistemas de arquivos , suspender / retomar , gerenciamento de clock , etc. no kernel principal. Essas coisas são idênticas a qualquer tarefa do usuário (embora possam ter privilégios diferentes via MMU / planejador).
As previsões de Tanenbaum
Programadores de PC e servidor podem rir, mas dois e três certamente são verdadeiros para a maioria dos telefones celulares existentes. Tanenbaum estaria certo em todas as contas se o BlackBerry QNX fosse um sucesso.
Além disso, muitos hipervisores L1 têm um micro-núcleo embaixo. Isso ocorre porque um hiper-visor geralmente não faz muito além da troca de contexto .
Aparentemente, três prevê o sucesso do Linux. ;-)
Um argumento para os microkernels é que todos os subsistemas monolíticos precisam sincronizar vários valores ao mesmo tempo. Para fazer isso, eles devem usar bloqueios e sofrerão com a lei de Amdahl quando estendidos a arquiteturas paralelas. O contador é que os microkernels resultam em muitas mensagens IPC.
Um grande desenvolvimento é o uso de programação sem bloqueio para evitar contenção em um kernel monolítico. Isso evita o bloqueio em um kernel monolítico enquanto reduz a sobrecarga do IPC. Recentemente, todas as CPUs estenderam seu ISA para incluir melhores primitivas para algoritmos sem bloqueio . Portanto, o Linux provavelmente continuará sendo um kernel monolítico por algum tempo.
fonte
Da Wikipedia :
Versões recentes do Windows, por outro lado, usam um kernel híbrido .
fonte
'Monolítico' neste contexto não se refere à existência de um único executável grande e, como você diz, o Linux suporta o carregamento dinâmico de módulos do kernel em tempo de execução. Ao falar sobre kernels, 'monolítico' significa que todo o sistema operacional é executado no modo 'privilegiado' ou 'supervisor', em oposição a outros tipos de sistemas operacionais que usam um tipo de kernel como um 'microkernel', onde apenas um mínimo O conjunto de funcionalidades é executado no modo privilegiado e a maior parte do sistema operacional é executada no espaço do usuário.
Os defensores dos microkernels dizem que isso é melhor porque código menor significa menos erros, e os erros em execução no modo supervisor podem causar problemas muito maiores do que no código do espaço do usuário (como uma chance maior de ter vulnerabilidades de segurança ou falhas totais do sistema na forma de um 'kernel panic'). Alguns microkernels são suficientemente mínimos para que possam ser 'formalmente verificados', o que significa que você pode provar matematicamente que o kernel está 'correto' de acordo com uma especificação. L4 é um bom exemplo disso.
fonte
O kernel monolítico é um processo grande e único, executando 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. Os exemplos de sistemas operacionais monolíticos baseados em kernel são Linux, Unix.
Acho que este post vai ajudar você a entender melhor o conceito.
http://learnlinuxconcepts.blogspot.in/2014/03/what-are-monolithic-and-micro-kernels.html
fonte