cs24-22fa Introduction

Introduction to Computing Systems (Fall 2022)

Welcome to CS 24! There are many lenses to study computer systems through, but, in practice, traditional introductory systems courses focus on one of the two following perspectives (to the exclusion of the other one):

The Programmer’s Perspective

You are a \(\{\texttt{Java},\;\texttt{Python},\;\texttt{C++},\;\dots\}\) programmer, and you want to write fast, safe programs that might interact with your OS.

The System Builder’s Perspective

You are a “system’s person” and you want to understand how your entire computer works by building the pieces one by one.

Course Goals and Learning Outcomes

In CS 24, we aim to satisfy both customers’ appetites by blending these perspectives together.

You will learn…

  • realities that will change how you program
  • how to interact with the OS
  • how to write concurrent programs
  • how to write code with a security mindset
  • what you need to take more systems courses

You will build…

  • a (java) virtual machine
  • a small compiler
  • a small part of an OS
  • a memory allocator
  • a garbage collector
  • several security exploits

Your Instructor’s Rationale

Adam likes to geek out on the material they’re teaching. So, they’ve inserted a bit of what they think is cool into this course:

By the end of the course, you will be able to:


Now, we’ll go through the obligatory “administrivia” for the course.

Our Requirements

The following is a tight list of pre-requisites for this course. If any of these do not apply to you, do not take CS 24 this term.

Our Promises

As a consequence of our strict list of pre-requisites, we will promise the following on our end (assuming you meet the pre-requisites):

False Expectations

We have noticed some common false expectations of this course. So, we want to explicitly remind you that this course is not any of the following:


Your grade will be calculated using the following percentages for each assignment:

  • disk = 7%
  • jvm = 7%
  • bomb = 6%
  • asmgen = 11%
  • shellcode = 11%
  • malloc = 15%
  • gc = 1% (extra credit)
  • weensyos = 11%
  • meltdown = 6%
  • passwd = 11%
  • final = 15%

Please note that there is no way to receive a D in this course. Any score at or below 69% is considered an F, 69-70 is a D+, 70-80 is some kind of C, 80-90 is some kind of B, and 90-100 is some kind of A.

Re-grade Requests

Please carefully consider the following three warnings before asking for a re-grade:

To maintain consistency, all regrade requests should go directly to Adam via e-mail. Do not attempt to contact TAs about grading questions.

Late Tokens

In this course, you can earn late tokens (which are redeemable for a no-questions-asked 24 hour extension) for mastering the material in each lecture/reading. For each topic, you will earn 1/6 of a late token for attending the lecture and 1/6 of a late token for answering at least one question correctly on the lecture check-in. You may not go into late token debt (though mental or physical health concerns need not use late tokens at all). You may only use up to two late tokens on any given assignment.

The Course Plan (aka the five lies)

In this course, we will work our way up the “abstraction ladder” specifically emphasizing things that all programmers need to know. We’ll pay special attention to uncovering the truth behind the lies. “What lies are those?” you might ask…here’s a few important ones we hope to dispel throughout the term:

In this course, we will limit our discussions in the following ways:

We have a reference machine set up which you should use for all of the projects. The pre-test includes a section on getting this environment set up.

Feedback? Questions?

Did you know you can leave feedback or ask questions using the annotation tool on the top right of every page on this website? Check it out!

If you do not use labradoodle, we are not responsible for according deductions in your grades.

Submit QuickChecks For Credit