Courses/Computer Science/CPSC 355.W2014/Lecture Notes/Overview

= Course Overview =

This course is an introduction to computer architecture and organization via the programmer's perspective. It treats the computer architecture (a set of design decisions about the CPU organization and structure) as an API.

The theme of this course is "The ABI as an API": the Application Binary Interface exports a particular set of promises and contracts to assemblers, compilers, programmers, systems developers, and OS kernel authors. Because of these promises (i.e., the functionality that a CPU wants to export to user and system programs), the architecture is then forced into certain design decisions. As an example, an instruction's width and the number of bits it dedicates to an opcode has implications for the actual structure of the computer organization itself as well as a concomitant influence on the type and number of instructions that are available to user programs.

Students should emerge from this course with:


 * Knowledge of Computer Organization (general architecture and system resources)
 * An understanding of architectural design concepts and themes (e.g., RISC vs. CISC)
 * Facility with Numerical notations and common number systems
 * Knowledge of an assembly language (e.g., SPARC, x86)
 * Practice with an assembler
 * Practice with a debugger and understanding the execution of assembly-level programs
 * An appreciation of ELF as a contract between a compiler and the CPU, as aided by the OS, for loading and running user--level programs
 * An appreciation for how the properties of a machine architecture influence the job assemblers and compilers do
 * A preliminary understanding of how certain architectural features provide support for or influence the nature of modern operating systems (such as defining memory spaces, servicing important events, and support multiplexing of resources).

This course is all about establishing connections between the machine level properties and organization of hardware and the common programming primitives that developers and students take for granted.

The ABI: The ISA as an API. Establish the link between source and machine code. Two hops.

Relationship to other CPSC topics:
 * operating systems
 * programming languages and translators
 * CPSC 359

Pedagogy: Learn the Pattern via the Comparison: "Differential Conceptualization"

Major Demonstration themes are to show the translation of source to assembly code: what does this line of code look like in assembly? Why? What does this imply about the machine architecture itself?

GDB as a viewer of execution (not just a mystic debugger). Write programs and run them (only) in gdb.

Write an assembler to understand the translation process.