Revised December 11, 2013

CS 230: Introduction to Computers and Computer Systems

General description

This course introduces hardware and software concepts used in computer systems. Specific topics include machine-level programming, memory organization, and basic I/O mechanisms.



  • 2nd-year students with an interest in Computer Science
  • Not open to Computer Science students

Normally available

  • Winter

Related courses

  • Predecessors: One of CS 116, 136, 138, 146, not open to Computer Science students
  • Successors: CS 338, CS 436
  • Conflicts: CS 241, CS 251

For official details, see the UW calendar.

Software/hardware used

  • UNIX, MIPS Simulator

Typical reference(s)

  • D. Patterson, J. Hennessy, Computer Organization and Design, 4th ed., Morgan Kaufmann

Required preparation

At the start of the course, students should be able to

  • Follow programs written using imperative control flow
  • Write simple imperative programs using lists, iteration, and array indexing for both read and write (mutable memory model)
  • Use basic algebra, calculus, and probability (for performance analysis)

Learning objectives

At the end of the course, students should be able to

  • Write short machine- and assembly-language programs to perform simple data manipulation
  • Describe data representations used by computer hardware at the bit level, operate on these representations, and compute their values
  • Explain some simple processor implementation optimization techniques, in particular pipelining, and how differences in code ordering can impact performance for processors using these optimizations
  • Compare basic memory and I/O architectures and how they can impact performance
  • Compare various forms of multiprocessing computing platforms
  • Explain the basic functionality and components of an operating system

Typical syllabus

Introduction (2 hours)

Assembly language (8 hours)

  • Fundamental operation and components of a computer
  • Registers vs. memory / control flow / indirection
  • Build process, declarations, assembler directives
  • Stacks, subroutines, arrays

Data representation and arithmetic (4 hours)

  • Binary representation of integers, bit operations
  • Other representations: ASCII, UTF8, strings, floating point

Compiling and linking (4 hours)

  • Assembler: opcodes and symbol table
  • Linker: import/export symbols, relocation
  • Compiler: control flow & arithmetic expressions

Basic processor design (4 hours)

  • Datapath, pipelining, hazards

Memory and I/O devices (6 hours)

  • Caching and virtual memory
  • Secondary storage
  • I/O mechanisms: programming, interrupt, DMA, parallel vs. serial, etc.

Multiprocessing (6 hours)

  • Basic concurrency concepts: synchronization and mutual exclusion
  • Scalar vs. superscalar processing
  • Hardware threading
  • Distributed parallel systems

Operating systems (2 hours)

  • Brief overview of components