resumen - tipos de sistemas operativos y sus funciones
Contenido para la clase de sistemas operativos Linux (9)
Seré TA para una clase de sistemas operativos este próximo semestre. Los laboratorios tratarán específicamente con el kernel de Linux.
- ¿Qué conceptos / componentes del kernel de Linux crees que son los más importantes para cubrir en la clase?
- ¿Qué es lo que desea que esté cubierto en sus estudios que se dejó afuera?
Cualquier sugerencia sobre el kernel de Linux o el diseño general de los sistemas operativos sería muy apreciada.
Bueno, acabo de terminar mi curso de SO este semestre, así que pensé en tocarlo.
Estaba un poco molesto de que realmente no jugáramos con el sistema operativo real en sí, sino que simplemente hicimos la programación del sistema. Recomiendo tener los laboratorios en algo que está en el sistema operativo en sí, que es lo que parece ser lo que quieres hacer.
Sin embargo, un laboratorio que disfruté y encontré útil fue escribir nuestras propias rutinas libres de malloc. Fue difícil, pero bastante entretenido también.
Tal vez también cubra la carga de programas en la memoria y / o la configuración del administrador de memoria (como la búsqueda).
De hecho, acabo de tomar una clase que se ajusta perfectamente a su descripción (Diseño de sistema operativo con Linux) en la primavera. De hecho, me sentí muy frustrado porque sentía que el docente se centraba demasiado en los proyectos en lugar de ofrecer una comprensión más amplia. Por ejemplo, nuestro último proyecto giró en torno a futexes. Mi compañero y yo apenas aprendimos qué eran, lo pusimos en funcionamiento (un poco) y luego lo entregamos. Salí sin ningún conocimiento general de nada de ese proyecto. Ojalá uno de los proyectos hubiera sido escribir un controlador de dispositivo simple o algo así.
En otras palabras, creo que es bueno asegurarse de que se presente una buena descripción general, con todos los detalles que pueda, pero en general amplia. Sentí que mi maestra olvidó estas pequeñas áreas y nos hizo concentrarnos intensamente en ellas, mientras que al final NO obtuve esa gran comprensión general del funcionamiento interno de Linux.
Otra cosa que me gustaría señalar es que muchas de las razones por las que no retuve el conocimiento de la clase fue la falta de organización. Los temas surgieron de la nada una semana determinada y no había una hoja de ruta. Dale al material un flujo lógico. La organización mental es la clave para retener el conocimiento.
El subsistema de red también es bastante interesante. Puede seguir un paquete a medida que va desde la llamada del sistema de socket al cable y viceversa.
Las asignaciones divertidas podrían ser:
- crear un firewall de estado completo usando netfilter
- crear un equilibrador de carga HTTP
- diseñar e implementar un protocolo de tunelización simple
Hace poco tomé una clase de sistemas operativos y los proyectos me resultaron desafiantes, pero esenciales para comprender los conceptos en clase. Los proyectos también fueron divertidos, ya que nos involucraron en realidad trabajando con el código fuente de Linux (versión 2.6.12, aproximadamente).
Aquí hay una lista de algunos proyectos / conceptos bastante buenos que creo deberían cubrirse en cualquier clase de sistema operativo:
- La diferencia entre el espacio del usuario y el espacio del kernel
- Gestión de procesos (es decir,
fork()
,exec()
, etc.) - Escriba un pequeño intérprete de comandos que demuestre conocimiento de
fork()
yexec()
- Cómo funcionan las llamadas al sistema, es decir, cómo cambiamos de usuario a modo kernel
- Agregue una llamada de sistema simple al kernel de Linux, escriba una aplicación de prueba que llame a la llamada del sistema para demostrar que funciona.
- Sincronización dentro y fuera del kernel
- Implementar primitivas de sincronización en el espacio de usuario
- Comprender cómo funcionan las primitivas de sincronización en el espacio del kernel
- Comprenda cómo las primitivas de sincronización difieren entre arquitecturas de CPU únicas y SMP
- Agregue una llamada al sistema simple al kernel de Linux que demuestre el conocimiento de cómo usar las primitivas de sincronización en el kernel de Linux (es decir, algo que tiene que adquirir, por ejemplo, el bloqueo de la lista de tareas, etc. pero también hacer que Kmalloc sea algo donde no se puede hacer manteniendo presionado un candado (a menos que sea GFP_ATOMIC, pero no debería, realmente))
- Algoritmos de programación y cómo se lleva a cabo la programación en el kernel de Linux
- Modifique el planificador de tareas de Linux agregando su propia política de programación
- ¿Qué es paginación? ¿Como funciona? ¿Por qué tenemos paginación? ¿Cómo funciona en el núcleo de Linux?
- Agregue una llamada al sistema al kernel de Linux que, con una dirección, le dirá si esa dirección está presente o si se ha intercambiado (o alguna otra asignación que implique paginación).
- Sistemas de archivos: ¿qué son? ¿Por qué existen? ¿Cómo funcionan en el kernel de Linux?
- Algoritmos de programación de disco: ¿por qué existen? ¿Qué son?
- Agregue un VFS al kernel de Linux
La capa de Virtual File System es una necesidad absoluta para cualquier clase de sistema operativo Linux.
Tomé una clase similar en la universidad. El proyecto más frustrante, pero al mismo tiempo útil, fue escribir un pequeño sistema de archivos para el sistema operativo Linux. Hacer que esto funcione demore ~ 2-3 semanas para un grupo de 4 personas y realmente te enseña los pormenores del Kernel.
Memoria asignada E / S y la división de 1g / 3g frente a 2g / 2g entre el espacio de direcciones del kernel y el espacio direccionable por el usuario en sistemas operativos de 32 bits.
Limitaciones de la arquitectura de 32 bits en el tamaño del disco duro y lo que esto significa para el diseño de sistemas de archivos.
En realidad, todos los pros y los contras de ir a 64 bits, lo que significa y por qué, así como la historia y por qué aún no están ahí.
Otro buen tema (o posiblemente ejercicio para los estudiantes) sería considerar la virtualización. Especialmente "lguest" de Rusty Russel, que está diseñado como una simple introducción a lo que se necesita para virtualizar un sistema operativo. Los documentos también son buenos para leer.
Para los laboratorios, una cosa que puede ser genial es mostrarles el código real y discutir al respecto, hacer preguntas sobre qué piensan que las cosas se hacen de esa manera y no otra, etc.
Si estuviera nuevamente en la Universidad, ciertamente apreciaría más lecciones a fondo sobre primitivas de sincronización, concurrencia, etc. ... esas son cuestiones difíciles que son más difíciles de abordar sin una guía adecuada. Recuerdo que fui a un discurso de Paul "Rusty" Russell sobre spinlocks y otras primitivas de sincronización que era absolutamente radical, tal vez podrías encontrarlo en youtube y tomar algunas ideas.
Mi lista :
- Cuáles son las preocupaciones de un sistema operativo: Abstracción y extensión de la máquina física y administración de recursos .
- Cómo funciona el proceso de compilación, es decir, cómo se implantan las cosas específicas de arquitectura / código de máquina
- Cómo funcionan las llamadas al sistema y cómo pueden conectarse los módulos
- Gestión de memoria / Memoria virtual / Megafonía y todo lo demás
- Cómo nacen, viven y mueren los procesos en POSIX y otros sistemas
- espacio de usuario vs hilos del kernel y cuál es la diferencia entre procesos / hilos
- Por qué el diseño monolítico de Kernel se está volviendo tedioso y cuáles son las alternativas
- Programación (y algunos de los programadores alternativos / específicos del dominio)
- E / S , desarrollo de controladores y cómo se cargan dinámicamente
- Las primeras etapas de arranque y lo que hace el kernel para configurar el entorno
- Problemas con relojes, sistemas mmu-less, etc.
- ... Podría seguir ...
- Casi me olvido de las decisiones de diseño de IPC y Unix ''todo es un archivo''
- POSIX, por qué existe, por qué no debería
Al final solo pídales que revisen los sistemas operativos modernos de tanenbaum y también realicen estudios de casos en algunos otros núcleos como la configuración de micronúcleo de Mach / Hurd y tal vez algunas cosas distribuidas y exokernel.
Dar una amplia visión más allá de Linux también, reconozco
Para aquellos que son súper geek , la historia de los sistemas operativos y por qué son como son.