¿Cuál es la diferencia entre monolítico y micro kernel?


Respuestas:


113

El kernel monolítico es un gran proceso que se ejecuta completamente en un solo espacio de direcciones. Es un solo archivo binario estático. Todos los servicios del kernel existen y se ejecutan en el espacio de direcciones del kernel. El kernel puede invocar funciones directamente. Ejemplos de sistemas operativos basados ​​en kernel monolíticos: Unix, Linux.

En los microkernels, el kernel se divide en procesos separados, conocidos como servidores. Algunos de los servidores se ejecutan en el espacio del kernel y otros se ejecutan en el espacio del usuario. Todos los servidores se mantienen separados y se ejecutan en diferentes espacios de direcciones. Los servidores invocan "servicios" entre sí enviando mensajes a través de IPC (comunicación entre procesos). Esta separación tiene la ventaja de que si un servidor falla, otros servidores aún pueden funcionar de manera eficiente. Ejemplos de sistemas operativos basados ​​en microkernel: Mac OS X y Windows NT.


35
tanto Mac OS X como Windows son núcleos híbridos, ya que están más estrechamente relacionados con un núcleo monolítico. ejemplos de micro kernels serían: Mach QNX AmigaOS Minix
zeitue

7
GNU Hurd es un gran ejemplo de un sistema operativo que se ejecuta en un microkernel. Todavía está en desarrollo activo y algunas distribuciones populares de Linux tienen un puerto Hurd (Debian / Hurd, Arch Hurd, etc.).
beatgammit

76
  1. El diseño de kernel monolítico es mucho más antiguo que la idea de microkernel, que apareció a fines de la década de 1980.

  2. Los kernels de Unix y Linux son monolíticos, mientras que QNX, L4 y Hurd son micronúcleos. Mach era inicialmente un microkernel (no Mac OS X), pero luego se convirtió en un kernel híbrido. Minix (antes de la versión 3) no era un microkernel puro porque los controladores de dispositivos se compilaban como parte del kernel.

  3. Los granos monolíticos suelen ser más rápidos que los micronúcleos. El primer microkernel Mach fue un 50% más lento que la mayoría de los granos monolíticos, mientras que los posteriores como L4 fueron solo un 2% o 4% más lentos que los diseños monolíticos.

  4. Los núcleos monolíticos son de gran tamaño, mientras que los microkernels son pequeños; por lo general, caben en la caché L1 del procesador (microkernels de primera generación).

  5. En los kernels monolíticos, los controladores de dispositivo residen en el espacio del kernel, mientras que en los microkernels los controladores de dispositivo son el espacio de usuario.

  6. Dado que los controladores de dispositivos de los núcleos monolíticos residen en el espacio del núcleo, los núcleos monolíticos son menos seguros que los microkernel y las fallas (excepciones) en los controladores pueden provocar fallas (que se muestran como BSOD en Windows). Los microkernels son más seguros que los monolíticos, por lo que se utilizan con más frecuencia en dispositivos militares.

  7. Los núcleos monolíticos usan señales y sockets para implementar la comunicación entre procesos (IPC), los microkernels usan colas de mensajes. Los microkernels de 1.ª generación no implementaron bien el IPC y fueron lentos en los cambios de contexto, eso es lo que causó su bajo rendimiento.

  8. Agregar una nueva característica a un sistema monolítico significa recompilar todo el kernel o el módulo del kernel correspondiente (para kernels monolíticos modulares), mientras que con los microkernels puede agregar nuevas características o parches sin recompilar.


1
al mencionar MINIX, ¿a qué versión te refieres? La tercera versión tiene controladores de dispositivo y sistema de archivos separados del kernel .
orustammanapov

Aproximadamente 8. ¿Eso significa que cuando instala un programa en Linux se vuelve a compilar todo el binario del kernel? Además, ¿dónde está este binario del kernel? Gracias.
Nikos

@ Nik-Lz: No es un programa, sino funciones. Los programas generalmente se ejecutan en el espacio del usuario. Si desea ejecutar código en el espacio del kernel, tiene dos opciones: compilarlo en el kernel o cargarlo con un módulo del kernel. ref
bayuah

25

Núcleo monolítico

