The Soul of the Machine: An Introduction to Computer Architecture
The focus of this course is on the selection and interconnection of components to create a computer. There are two essential categories of components in modern computers: the hardware (the physical medium of computation) and the software (the instructions executed by the computer). As technology becomes more complex, the distinction between hardware and software blurs. We will study why this happens, as well as why hardware designers need to be concerned with the way software designers write programs and vice versa. Along the way, we will learn how computers work from higher-level programming languages—such as Java, Python, and C—down to the basic zeroes and ones of machine code. Topics include Boolean logic, circuit design, computer arithmetic, assembly language, machine code, memory hierarchies, and parallel processing. Time permitting, we will investigate the relationship between energy consumption and the rise of multicore and mobile architectures. Permission of the instructor is required. Students should have at least one semester of programming experience, preferably in C, C++, Java, or Python.