CS 230 | SCS | UW

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 the compilation cycle.

Logistics

Audience

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

Normally available

  • Winter, Spring

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

  • Linux, MIPS Simulator

Typical reference(s) - not required but available online as an additional resource

  • D. Patterson, J. Hennessy, Computer Organization and Design, 2020

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

  • Work with basic logic gates to form circuits
  • 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
  • Understand the basic compilation steps

Typical syllabus

Introduction (1 hour)

Data representation and arithmetic (9 hours)

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

Assembly language (10 hours)

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

Basic processor design (5 hours)

  • Datapath, pipelining, hazards

Memory and I/O devices (5 hours)

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

Build and Execute (6 hours)

  • DFAs, NFAs, RE
  • Context Free Grammars
  • Parsing
  • Assembler: opcodes and symbol table
  • Linker: import/export symbols, relocation
  • Compiler: control flow & arithmetic expressions