En general, disfruté la clase y pensé que era bastante buena.
Lo tomé cuando era un estudiante de segundo año. Lo tomé porque tenía un par de amigos que lo tomaron y escuché algunas buenas recomendaciones. Estaba un poco nervioso al principio; Era mi primera clase en el MIT con una codificación seria, y no había tomado ninguno de los cursos previos. Sin embargo, el requisito previo real resultó ser la familiaridad con C y el ensamblaje, y lo tenía, así que me embarqué bastante rápido.
La carne de la clase fue una serie de laboratorios donde construiste un sistema operativo llamado JOS. Los primeros laboratorios hacen cosas como configurar la memoria virtual; luego haces cosas como llamadas al sistema, gestión de procesos, sistema de archivos y redes. No construimos el sistema operativo desde cero. El curso proporcionó una gran cantidad de código y básicamente tuvimos que “completar los espacios en blanco”, es decir, implementar algunos de los métodos de acuerdo con algunas especificaciones. Pero, en general, tenía que saber qué estaba pasando para hacer esto bien.
De vez en cuando te encuentras con un error realmente difícil. Puedo recordar algunos que tuve. En un caso, resuelvo un conflicto de fusión en mi repositorio git un poco descuidadamente; esto causó que un par de líneas estuvieran fuera del orden correcto y las cosas salieron mal y me tomó mucho tiempo darme cuenta por qué. Otra instancia de un error fue cuando estábamos trabajando en la concurrencia. Lo que pasa con los errores de concurrencia es que no son deterministas y solo aparecerán muy raramente, por lo que son muy difíciles de depurar.
- ¿Por qué el 10 viene después del 9? ¿Por qué 11, 12 o cualquier otro número no puede venir después de 9?
- ¿Cómo es asistir a la Universidad de Temple?
- ¿Cómo es tomar esa secuencia de Física Avanzada (105-106) en Princeton?
- ¿Cómo es tomar la secuencia 8.04-6 (física cuántica) en el MIT?
- Si pudiera ordenar un curso académico existente que todos los estudiantes universitarios tendrían que tomar, ¿cuál sería y por qué?
La clase se ejecutó sin problemas y se proporcionaron scripts de prueba, por lo que fue fácil verificar que había hecho todo correctamente, una vez que lo hizo.
No pensé que la clase fuera una gran cantidad de trabajo para la mayoría del semestre, ya que, nuevamente, la mayor parte del trabajo solo involucraba completar algunas funciones para especificar. La mayor parte del trabajo se dedicó a establecerse en la base de código en la que estaba trabajando. Esto era menos cierto hacia el final: en el último laboratorio, tuvimos que construir nuestro controlador de red casi desde cero con nada más que la documentación técnica E1000. Luego estaba el proyecto final, que era completamente abierto, que quizás haya terminado para terminar. (La temporada final del proyecto siempre es así, jaja. @ [ Correo electrónico protegido] ).
La clase también tenía tareas de lectura semanales sobre la investigación de vanguardia en diseño de sistemas operativos. Lamento decir que probablemente no tomé tanto de esto como pude (y esto se demostró en la final …) porque generalmente no soy muy bueno en estas tareas de lectura.
En general, fue una gran clase y aprendí mucho sobre cómo funcionan los sistemas operativos y qué tipo de cosas necesitan administrar.