Me gustaría obtener un mejor conocimiento de las partes internas del sistema operativo. Gestión de procesos, gestión de memoria y cosas así.
Estaba pensando en aprender conociendo linux o BSD kernel.
¿Cuál kernel es mejor para propósitos de aprendizaje?
¿Cuál es el mejor lugar para comenzar?
¿Me puede recomendar algún buen libro?
¿Cuál es la mejor forma de conocer Linux interno de kernel o BSD?
Respuesta
En la universidad, tuve una clase de sistemas operativos en la que usamos un book by Tanenbaum. En la clase, implementamos un controlador de dispositivo en el Minix operating system. Fue muy divertido y aprendimos mucho.
Una cosa a tener en cuenta, sin embargo, si eliges Minix, está diseñado para aprender. Es un microkernel, mientras que Linux y BSD son un kernel monolítico, por lo que lo que aprendes puede no ser 100% traducible para poder trabajar con Linux o BSD, pero aún puedes ganar mucho sin tener que procesar bastante tanta información
Como nota al margen, si ha leído Just for Fun, Linus en realidad estaba jugando con Minix antes de escribir Linux, pero simplemente no era suficiente para sus propósitos.
que había comprado previamente estos libros sobre la recomendación para el mismo propósito, pero nunca llegué a estudiarlos a mí mismo por lo que sólo tomarlos como de segunda mano Consejo.
Como usuario de Linux, diría que Linux tiene una gran comunidad para que las personas conozcan el kernel. http://kernelnewbies.org es un gran lugar para comenzar a hacer preguntas y aprender sobre cómo funciona el kernel. No puedo hacer una recomendación de libro, pero una vez que haya leído el material de inicio sobre kernelnewbies, la fuente está muy bien documentada.
Aparte de los buenos libros ya mencionados (Opeting System Design & La implementación es particularmente buena), obtenga una versión 1.x de Linux Kernel, cárguela en VMWare o VirtualBox y comience a jugar desde allí.
Necesitará pasar mucho tiempo navegando por el código fuente. Para esto, consulte http://lxr.linux.no/, que es una versión enlazada de la fuente que se puede explorar y hace la vida mucho más fácil. Para la primera versión de Linux (0.01) visita http://lxr.linux.no/linux-old+v0.01/. La diversión comienza en http://lxr.linux.no/linux-old+v0.01/boot/boot.s. A medida que avances de una versión a otra, revisa ChangeLog e indaga en las partes que han cambiado para ahorrarte volver a leer todo de nuevo.
Una vez que haya conseguido los conceptos, mire 2.0, luego 2.2, etc. Prepárese para invertir MUCHO tiempo en el proceso.
Cuando estaba en la universidad pasé un semestre estudiando sistemas operativos, y como parte de esto tenía una tarea en la que teníamos que implementar un sistema de archivos basado en RAM en Linux.
Fue una manera fantástica de comprender las partes internas de la consola de Linux y comprender cómo encaja todo, y divertirme jugando con la forma en que interactúa con las herramientas estándar.
No hay nada mejor que sumergirse en el código. Intente encontrar un controlador o subsistema que le interese y búsquelo. Con herramientas como VMware Workstation es muy fácil hacer los cambios que desee, hacer una instantánea de la máquina virtual y ejecutar el kernel modificado. Si el núcleo entra en pánico en el arranque, ¿a quién le importa? Simplemente regrese a la instantánea y solucione el problema.
Para libros, recomiendo encarecidamente Linux Kernel Development por Robert Love. Es un libro maravillosamente escrito, mucha información, organizado sano y divertido ... no lectura seca en absoluto.
No lo he probado, pero puede ir a Linux From Scratch y comenzar a construir su propia distribución de Linux. Parece algo que tomará un montón de tiempo, pero dará como resultado un conocimiento íntimo de las entrañas del kernel de Linux y cómo funciona cada parte. Por supuesto, puede complementar este aprendizaje siguiendo cualquiera de los otros consejos aquí.
Tomando nota de la falta de BSD aquí, pensé que había que saltar adentro:
- The Design and Implementation of the FreeBSD Operating System (libro muerto-árbol)
- Unix and BSD Courses (cursos y videos)
- FreeBSD Architecture Handbook (libro en línea)
No he tomado ninguno de los cursos yo mismo, pero he escuchado a Marshall Kirk McKusick hablar en otras ocasiones, y él es muy bueno en lo que hace.
Y, por supuesto, las páginas man de BSD, que son un excelente recurso, ya que se mantienen en una medida mucho mayor que su página de manual de Linux promedio. Tomemos como ejemplo la página de manual uvm(9), que describe la interfaz de memoria virtual en OpenBSD.
No del todo relacionado, pero también recomendaré el video History of the Berkeley Software Distributions, ya que ofrece una buena introducción a las partes BSD de la historia y cultura de UNIX, así como a muchos anecdóticos divertidos de la época anterior.
Siga los consejos de Mike Stone y comience con Minix. ¡Eso es lo que hizo Linus! El libro de texto está muy bien escrito, y Tannenbaum hace un gran trabajo al mostrar cómo se implementan las diversas funciones en un sistema real.
Nadie parece haber mencionado que el código BSD es mucho más limpio y consistente. La documentación es mucho mejor también (como ya se mencionó). Pero dado que hay muchos problemas con el sistema que elijas, escogería el que usas con más frecuencia.
¡Te recomiendo los granos BSD! Los núcleos BSD tienen muchos menos hackers, por lo que es más fácil seguir su evolución. O bien BSD y Linux kernels tienen grandes hackers, pero algunas personas argumentan que BSD fama inferior filtra los novatos. También es más fácil tomar decisiones de diseño cuando las fuentes no se actualizan 100 veces al día.
Entre las opciones de BSD, mi favorita es NetBSD. Puede que no sea la elección sin dolor que desee para su escritorio, pero debido a que tiene un fuerte enfoque en la portabilidad, la calidad es bastante buena. Creo que esta parte lo dice todo:
Algunos sistemas parecen tener la filosofía de "Si funciona, es correcto".A la luz de la filosofía de NetBSD podría describirse como “No funciona a menos que esté bien”
Si usted ha estado trabajando bastante tiempo, usted sabrá que NetBSD es una alegría bastante buena para el aprendizaje de codificación. Aunque profesionalmente encontrará más oportunidades con Linux
Cualquiera que sea su elección, comience a unir sus listas de correo, siga las discusiones. Estudia algunos parches y finalmente intenta hacer tu propia corrección de errores. En cuanto a libros, busque artículos de Diomidis Spinellis y his book. No es exactamente un libro de kernel, pero tiene ejemplos de NetBSD y ayuda mucho a abordar software de gran tamaño.
Linux y Minix son divertidos de aprender. Si también quieres saber cómo es un sistema operativo de micro kernel moderno, puedes mirar QNX. La documentación completa está disponible en línea y es muy accesible. Por ejemplo, this libro en línea.
- 1. ¿Cuál es la mejor forma de evitar la falta de memoria (OOM) en Linux?
- 2. Linux Kernel coding style
- 3. ¿Cuál es la mejor forma de diseñar una clase C#?
- 4. ¿Hay pequeñas distribuciones de Unix o BSD?
- 5. ¿Cuál es la mejor forma de distribuir Lua y bibliotecas?
- 6. ¿Cuál es la mejor forma de normalización de Unicode?
- 7. ¿Cuál es la mejor forma de obtener Contexto?
- 8. ¿Cuál es la mejor/más segura forma de reinstalar Homebrew?
- 9. ¿Cuál es la mejor forma de probar la carga de una aplicación SignalR Hubs?
- 10. ¿Cuál es la mejor forma de convertir ByteString en Int?
- 11. ¿La lista de hilos del kernel de Linux es segura?
- 12. ¿Cuál es la mejor forma de generar rangos en MYSQL?
- 13. ¿Cuál es la mejor forma de precompilar JSP con Ant
- 14. ¿Cuál es la mejor forma de distribuir aplicaciones Java?
- 15. ¿Cuál es la mejor forma de organizar el código?
- 16. ¿Cuál es la mejor forma de ejecutar expresiones matemáticas?
- 17. ¿Cuál es la mejor forma de usar NLog con MEF?
- 18. ¿Cuál es la mejor forma de analizar cadenas?
- 19. ¿Cuál es la mejor forma de convertir enum a string?
- 20. ¿Cuál es la mejor forma de formatear C# en WordPress?
- 21. Linq con notación de puntos: ¿cuál es la mejor forma o cuál es la diferencia entre estos dos?
- 22. ¿Cuál es la secuencia seguida por el kernel de Linux para configurar un dispositivo?
- 23. Organización de los encabezados kernel de Linux
- 24. ¿Cuál es la diferencia entre module_init e init_module en un módulo kernel de Linux?
- 25. ¿Impresiones de depuración del kernel de Linux?
- 26. desarrollo del kernel de Linux
- 27. Programación del kernel de Linux
- 28. Linux kernel aio funcionalidad
- 29. ¿Cuál es la relación entre un sistema operativo Linux y un kernel?
- 30. ¿Qué es mejor "int 0x80" o "syscall"?
LFS está diseñado para que usted tenga un conocimiento profundo de la creación de una distribución, y realmente no lo ayudará a comprender el núcleo, solo cómo compilarlo. – Draemon