C S 224-001: Computer Systems

Course Description

How a computer works to execute sequential code: low level data representation and abstraction, the relationship between C and assembly, computer architecture and pipelining, the memory hierarchy, dynamic memory allocation, and linking.

Real World Motivation

The recent meltdown vulnerability in all Intel processors from the last twenty years, regardless of the OS, brings to the forefront the main premise of this course: “what's under the hood" matters since it affects the correctness, performance, security, and utility of application programs. The key questions that we explore in the course are:

  1. How can a programmer use hardware abstractions to avoid defects in programs?
  2. What is the relationship between the software a programmer writes and what is executed on the underlying architecture? How does that relationship affect program performance? Security?
  3. Why is the memory mountain so critical to modern computing? How does it affect program performance? How should I use it in an application?
  4. How can I use my new understanding of computer systems to improve the performance of any code that I write?

The Department Learning Outcomes list specific competencies expected at the end of the course. 

Current (and future) students should carefully review the Class Policies as well as the Study Habits and Teaching Philosophy for the course.

Course Summary:

Date Details Due