Todas las partes de un kernel como el programador, el sistema de archivos, la administración de memoria, las pilas de redes, los controladores de dispositivos, etc., se mantienen en una unidad dentro del kernel en Monolithic Kernel

Ventajas

• Procesamiento más rápido

Desventajas

• Crash inseguro • Inflexibilidad de portabilidad • Explosión del tamaño del kernel

Ejemplos • MS-DOS, Unix, Linux

Micro kernel

Solo las partes muy importantes como IPC (comunicación entre procesos), planificador básico, manejo de memoria básico, primitivas de E / S básicas, etc., se colocan en el kernel. La comunicación ocurre a través del paso de mensajes. Otros se mantienen como procesos de servidor en el espacio de usuario.

Ventajas

• Resistente a choques, portátil, de tamaño más pequeño

Desventajas

• Procesamiento más lento debido al paso de mensajes adicional

Ejemplos • Windows NT


14

1.Núcleo monolítico (monolítico puro):all

  • Todos los servicios del kernel de un solo componente

    (-) adición / eliminación no es posible, menos / cero flexible

    (+) La comunicación entre componentes es mejor

por ejemplo: - Unix tradicional

2.Micro kernel:few

  • pocos servicios (administración de memoria, administración de CPU, IPC, etc.) del núcleo del núcleo, otros servicios (administración de archivos, administración de E / S, etc.) de diferentes capas / componentes

  • Enfoque dividido [Algunos servicios están en modo privilegiado (kernel) y algunos están en modo Normal (usuario)]

    (+) flexible para cambios / mejoras

    (-) gastos generales de comunicación

por ejemplo: - QNX etc.

3.Núcleo modular (Modular Monolithic):most

  • Combinación de núcleo micro y monolítico

  • Colección de módulos: los módulos pueden ser -> Estático + Dinámico

  • Los controladores vienen en forma de módulos

por ejemplo: - SO moderno Linux


1

En el espectro de diseños de kernel, los dos puntos extremos son los kernels monolíticos y los microkernels.

El kernel de Linux (clásico), por ejemplo, es un kernel monolítico (y también lo son todos los sistemas operativos comerciales hasta la fecha, aunque podrían afirmar lo contrario);

Ya que su código es un único archivo C que da lugar a un único proceso que implementa todos los servicios anteriores.
Para ejemplificar la encapsulación del kernel de Linux, observamos que el kernel de Linux ni siquiera tiene acceso a ninguna de las bibliotecas C estándar. De hecho, el kernel de Linux no puede usar funciones rudimentarias de la biblioteca de C como printf. En su lugar, implementa su propia función de impresión (llamada impresiones).

Este aislamiento del kernel de Linux y la autocontención proporcionan al kernel de Linux su principal ventaja: el kernel reside en un solo espacio de direcciones1, lo que permite que todas las funciones se comuniquen de la manera más rápida posible sin recurrir a ningún tipo de paso de mensajes. En particular, un kernel monolítico implementa todos los controladores de dispositivo del sistema.

Sin embargo, este es el principal inconveniente de un kernel monolítico: la introducción de cualquier hardware nuevo no compatible requiere una reescritura del kernel (en las partes relevantes), una recompilación del mismo y la reinstalación de todo el sistema operativo.
Más importante aún, si algún controlador de dispositivo falla, todo el kernel sufre como resultado. Este enfoque no modular para adiciones de hardware y fallas de hardware es el argumento principal para respaldar el otro enfoque de diseño extremo para kernels. Un microkernel es en cierto sentido un kernel minimalista que alberga solo los servicios más básicos del sistema operativo (como la gestión de procesos y la gestión del sistema de archivos). En un microkernel, los controladores de dispositivo se encuentran fuera del kernel, lo que permite agregar y eliminar controladores de dispositivo mientras el sistema operativo se está ejecutando y no requieren alteraciones del kernel.


-1

El kernel monolítico tiene todos los servicios del kernel junto con la parte del núcleo del kernel, por lo que son pesados ​​y tienen un impacto negativo en la velocidad y el rendimiento. Por otro lado, el micro kernel es liviano, lo que aumenta el rendimiento y la velocidad.
Respondí la misma pregunta en el sitio de WordPress. Para conocer la diferencia entre monolítico, microkernel y exokernel en forma tabular, puede visitar aquí

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.