tipos - ¿Cuáles son las cosas buenas y malas en el diseño del kernel de Linux?
tipos de kernel (6)
Creo que el desarrollo del kernel, en lugar de ser un problema de diseño con antecedentes y debates filosóficos (como micro kernel vs. kernel monolítico), es una cuestión de código práctico que funciona de manera confiable. La variedad de periféricos y protocolos que debe soportar un kernel además de la amplia gama de versiones y fabricantes de hardware y también problemas complejos que surgen en el desarrollo de modo protegido (versus el desarrollo en modo usuario que utilizan las aplicaciones) justifican esta afirmación. Además, no se olvide de la cuestión de la compatibilidad con versiones anteriores que es vital para un sistema operativo en la práctica, pero que principalmente se descuida en la filosofía del diseño.
Linux kernel es un buen ejemplo de esto: un kernel monolítico (aunque muy modular) con muchos hack pragmáticos que supera a muchos sistemas operativos académicos o comerciales bien diseñados en popularidad y rendimiento tanto en servidores como en áreas de sistemas integrados.
Una ventaja superior de Linux es que muchos aspectos de su kernel pueden estar incrustados en la imagen del kernel (principalmente bzImage) o pueden agregarse como un módulo kernel más adelante. Puede configurarlo antes de crear la imagen del kernel usando la herramienta de configuración y luego cualquier módulo del núcleo puede eliminarse o agregarse fácilmente en tiempo de ejecución (por privilegio de root, por supuesto) sin necesidad de reiniciar el sistema operativo. Esto hace que el desarrollo y mantenimiento del kernel sea realmente más fácil. (Solo piense en el sistema operativo Windows que necesita un reinicio para casi todas las actualizaciones, muchas veces en programas no relacionados con el kernel)
No soy un maestro del código kernel, pero tengo una idea básica de su estructura de código. En este post podemos discutir cuáles son las cosas buenas y malas en el diseño del kernel.
Actualización: No, esto no es para la tarea. Lo habría mencionado si ese fuera el caso.
Ver esto: https://stackoverflow.com/questions/1548442/i-know-how-to-program-now-how-do-i-learn-to-design
Todos elogian el diseño del kernel de Linux. Tengamos una lista de las decisiones de diseño buenas y malas que se tomaron en el diseño del kernel.
Creo que este http://linuxhelp.blogspot.com/2006/05/monolithic-kernel-vs-microkernel-which.html debería arrojar algo de luz sobre tu pregunta.
Lo peor:
El sistema de construcción, (sí, sé que no tiene nada que ver con el diseño del kernel mismo).
Es una pesadilla absoluta, no hay nada como ningún otro en existencia, y si por alguna razón (agregar una nueva arquitectura, tal vez) necesita cambiarlo, entonces tiene que aprender un idioma completamente nuevo para hacerlo.
La mejor cosa:
Casi todo es configurable. Es sorprendente que básicamente el mismo kernel se use en pequeños dispositivos integrados sin MMU, y en supercomputadoras con enormes recuerdos y miles de procesadores.
No directamente sobre el diseño de Linux, pero creo que el proceso de desarrollo detrás de él es el más notable. El kernel mismo está en constante evolución, y lo hace a una velocidad increíble. Esto solo es posible gracias al control de versión descentralizado ( git ), que hace posible que un gran número de desarrolladores trabajen de forma simultánea.
Además, con git bisect lograron algo notable; ahora es posible para los no desarrolladores rastrear errores. Aquí hay una cita de David Miller:
Lo que las personas no entienden es que esta es una situación donde se aplica el "principio del nodo final". Cuando tiene recursos limitados (aquí: desarrolladores), no carga la mayor parte de la carga sobre ellos. En lugar de eso, empujas las cosas hacia el recurso que tienes, los nodos finales (aquí: usuarios), de modo que la situación realmente se amplía.
Las personas que informan un error tienen acceso al entorno donde ocurre el error, y "git bisect" extrae automáticamente información relevante de este entorno. Esta es también una buena forma de obtener nuevos contribuyentes.
Además, siempre que los desarrolladores quieran contribuir con el código, tienen que dividir su código en pequeños parches, que se pueden aplicar por separado, para que cada cambio se pueda revisar fácilmente. De esta manera, muchas personas pueden comprender una gran parte de su código.
El estilo de administración de Linux es una lectura interesante. Linus trata de vivir una atmósfera en la que no te escondas detrás de la cortesía, pero claramente declaras lo que piensas. Esto podría ser grosero algunas veces, pero estoy seguro de que mantiene la calidad del código en un nivel alto.
algunos artículos existen llamados "patrones de diseño de Kernel de Linux". usted puede encontrar varios patrones de kernel de diseño para Linux. un artículo que continúa es " Patrones de diseño de Kernel de Linux - Parte 1 ", comience con esto y busque en google artículo adicional para Kernel Design Pattern.
cosas malas:
- la nueva tasa de funciones es alta y el ciclo de corrección de fallas para estas funciones es escaso.
- el sistema de configuración debe ser inteligente. y categorizado para algunas necesidades generales. si tiene un sistema de configuración parecido a un asistente y más interacciones e información al hacer config.
- bloqueo de kernel grande y otros bloqueos en todas partes sin un buen mecanismo de comprobación.
cosas buenas:
- Controladores de modo de usuario: sistema de archivos en modo de usuario, controlador de bloque en modo usuario, controlador de bloque en modo usuario, raw hidden, ...
- buena inclusión del controlador. en la actualidad, una gran gama de dispositivos tiene soporte en Linux Kernel.
- virtualización ligera en kernel.
- buenos mecanismos de comunicación entre el espacio del usuario y el espacio del núcleo (dev, proc, sys, debugfs, ...)
- muy buen uso del lenguaje C con punteros de función en estructuras para simular algunas características orientadas a objetos.
- modo de usuario linux para la depuración.
- buen soporte de sistemas integrados
- muy buenos mecanismos de seguridad: selinux, apparmor, verificación de integridad, ...