¿Por qué Linux se llama un núcleo monolítico?

209

Leí que Linux es un núcleo monolítico. ¿El núcleo monolítico significa compilar y vincular el código completo del núcleo en un ejecutable?

Si Linux puede admitir módulos, ¿por qué no dividir todos los subsistemas en módulos y cargarlos cuando sea necesario? En ese caso, el núcleo no tiene que cargar todos los módulos inicialmente y podría mantener un índice de las funciones en el módulo y cargarlas cuando sea necesario.

Booleano
fuente

Respuestas:

291

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.

Tim Post
fuente
55
Curiosamente, Linus Torvalds fue muy influenciado por MINIX de Andew Tanenbaum cuando creó Linux. Sin embargo, MINIX se basa en un diseño de micro núcleo mientras que Linux usa un núcleo monolítico.
Martin Liversage
2
@ Martin Liversage: más frustrado que influido :) Edité mi respuesta para reflejar eso.
Tim Post
25
@DigitalRoss: Deberías ver mi bandeja de entrada después de responder esto, Linus es manso en comparación con los entusiastas de Minix y Mach.
Tim Post
3
@ p_l Creo que es bastante cercano al momento en que necesitamos hablar sobre las diferencias entre micro, monolítico e híbrido. Esa podría ser una muy buena pregunta :)
Tim Post
15

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.

CesarGon
fuente
9
Windows es definitivamente un núcleo monolítico.
Adam Rosenfield
77
@ Adam: no estoy de acuerdo. El antiguo Windows de 16 bits era un núcleo monolítico, al igual que Windows 95 y similares. Pero las ediciones de Windows basadas en NT, incluidas todas las versiones de servidor más Vista y 7, son claramente microkernel o quizás híbridas, dependiendo de la definición de "microkernel" que utilice.
CesarGon
8
El hecho de que los controladores de impresora no se ejecutan en ring0 no significa que sea un microkernel :)
CAF
77
@caf: le sugiero que eche un vistazo a en.wikipedia.org/wiki/Windows_NT_kernel y en.wikipedia.org/wiki/Comparison_of_operating_system_kernels . Verá que Windows NT y sus sucesores, incluidos Vista, 7 y los Servidores, se describen como "kernel híbrido". Dos grandes subsistemas del sistema operativo se ejecutan completamente en modo de usuario, no solo un controlador de impresora. :-)
CesarGon el
77
Mi comentario fue algo irónico: la designación "híbrida" parece tan libre de información que es inútil.
caf
10

; tl-dr: No, Linux siempre es monolítico.

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,

  1. Planificación
  2. Gestión de la memoria
  3. Comunicaciones entre procesos

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

  1. Los microkernels son el futuro
  2. x86 se extinguirá y las arquitecturas RISC dominarán el mercado
  3. (5 años a partir de entonces) todos estarán ejecutando un sistema operativo GNU gratuito

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.

3 revoluciones
fuente
1
Sí, sé que Tanenbaum se refería a Hurd. Pero GNU cambió a Linux, por lo que la redacción es divertida.
ruido sin sentido
¿Por qué hay una falta de uso de x86 para dispositivos móviles? ¿Qué hace que las otras arquitecturas sean ventajosas?
Abdul
1
Abdul : Mira esta pregunta .
ruido sin arte
Sí, esos son importantes. Es difícil hacer un x86 SOC (sistema en chip). No hay un código HDL estándar para hacer un x86 que un proveedor de SOC (Broadcom, Freescale, etc.) pueda comprar.
ruido sin arte
9

De Wikipedia :

Un núcleo monolítico es una arquitectura de núcleo en la que todo el sistema operativo funciona en el espacio del núcleo y solo como modo supervisor. A diferencia de otras arquitecturas, el núcleo monolítico define solo una interfaz virtual de alto nivel sobre el hardware de la computadora, con un conjunto de primitivas o llamadas al sistema para implementar todos los servicios del sistema operativo, como la administración de procesos, la concurrencia y la administración de memoria en sí y uno o más controladores de dispositivos como módulos.

Las versiones recientes de Windows, por otro lado, usan un núcleo híbrido .

Un kernel híbrido es una arquitectura de kernel basada en la combinación de aspectos de arquitecturas de kernel monolítico y microkernel utilizadas en sistemas operativos de computadora. La categoría es controvertida debido a la similitud con el núcleo monolítico; El término ha sido descartado por algunos como simple comercialización. Las categorías de núcleos tradicionales son núcleos monolíticos y microkernels (con nanokernels y exokernels vistos como versiones más extremas de microkernels).

Beto
fuente
77
Si alguna vez hago algo en el espacio del kernel, debo recordar usar "hybric kerkel" en alguna parte. SCNR ;-)
Jürgen A. Erhard
1
Windows NT siempre fue un sistema híbrido. Es posible que el núcleo no sea exactamente híbrido, pero tiene dudas sobre qué cuenta como parte de él (winapi, por ejemplo, se implementa como servicio de espacio de usuario)
p_l
5

'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.

David Claridge
fuente
Revisa tus fuentes. El wikipage no está citado. www2.cs.uh.edu/~rzheng/course/COSC6397sp2008/…
monksy
2

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

JIN007
fuente
Si bien este enlace puede responder la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace como referencia. Las respuestas de solo enlace pueden volverse inválidas si la página vinculada cambia.
Scott