A well-rounded Computer Science major should not only have an understanding of how software systems work, but also be able to reason about the performance and correctness aspects of these systems. To do this, one needs to be familiar with how the contemporary computer systems are organized and the building blocks that are common across all computer systems, which is the primary objective of this course.
The course will introduce you to the engineering fundamentals and quantitative cost / performance tradeoffs that are inherent in the design of modern computing systems. During the semester. We will also take a peek at the basic building blocks of these systems, at the logic level, as well as the architecture level. As a result, you should be able to develop an appreciation of why a software system behaves the way it does, both in terms of performance as well as correctness, on a given computing platform.
Partial list of topics that will be covered in this course
Introduction to Computer Organization; Introduction to Instruction Set Architecture (ISA); RISC vs. CISC; Performance Metrics; Instruction Representation in Computers; Addressing Modes; Number representations; Computer Arithmetic: Addition, Multiplication, Division; Introduction to Digital Logic and Design of Common Logic Blocks; Introduction to Assembly Programming; Processor Architecture; Pipelining Basics, In-Order and Out-of-Order pipelines; Data and Control Hazards; Cache Basics; Cache Hierarchies; Cache Coherence; Introduction to Virtual