Un núcleo monolítico es un núcleo donde todos los servicios (sistema de archivos, VFS, controladores de dispositivos, etc.), así como la funcionalidad central (programación, asignación de memoria, etc.) son un grupo muy unido que comparte el mismo espacio. Esto se opone directamente a un microkernel .
Un microkernel prefiere un enfoque en el que la funcionalidad central está aislada de los servicios del sistema y los controladores de dispositivos (que son básicamente solo servicios del sistema). Por ejemplo, VFS (sistema de archivos virtual) y los sistemas de archivos de dispositivos de bloque (es decir, minixfs) son procesos separados que se ejecutan fuera del espacio del kernel, utilizando IPC para comunicarse con el kernel, otros servicios y procesos de usuario. En resumen, si es un módulo en Linux, es un servicio en un microkernel, lo que indica un proceso aislado.
No confunda el término núcleo modular para ser cualquier cosa menos monolítico. Algunos núcleos monolíticos se pueden compilar para que sean modulares (por ejemplo, Linux), lo importante es que el módulo se inserte y se ejecute desde el mismo espacio que maneja la funcionalidad central (espacio del núcleo).
La ventaja de un microkernel es que cualquier servicio fallido puede reiniciarse fácilmente, por ejemplo, no hay interrupción del kernel si el sistema de archivos raíz produce un aborto. Sin embargo, esto también puede verse como una desventaja, ya que puede ocultar errores bastante críticos (o hacer que parezcan no tan críticos, porque el problema parece solucionarse continuamente). Se ve como una gran ventaja en escenarios en los que simplemente no puede arreglar convenientemente algo una vez que se ha implementado.
La desventaja de un microkernel es que la mensajería asincrónica de IPC puede ser muy difícil de depurar, especialmente si se implementan fibrillas . Además, solo rastrear un problema de FS / escritura significa examinar el proceso de espacio del usuario, el servicio del dispositivo de bloque, el servicio VFS, el servicio del sistema de archivos y (posiblemente) el servicio PCI. Si queda un espacio en blanco, es hora de mirar el servicio IPC. Esto es a menudo más fácil en un núcleo monolítico. GNU Hurd sufre estos problemas de depuración ( referencia ). Ni siquiera voy a entrar en puntos de control cuando me ocupo de colas de mensajes complejas. Los microkernels no son para los débiles de corazón.
El camino más corto hacia un núcleo estable y funcional es el enfoque monolítico. Cualquiera de los dos enfoques puede ofrecer una interfaz POSIX, donde el diseño del kernel resulta de poco interés para alguien que simplemente desea escribir código para ejecutarlo en cualquier diseño dado.
Yo uso Linux (monolítico) en producción. Sin embargo, la mayor parte de mi aprendizaje, piratería o retoques con el desarrollo del kernel se destina a un microkernel, específicamente a HelenOS .
Editar
Si llegaste tan lejos a través de mi larga respuesta, probablemente te divertirás leyendo el ' Gran debate de Torvalds-Tanenbaum sobre el diseño del núcleo '. Es aún más divertido leerlo en 2013, más de 20 años después de que sucedió. La parte más divertida fue la firma de Linus en uno de los últimos mensajes:
Linus "my first, and hopefully last flamefest" Torvalds
Obviamente, eso no se hizo realidad más que la predicción de Tanenbaum de que x86 pronto sería obsoleto.
NÓTESE BIEN:
Cuando digo "Minix", no me refiero a Minix 3. Además, cuando menciono The HURD, estoy haciendo referencia (principalmente) al microkernel Mach. No es mi intención menospreciar el trabajo reciente de otros.