This course is a broad introduction to computer science that focuses on
how a computer works and how programs run on computers. We examine the
hardware and software components required to go from a program expressed in
a high-level programming language like C or Python to the computer actually
running the program. This course takes a bottom-up approach to discovering
how a computer works, and introduces parallel and distributed computing
with a specific focus on parallelism for multicore and other shared memory
Topics include theoretical models of computation,
data representation, machine organization, assembly and machine code,
memory, I/O, the stack, the operating system, compilers and interpreters,
processes and threads, and synchronization. In addition to parallel
programming, we will discuss parallel computers and system-level support
for parallel computing.
CPSC 21. This course can be used to satisfy the
college's NSEP requirement.
Goals for the Course:
- To understand how a sequential or parallel program goes
from being expressed in a high-level programming language
to being run on the underlying system.
- To understand and analyze the systems costs associated with
- To understand the role of the operating system and
some of the abstractions it implements to support efficiently
- To understand shared memory parallel computing and to be able
to "think in parallel" algorithmically.
- To become proficient in using gdb and valgrind
to debug and examine program execution state.
- To design and implement solutions to large problems using the
C programming language.
- To design and implement parallel solutions
to programming problems that require synchronization using
This course is taught every semster. The content and structure is similar
across semesters. Spring semester has an extra week, and often one additional
lab assignment than the Fall semester.
My current or most recent offering: CS31: Fall 2017
My past offerings: Fall'15, Fall'13, Fall'12 (the first semester CS31 was taught)
See individual faculty webpages for other semesters' CS31 webpages. In
Kevin Webb's and
Vasanta Chaganti's pages).