Un microkernel implementa todos los controladores como programas de espacio de usuario e implementa características centrales como IPC en el núcleo mismo. Sin embargo, un kernel monolítico implementa los controladores como parte del kernel (por ejemplo, se ejecuta en modo kernel).
He leído algunas afirmaciones de que los microkernels son más lentos que los núcleos monolíticos, ya que necesitan manejar el mensaje que pasa entre los controladores en el espacio del usuario. ¿Es esto cierto?
Durante mucho tiempo, la mayoría de los núcleos fueron monolíticos porque el hardware era demasiado lento para ejecutar micro-núcleos rápidamente. Sin embargo, ahora hay muchos microkernels y núcleos híbridos, como GNU / Hurd, Mac OS X, línea de Windows NT, etc.
Entonces, ¿ha cambiado algo sobre el rendimiento de los microkernels? ¿Sigue siendo válida esta crítica a los microkernels hoy en día?
Prefiero llamar a Windows NT y al núcleo XNU de Apple monolítico en lugar de híbrido. No encuentro que la clasificación de híbrido tenga mucho significado en la práctica. De hecho, uno de los ingenieros originales de XNU lo llama monolítico [1].
Sobre el tema del rendimiento, la única comparación realmente profunda de monolítico frente a micro que puedo encontrar es "Computación de alto rendimiento extrema o Por qué los microkerenels chupan" [2] y una presentación de refutación "Do Microkernels Suck?" [3].
La modularidad y la personalización son más problemas de diseño que limitaciones inherentes en los núcleos monolíticos. El kernel de Linux, por ejemplo, puede variar desde varios megabytes hasta alrededor de un megabyte de tamaño dependiendo de las opciones de tiempo de compilación y la aplicación de ciertos parches. La gran mayoría de las más de 15 millones de líneas de código de Linux son módulos de kernel cargables. Se compilan por separado del núcleo base y solo se cargan cuando es necesario. Esos módulos pueden implementar controladores y llamadas al sistema (incluso anulando las llamadas al sistema base).
Las dos áreas donde los microkernels tienen una ventaja indiscutible son la memoria baja (<= 512k ram) o los sistemas operativos en tiempo real "duros", como los sistemas de vuelo de las aerolíneas o los sistemas de control de reactores nucleares.
Editar: Hablando más sobre las ventajas y desventajas de cualquiera de las arquitecturas del núcleo, Gernot Heiser admite libremente al final de su presentación [3] que los núcleos monolíticos son inherentemente más eficaces porque un microkernel siempre tiene algo de sobrecarga adicional. Sin embargo, esa sobrecarga adicional conduce a una mayor confiabilidad, por lo tanto, el dominio de microkernels de RTOS.
[1] Louis G. Gerbarg, "Sincronización avanzada en Mac OS X: extensión de Unix a SMP y en tiempo real", Actas de la Conferencia BSDCon 2002, págs. 2
[2] Chistoph Lameter, "Computación de alto rendimiento extremo o por qué los microkernels apestan", Simposio de Linux 2007, Volumen Uno
[3] Gernot Heiser, "Do Microkernels Suck?", Noveno Linux.conf.au, enero de 2008
fuente