Um microkernel implementa todos os drivers como programas no espaço do usuário e implementa recursos principais como IPC no próprio kernel. Um kernel monolítico, no entanto, implementa os drivers como parte do kernel (por exemplo, é executado no modo kernel).
Eu li algumas alegações de que os microkernels são mais lentos que os monolíticos, pois precisam lidar com a passagem de mensagens entre os drivers no espaço do usuário. Isso é verdade?
Por um longo tempo, a maioria dos kernels era monolítica, porque o hardware era muito lento para executar micro-kernels rapidamente. No entanto, agora existem muitos microkernels e kernels híbridos, como GNU / Hurd, Mac OS X, linha Windows NT, etc.
Então, algo mudou sobre o desempenho dos microkernels? Essa crítica aos microkernels ainda é válida hoje?
Prefiro chamar o Windows NT e o núcleo XNU da Apple de monolítico em vez de híbrido. Não acho que a classificação de híbrido tenha muito significado na prática. De fato, um dos engenheiros originais da XNU o chama de monolítico [1].
Na questão do desempenho, a única comparação realmente profunda entre monolítico e micro que posso encontrar é "Computação de alto desempenho extremo ou por que os microquerenéis sugam" [2] e uma apresentação de refutação "Os microkernels sugam?" [3].
Modularidade e capacidade de personalização são mais problemas de design do que limitações inerentes a kernels monolíticos. O kernel do Linux, por exemplo, pode variar de vários megabytes a cerca de um megabyte, dependendo das opções em tempo de compilação e da aplicação de certos patches. A grande maioria das mais de 15 milhões de linhas de código do Linux são módulos carregáveis do kernel. Eles são compilados separadamente do kernel base e carregados somente quando necessário. Esses módulos podem implementar drivers e chamadas do sistema (mesmo substituindo as chamadas básicas do sistema).
As duas áreas em que os microkernels têm uma vantagem indiscutível estão com pouca memória (<= 512k ram) ou sistemas operacionais "em tempo real", como sistemas de voo de companhias aéreas ou sistemas de controle de reatores nucleares.
Edit: Falando mais sobre as vantagens e desvantagens de qualquer arquitetura de kernel, Gernot Heiser admite livremente no final de sua apresentação [3] que os kernels monolíticos são inerentemente mais eficientes porque um microkernel sempre tem alguma sobrecarga extra. No entanto, essa sobrecarga extra leva ao aumento da confiabilidade, daí o domínio dos microkernels do RTOS.
[1] Louis G. Gerbarg, "Sincronização avançada no Mac OS X: estendendo o Unix ao SMP e em tempo real", Anais da BSDCon 2002 Conference, pp. 2
[2] Chistoph Lameter, "Computação de alto desempenho extremo ou por que os microkernels sugam", 2007 Linux Symposium, Volume One
[3] Gernot Heiser, "Do Microkernels Suck?", 9º Linux.conf.au, janeiro de 2008
fonte