linux - ventajas - tipos de kernel
¿Qué partes del kernel de Linux puedo leer para divertirme? (12)
Es posible que desee leer o leer un libro que describe el kernel de Linux antes de profundizar en el kernel de Linux.
Los libros que se me ocurren son:
La programación no es mi trabajo principal, aunque lo disfruto y a veces me pagan por ello. Durante muchos años he estado escuchando sobre Linux y mis amigos me han mostrado muchos * nixes (o * nici?), Aunque me quedo con Mac OS.
¿Crees que hay partes del kernel de Linux que podría disfrutar mirando, que me ayudarían a entender de qué se trata todo esto? Por ejemplo, ¿cómo Linux es diferente de Darwin?
Crecí con ensamblador y DOS, por lo que cosas como interrupciones o C de bajo nivel no deberían ser barreras para la comprensión. Pero al final estoy más interesado en los conceptos de alto nivel, como el enhebrado o la pila de conexiones en red: sé que los diferentes sistemas operativos los hacen de forma diferente. Y estoy buscando algo divertido, fácil y agradable, como leer a altas horas de la noche.
(Nota: hizo un CW, por las dudas)
Actualización: busqué algunos documentos y comencé a leer:
Esto debería aparecer algún código interesante cuando se ejecuta en el directorio src:
grep -ir "fixme" *
también intente con otros términos cómicos, mierda, mierda, f ***, pingüino, etc.
Ha sido recomendado por algunas personas que v0.0.1 de Linux es el más fácil de entender.
Sin embargo, si buscas buena fuente de núcleo para leer, no iría con Linux, es una bestia de pirateo (es como decir que las fuentes de GCC son "divertidas"). En su lugar, puedes probar Minix o una de las BSD (Darwin es básicamente una rama de NetBSD iirc) o incluso uno de los muchos clones gratuitos de DOS si todo lo demás da un poco de miedo.
Intente leer el código que implementa estos dispositivos de caracteres: / dev / zero / dev / null / dev / full
Y tal vez los generadores de números aleatorios si está inclinado. El código es sencillo y más simple que todos los demás controladores de dispositivo ya que no toca ningún hardware.
Comience en drivers / char / mem. *
Los comentarios en el kernel pueden ser bastante divertidos. Hay algunos consejos sobre dónde encontrar los mejores en kerneltrap.
arch / sparc / lib / checksum.S- / * Sun, simplemente no puedes vencerme, simplemente no puedes. Deje de intentarlo, arch / sparc / lib / checksum.S: * darse por vencido. Lo digo en serio, voy a patear la mierda viviente arch / sparc / lib / checksum.S- * fuera de ti, se acabó el juego. * /
Necesita volver a definir la palabra ''diversión'' en su contexto. :)
Dicho esto, el kernel de Linux puede ser demasiado monstruo para asumir. Es posible que desee comenzar con algunos núcleos académicos o más primitivos para familiarizarse primero con lo que está sucediendo. También puede considerar el libro de Jolix .
Por diversión, creo que también se puede ver a Minix, no es exactamente Linux, pero los sistemas operativos modernos de tenenbaum son una buena lectura.
Probablemente saques más provecho de leer un libro sobre la teoría del sistema operativo. En cuanto al código fuente, no tengo ni idea, pero podría descargar fácilmente la fuente del kernel de Linux y ver si puede encontrar algo que le atraiga.
Yo mismo, siempre he encontrado el código de programación de tareas un poco emocionante: - /
Me parece que necesitas conseguir un hobby fuera de la industria. O una vida :-)
Yo recomendaría mirar LXR . Hace que sea más fácil seguir el flujo del código (no tiene que buscar cada función que se llame, bueno, sí, pero el sitio lo hace por usted).
Algunos puntos de partida para la versión actual (2.6.30):
-
start_kernel()
-start_kernel()
como el equivalente del kernel demain()
. Esta función inicializa casi todos los subsistemas del kernel; sígalo para ver en código lo que ve desplazándose en la pantalla durante el arranque. - entry_32.S : llamadas e interrupciones del sistema (versión x86-32, que debería estar más cerca de lo que usted sabe; tenga en cuenta el uso del dialecto de ensamblaje de AT & T en lugar del dialecto Intel al que podría estar más acostumbrado).
- head_32.S : el punto de entrada del kernel. Aquí es donde comienza el núcleo después de cambiar al modo protegido; al final, llamará a
start_kernel()
. - arch/x86/boot : el código de arranque en modo real. Comienza en el ensamblaje ( boot/header.S ), pero rápidamente salta al código C (comenzando en boot/main.c ). ¿La inicialización en modo real (principalmente llamadas BIOS que deben realizarse antes de pasar al modo protegido)? se compila utilizando un extraño truco de GCC (
.code16gcc
), que permite la generación de código de 32 bits en modo real. - arch/x86/boot/compressed : si alguna vez se preguntó de dónde viene el mensaje "Descomprimir Linux ...", viene de aquí.
linux-0.01.tar.gz es histórico Kernel y bueno para empezar
es simple y pequeño y mejor para empezar a leer
(También tiene void main (void) En lugar de start_kernel () lol: D)
Algunos trucos simples que podemos aprender, como
#define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
...
#define min(x, y) ...
...
#define container_of