¿Alguien podría explicar con ejemplos la diferencia entre monolítico y micro kernel? ¿También otras clasificaciones del kernel?
¿Alguien podría explicar con ejemplos la diferencia entre monolítico y micro kernel? ¿También otras clasificaciones del kernel?
Respuestas:
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.
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.
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.
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.
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).
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.
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.
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.
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.
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
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
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.
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í