The overall goal of this course is to understand the logical structure of a modern computer, from its basic building blocks to its more complex components. This knowledge is intended to provide the basis for system design and performance analysis, both for hardware and software systems. The concepts learned in this course are also foundational elements for the design of compilers and operating systems.
Computer systems are a combination of their hardware and software. Whether you intend to design the next breed of microprocessor, the next Java compiler, or the greatest C++ application, a computer scientist is best served by understanding what is going on under the hood of the computer. Why? Simply put, knowing how a program is translated into the electronics allows it to be more efficiently written. This course will address issues such as digital logic, machine representation of data, basic CPU and instruction-set architecture, memory organization, I/O interfaces, and architecture alternatives.
This course consists of a theory and a laboratory component. Both components involve classroom sessions and significant amounts of homework. Students are expected to read the assigned readings before class. During theory sessions we discuss remaining questions and problems. The homework assignments of the laboratory component complement the theory and allow students to practice and deepen their skills by solving well-focused problems. During the weekly laboratory sessions we introduce and discuss upcoming homework assignments and we review past assignments to clarify possible misunderstandings. Students can benefit most from this course if they thoroughly prepare for and actively participate in each session.
Andrew S. Tanenbaum, Structured Computer Organization, 6th Edition (required), Prentice Hall, 2012, ISBN: 978-0132916523.