CS 31 Introduction to Computer Systems

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 systems. 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.
Prerequisites: CPSC 21. This course can be used to satisfy the college's NSEP requirement.

Goals for the Course:

Course Webpages:

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 particular, see: Kevin Webb's and Vasanta Chaganti's pages).