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.
Logistics
Audience
- 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