The JOS operating system is a Unix-like OS whose skeleton code is provided by the MIT 6.828 course material, but we have to do all the hard work. We learned, in detail, virtual memory, kernel and user mode, system calls, threads, context switches, interrupts, interprocess communication and the interface between software and hardware. Most importantly, we studied the interactions between these concepts, and how to manage the complexity introduced by the interactions. There are 6 major components, each correspond to an individual lab, in the JOS project.
Booting
Memory management
User-level environments
Preemptive multitasking
File system and spawn
Network and web server
This is the first time I dealt with the underlying infrastructure of real operating system and interfaces between software and hardware. I spent a great deal of time reading Intel x86 reference manuals and assembly language programming guide as preparation for the project. In the process, besides implementing particular functionality of JOS, what's more important is that I need to read thousand lines of code to obtain a macroscopic understanding of JOS's internal structure.
MiniJava, a subset of Java language, is a famous educational compiler project brought from UCLA CS 132 course. In this project, we need to construct a compiler which compiles Java-like MiniJava source code into MIPS assembly. Aside from semantic analysis, we have to implement all the essential parts that constitute a modern compiler including intermediate representation design, high level language translation and simplification, liveness analysis, register allocation and activation records. The assembly code produced by MiniJava compiler will be tested on SPIM MIPS simulator.
When I took compiler theory course last year, what attract me the most is Automata theory used in semantic analysis. We studied various kind of syntaxes and their derived grammars. The automata theory makes the process of parsing these complex syntaxes systematic and efficient. In my personal opinion, it is a bridge between reality and theories (Graph theory, LR-attributed gramar). However, what a pity that I did not have a chance to implement syntax parser myself in this project. But I am still looking forward to construct a C-like compiler starting from nothing.
Metacircular Evaluator is the core conception in "Structure and Interpretation of Computer Programs" which was used as textbook in MIT 6.001. It introduced the basic abstraction for Lisp language family model and syntax analysis/evaluation process on Lisp sources. The evaluator is written for a particular dialect of Lisp (Scheme), it contains the essential structure of an evaluator for any expression-oriented language designed for writing programs for a sequential machine. Nevertheless, this simple evaluator is adequate to execute most of the programs in the book we mentioned before. In order to highlight the evaluation procedure utilizing substitution model, I completely rewrite the whole structure of the original sample evaluator in the book. The final version of mine featured neat and clean demonstration of calculation chain and environment scope. You will have a detail illustration in my report (in Chinese, last chapter).