architecture - pagina - ¿Por qué Linux se llama kernel monolítico?
linux pagina oficial (7)
; tl-dr - No, Linux siempre es monolítico.
Los módulos de Linux pueden significar modular en algún sentido. Como otros han notado monolítico, generalmente representa un microkernel versus kernel monolítico . Un microkernel tradicional solo tiene estas características,
- Programación
- Gestión de la memoria
- Comunicaciones entre procesos
No hay controladores de hardware , pilas de protocolos , sistemas de archivos , suspensión / reanudación , gestión de reloj , etc. en el kernel principal. Estas cosas son idénticas a cualquier tarea del usuario (aunque pueden tener diferentes privilegios a través de la MMU / programador).
- Microkernels son el futuro
- x86 se extinguirá y las arquitecturas RISC dominarán el mercado
- (5 años a partir de entonces) todos ejecutarán un sistema operativo GNU gratuito
Los programadores de PC y servidores pueden reír, pero dos y tres son ciertamente ciertos para la mayoría de los teléfonos celulares que existen. Tanenbaum estaría bien en todas las cuentas si BlackBerry QNX fuera un éxito.
Además, muchos L1-hypervisors tienen un micro-kernel debajo. Esto se debe a que un hipervisor no suele hacer mucho al lado del cambio de contexto .
Aparentemente, tres predicen el éxito de Linux. ;-)
Un argumento para microkernels es que todos los subsistemas monolíticos necesitan sincronizar múltiples valores a la vez. Para hacer esto, deben usar bloqueos y sufrirán la ley de Amdahl cuando se extienda a arquitecturas paralelas. El contador es que los microkernels dan como resultado muchos mensajes IPC.
Un desarrollo importante es el uso de programación lock-free para evitar la contención en un kernel monolítico. Esto evita el bloqueo en un kernel 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 . Entonces Linux probablemente seguirá siendo un kernel monolítico por algún tiempo.
Leí que Linux es un kernel monolítico. ¿El kernel monolítico significa compilar y vincular el código completo del núcleo en un ejecutable?
Si Linux es capaz de soportar módulos, ¿por qué no dividir todos los subsistemas en módulos y cargarlos cuando sea necesario? En ese caso, el kernel 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.
''Monolítico'' en este contexto no se refiere a que haya un solo ejecutable grande, y como usted dice, Linux soporta la carga dinámica de los módulos kernel en tiempo de ejecución. Cuando hablamos de kernels, ''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 kernel, como un ''microkernel'', donde solo un mínimo el conjunto de funcionalidades se ejecuta en modo privilegiado, y la mayoría del sistema operativo se ejecuta en el espacio de usuario.
Los defensores de 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 micronúcleos son lo suficientemente mínimos como para que puedan ''verificarse formalmente'', lo que significa que puede demostrar matemáticamente que el kernel es ''correcto'' de acuerdo con una especificación. L4 es un buen ejemplo de esto.
Desde wikipedia
Un kernel monolítico es una arquitectura kernel donde todo el sistema operativo está funcionando en el espacio kernel y solo como modo supervisor. En diferencia con otras arquitecturas, wikipedia el kernel 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 administración de procesos, concurrencia y administración de la memoria. más controladores de dispositivos como módulos.
Las versiones recientes de Windows, por otro lado, usan un núcleo Hybric .
Un kernel híbrido es una arquitectura kernel basada en la combinación de aspectos de microkernel y arquitecturas de kernel monolíticas utilizadas en sistemas operativos de computadora. La categoría es controvertida debido a la similitud con kernel monolítico; el término ha sido descartado por algunos como simple comercialización. Las categorías tradicionales del kernel son núcleos monolíticos y microkernels (con nanohádones y exokernels vistos como versiones más extremas de microkernels).
El kernel monolítico es un único gran proceso que se ejecuta completamente en un solo espacio de direcciones. Es un solo archivo binario estático. Todos los servicios del núcleo existen y se ejecutan en el espacio de direcciones del kernel. El kernel puede invocar funciones directamente. Los ejemplos de SO basados en kernel monolíticos son Linux, Unix.
Creo que esta publicación te ayudará más a comprender el concepto.
http://learnlinuxconcepts.blogspot.in/2014/03/what-are-monolithic-and-micro-kernels.html
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 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.
Un kernel monolítico es un kernel donde todos los servicios (sistema de archivos, VFS, controladores de dispositivos, etc.), así como la funcionalidad principal (programación, asignación de memoria, etc.) son un grupo compacto 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 del dispositivo (que básicamente son solo los servicios del sistema). Por ejemplo, VFS (sistema de archivos virtual) y sistemas de archivos de dispositivos en bloques (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 se trata de un módulo en Linux, es un servicio en un microkernel, que indica un proceso aislado.
No confundas el término kernel modular para que sea todo menos monolítico. Algunos núcleos monolíticos pueden compilarse para ser modulares (por ejemplo, Linux), lo que importa es que el módulo se inserta y se ejecuta desde el mismo espacio que maneja la funcionalidad central (espacio del kernel).
La ventaja de un microkernel es que cualquier servicio fallido puede reiniciarse fácilmente, por ejemplo, no se detiene el kernel si el sistema de archivos raíz arroja 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, ya que el problema parece solucionarse continuamente). Se considera una gran ventaja en escenarios en los que simplemente no puede arreglar algo una vez que se ha implementado.
La desventaja de un microkernel es que la mensajería IP asíncrona puede ser muy difícil de depurar, especialmente si se implementan fibrils . Además, solo rastrear un problema de FS / escritura significa examinar el proceso de espacio de usuario, el servicio de dispositivo de bloque, el servicio VFS, el servicio de sistema de archivos y (posiblemente) el servicio PCI. Si se queda en blanco, es hora de consultar el servicio IPC. Esto es a menudo más fácil en un kernel monolítico. GNU Hurd sufre de estos problemas de depuración ( reference ). Ni siquiera voy a entrar en el punto de control cuando se trata de colas de mensajes complejos. Microkernels no son para los débiles de corazón.
El camino más corto hacia un kernel estable y funcional es el enfoque monolítico. Cualquiera de los enfoques puede ofrecer una interfaz POSIX, donde el diseño del kernel resulta de poco interés para alguien que simplemente quiera escribir código para ejecutar en cualquier diseño dado.
Uso Linux (monolítico) en producción. Sin embargo, la mayor parte de mi aprendizaje, pirateo o retoques con el desarrollo del núcleo va a un microkernel, específicamente a HelenOS .
Editar
Si llegaste tan lejos con esta respuesta tan larga, probablemente te divertirás leyendo el " Gran debate Torvalds-Tanenbaum sobre el diseño del kernel ". Es incluso más divertido de leer 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 implico Minix 3. Además, cuando menciono The HURD, me refiero (en su mayoría) al Machkernel de Mach. No es mi intención menospreciar el trabajo reciente de otros.