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.
Kernel monolítico significa que todo el sistema operativo se ejecuta en modo kernel (es decir, altamente privilegiado por el hardware). Es decir, ninguna parte del sistema operativo se ejecuta en modo de usuario (privilegio inferior). Solo las aplicaciones en la parte superior del sistema operativo se ejecutan en modo de usuario.
En los sistemas operativos de kernel no monolíticos, como Windows, una gran parte del sistema operativo se ejecuta en modo de usuario.
En cualquier caso, el sistema operativo puede ser altamente modular.
fuente
Los módulos de Linux pueden significar modulares en algún sentido. Como otros han notado, el monolítico generalmente representa un microkernel versus un kernel monolítico . Un microkernel tradicional solo tiene estas características,
No hay controladores de hardware , pilas de protocolos , sistemas de archivos , suspender / reanudar , administración de reloj , etc. en el núcleo principal. Estas cosas son idénticas a cualquier tarea del usuario (aunque pueden tener diferentes privilegios a través de MMU / Scheduler).
Las predicciones de Tanenbaum
Los programadores de PC y servidores pueden reírse, pero dos y tres son ciertos para la mayoría de los teléfonos celulares existentes. Tanenbaum estaría en lo cierto en todas las cuentas si BlackBerry QNX fuera un éxito.
Además, muchos hipervisores L1 tienen un micro núcleo debajo. Esto se debe a que un hipervisor generalmente no hace mucho al lado del cambio de contexto .
Aparentemente tres predice el éxito de Linux. ;-)
Un argumento para los microkernels es que todos los subsistemas monolíticos necesitan sincronizar múltiples valores al mismo tiempo. Para hacer esto, deben usar bloqueos y sufrirán la ley de Amdahl cuando se extiendan a arquitecturas paralelas. El contador es que los microkernels generan muchos mensajes IPC.
Un desarrollo importante es el uso de programación sin bloqueo para evitar la contención en un núcleo monolítico. Esto evita el bloqueo en un núcleo monolítico al tiempo que reduce la sobrecarga de IPC. Recientemente, todas las CPU han ampliado su ISA para incluir mejores primitivas para algoritmos sin bloqueo . Por lo tanto, Linux probablemente seguirá siendo un núcleo monolítico durante algún tiempo.
fuente
De Wikipedia :
Las versiones recientes de Windows, por otro lado, usan un núcleo híbrido .
fuente
'Monolítico' en este contexto no se refiere a que haya un solo ejecutable grande y, como usted dice, Linux admite la carga dinámica de módulos de kernel en tiempo de ejecución. Cuando se habla de núcleos, 'monolítico' significa que todo el sistema operativo se ejecuta en modo 'privilegiado' o 'supervisor', a diferencia de otros tipos de sistemas operativos que usan un tipo de núcleo como un 'microkernel', donde solo un mínimo El conjunto de funciones se ejecuta en modo privilegiado, y la mayoría del sistema operativo se ejecuta en el espacio del usuario.
Los defensores de los microkernels dicen que esto es mejor porque un código más pequeño significa menos errores, y los errores que se ejecutan en modo supervisor pueden causar problemas mucho mayores que en el código de espacio del usuario (como una mayor probabilidad de tener vulnerabilidades de seguridad o fallas totales del sistema en forma de 'panico kernel'). Algunos microkernels son lo suficientemente mínimos como para que puedan ser 'verificados formalmente', lo que significa que puede probar matemáticamente que el kernel es 'correcto' de acuerdo con una especificación. L4 es un buen ejemplo de esto.
fuente
El kernel monolítico es un gran proceso único que se ejecuta completamente en un solo espacio de direcciones. Es un único archivo binario estático. Todos los servicios del núcleo existen y se ejecutan en el espacio de direcciones del núcleo. El núcleo puede invocar funciones directamente. Los ejemplos de sistemas operativos monolíticos basados en kernel son Linux, Unix.
Creo que esta publicación te ayudará más a entender el concepto.
http://learnlinuxconcepts.blogspot.in/2014/03/what-are-monolithic-and-micro-kernels.html
fuente