This course examines key computational abstraction levels below modern
high-level languages; number representation, assembly language, introduction
to C, memory management, the operating-system process model, high-level
machine architecture including the memory hierarchy, and how high-level
languages are implemented. We will develop students’ sense of “what really
happens” when software runs — and that this question can be answered at
several levels of abstraction, including the hardware architecture level,
the assembly level, the C programming level and the Java programming level.
The core around which the course is built is C, assembly, and low-level
data representation, but this is connected to higher levels (roughly how
basic Java could be implemented), lower levels (the general structure of
a processor and the memory hierarchy), and the role of the operating system
(but not how the operating system is implemented).