Pregunta

Me gustaría obtener un mejor conocimiento de los aspectos internos del sistema operativo.Gestión de procesos, gestión de memoria y cosas así.
Estaba pensando en aprender conociendo Linux o el kernel BSD.
¿Cuál kernel es mejor para fines de aprendizaje?
¿Cuál es el mejor lugar para empezar?
¿Puedes recomendar algún buen libro?

¿Fue útil?

Solución

En la universidad, tenía una clase de sistemas operativos donde usábamos un libro de Tanenbaum.En la clase, implementamos un controlador de dispositivo en el sistema operativo minix.Fue muy divertido y aprendimos mucho.

Sin embargo, una cosa a tener en cuenta es que 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 aprenda puede no ser 100% traducible para poder trabajar con Linux o BSD, pero aún así puede sacar mucho provecho de ello, sin tener que procesar mucho. tanta información.

Como nota al margen, si has leído Solo por diversión, Linus en realidad estaba jugando con Minix antes de escribir Linux, pero no era suficiente para sus propósitos.

Otros consejos

Como usuario de Linux, diría que Linux tiene una gran comunidad para que la gente aprenda sobre el kernel. http://kernelnewbies.org es un excelente lugar para comenzar a hacer preguntas y aprender cómo funciona el kernel.No puedo recomendar un libro, pero una vez que haya leído el material inicial en kernelnewbies, la fuente estará muy bien documentada.

Aparte de los buenos libros ya mencionados (El diseño e implementación de sistemas operativos es particularmente bueno), consiga un kernel de Linux versión 1.x, cárguelo en VMWare o VirtualBox y comience a jugar desde allí.

Necesitará dedicar mucho tiempo a explorar el código fuente.Para esto, echa un vistazo http://lxr.linux.no/ que es una versión enlazada navegable de la fuente y hace la vida mucho más fácil.Para conocer la primera versión de Linux (0.01), consulte 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 avanza de una versión a otra, consulte el Registro de cambios y profundice en aquellas partes que han cambiado para evitar tener que volver a leer todo nuevamente.

Una vez que haya dominado los conceptos, mire 2.0, luego 2.2, etc.Esté preparado para dedicar MUCHO tiempo al proceso.

Anteriormente había comprado estos libros por recomendación con el mismo propósito, pero nunca pude estudiarlos por mi cuenta, así que sólo los tomo como consejos de segunda mano.

Al notar la falta de BSD aquí, pensé en contribuir:

Yo no he tomado ninguno de los cursos, pero he escuchado hablar al Marshall Kirk McKusick en otras ocasiones y es realmente bueno en lo que hace.

Y, por supuesto, las páginas de manual de BSD, que son un excelente recurso ya que se mantienen en mayor medida que una página de manual promedio de Linux.Tomemos por ejemplo el uvm(9) página de manual, que describe la interfaz de memoria virtual en OpenBSD.

No del todo relacionado, pero también recomendaré el vídeo. Historia de las distribuciones de software de Berkeley ya que ofrece una buena introducción a las partes BSD de la historia y cultura de UNIX, así como muchas anécdotas divertidas de antaño.

¡Te recomiendo los kernels BSD!Los kernels BSD tienen muchos menos hackers, por lo que seguir su evolución es más fácil.Tanto los kernels de BSD como los de Linux tienen grandes hackers, pero algunas personas argumentan que la menor fama de BSD excluye a los novatos.Además, tomar decisiones de diseño es más fácil 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 opción sencilla que desea para su escritorio, pero debido a que se centra fuertemente 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, está bien".Desde ese punto de vista, la filosofía de NetBSD podría describirse como "No funciona a menos que sea correcto".

Si ha estado trabajando el tiempo suficiente, sabrá que NetBSD es un gran placer para aprender buena codificación.Aunque profesionalmente encontrarás más posibilidades con Linux

Cualquiera que sea la elección que elijas, empieza a unirte a sus listas de correo y sigue las discusiones.Estudie algunos parches y finalmente intente corregir sus propios errores.En cuanto a libros, busque artículos de Diomidis Spinellis y su libro.No es exactamente un libro sobre el kernel, pero tiene ejemplos de NetBSD y ayuda mucho a abordar software de gran tamaño.

No hay nada mejor que sumergirse en el código.Intente encontrar un controlador o subsistema que le interese y hurgue con él.Con herramientas como VMware Estación de trabajo Es muy fácil realizar los cambios que desee, tomar una instantánea de la VM y ejecutar el kernel modificado.Si el kernel entra en pánico al arrancar, ¿a quién le importa?Simplemente regrese a la instantánea y solucione el problema.

Para libros, lo recomiendo encarecidamente. Desarrollo del núcleo de Linux por Robert Love.Es un libro maravillosamente escrito: mucha información, organizada sensatamente y con humor...No es una lectura seca en absoluto.

Siga el consejo 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 distintas funciones en un sistema real.

Nadie parece haber mencionado que el código BSD es mucho más limpio y consistente.La documentación también es mucho mejor (como ya se mencionó).Pero como hay mucho juego con cualquier sistema que elijas, elegiría el que uses con más frecuencia.

Linux y Minix son divertidos de aprender.Si también desea saber cómo es un sistema operativo microkernel moderno, puede consultar QNX.La documentación completa está disponible online y es muy accesible.Por ejemplo, este libro en línea.

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 los aspectos internos del kernel de Linux y comprender cómo encaja todo. Además, fue muy divertido jugar con la forma en que interactúa con las herramientas estándar.

No lo he probado yo mismo, pero puedes ir a Linux From Scratch y comenzar a crear tu propia distribución de Linux.Suena como algo que tomará mucho tiempo, pero resultará en un conocimiento profundo de las entrañas del kernel de Linux y de cómo funciona cada parte.Por supuesto, puedes complementar este aprendizaje siguiendo cualquiera de los otros consejos aquí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top