cs24-20fa Introduction

Introduction to Computing Systems (Fall 2020)

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 memory allocator
  • a garbage collector
  • several security exploits

Your Instructor’s Rationale

Adam likes to geek out on the material he’s teaching. So, he’s inserted a bit of what he thinks is cool into this course: Compilers and interpreters are cool. So, we’ll spend some time thinking about the low-level parts of a compiler. Security is cool. So, we’ll spend some time thinking about the “security mindset” and how to break things. Real-world software is cool. So, we’ll spend some time re-writing core pieces of the system.

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

Administrivia

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:

Grading

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

  • disk = 7%
  • jvm = 10%
  • asmgen = 13%
  • shellcode = 13%
  • malloc = 13%
  • gc = 8%
  • meltdown = 10%
  • passwd = 13%
  • final = 13%

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/3 of a late token for attending the lecture 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 compute-cpu2, we are not responsible for according deductions in your grades.

Submit QuickChecks For Credit

Submit OpenEndeds For Credit