YouTube placeholder

Introduction to CSE 421/521

Operating Systems Briefly Defined

Operating System:
  1. A computer program that

  2. multiplexes hardware resources and

  3. implements useful abstractions.

The OS is just another computer program! (If a large, complex, mature and mission critical one.)

Multiplexing allows multiple people or programs to use the same set of hardware resources—​processors, memory, disks, network connection—​safely and efficiently.

Abstractions--processes, threads, address spaces, files, and sockets—​simplify the usage of hardware resources by organizing information or implementing new capabilities.

Motivating This Class

  • How many of you have participated in OS development?

  • How many of you regularly program in languages that use operating system abstractions directly?

  • And C is a dead language—​rightfully so!

  • So why study operating systems? Why is this class even offered? Why is it required?

Why Study Operating Systems?

  • Reality: this is how computers really work, and as a computer scientist or engineer you should know how computers really work.

  • Ubiquity: operating systems are everywhere and you are likely to eventually encounter them or their limitations.

  • Beauty: operating systems are examples of mature solutions to difficult design and engineering problems. Studying them will improve your ability to design and implement abstractions.

Why Program Operating Systems?

  • Design: programming operating systems stresses the importance of careful design and specification before coding begins. You will learn the value of design, probably the hard way.

  • Difficulty: operating systems are large existing code bases where new solutions have stringent performance requirements. Programming operating systems will make you a better programmer and improve all of your subsequent work.

  • Debugging: debugging operating systems is challenging due to their multi- threaded nature and the lack of typical debugging support provided to applications. Again, debugging operating systems will sharpen your debugging skills.

Course Structure

  • Conceptual learning…​

    • Lectures

    • Recitations

    • Exams

  • …​by doing (programming).

Learning Objectives: Conceptual

When you finish CSE 421/521 you will:
  1. understand the abstractions supported by modern operating systems

  2. be able to describe how operating systems policies and mechanisms safely and efficiently multiplex hardware resources

  3. be able to analyze historical, current, and emerging operating system designs and features

The main way we will know that you are learning is by your participation in class and recitations.

You will be tested for mastery on exams.

Conceptual Progression

  • Introduction to operating system abstractions and structure.

  • Abstracting and multiplexing:

    • the CPU—​interrupts, context, threads, processes, processor scheduling, thread synchronization.

    • memory—​memory layout, address translation, paging and segmentation, address spaces, translation caching, page fault handling, page eviction,

    • swapping.

    • storage—​spinning disks and Flash, spinning disk scheduling, on-disk layout, files, buffer cache, crash and recovery.

  • Virtualization.

  • Networking (time permitting)

Learning the Concepts

  • Attend class.

  • Come to class on time:

    • Music starts as soon as I can get into the room…​

    • Lectures will start at 2:05PM sharp and finish by 2:50PM.

  • Ask questions during class.

    • I’m very flexible about how much we cover this semester.

    • I would rather teach less and have everyone understand it.

    • Our back-and-forth during class is the one of the few indicators I have of how much you are absorbing…​


Figure 1. Modern Operating Systems by Andrew Tanenbaum
Figure 2. The C Programming Language by Kernighan and Ritchie

Material presented in lecture takes priority over anything you find in a book or online.

Learning Objectives: Programming

When you finish CSE 421/521 you will:
  1. be able to design and implement well-structured systems software

  2. utilize appropriate synchronization primitives

  3. identify and correct bugs in complex multi-threaded systems

  4. be able to formulate and test performance hypotheses

We will know that you are learning by your participation in class, recitations, and office hours, and your use of online testing resources.

You will be tested for mastery by each programming assignment.

Programming Progression

All due dates Friday @ 5PM EST.

  • ASST0: Introduction to OS/161—"Due" Friday 1/3/2017 @ 5PM.

    • Become comfortable using standard UNIX development tools.

    • Learn to navigate the OS/161 source tree.

    • Configuring, building and running your first kernel.

    • Nothing really to submit for this one.

  • ASST1: Synchronization Primitives—Due Friday 1/17/2017 @ 5PM.

    • Design and implement locks and condition variables.

    • Use them to solve several toy synchronization problems.

All due dates Friday @ 5PM EST.

  • ASST2: System Calls and Process Support

    • ASST2.1 (2/24/2017): ASST2 setup and first steps.

    • ASST2.2 (3/17/2017): Finish the job: implement file system system calls (open(), close(), read(), write(), lseek(), dup2(), chdir(), and getcwd()) and the process-related system calls (fork(), execv(), waitpid(), \_exit()).

  • ASST3: Virtual Memory

    • ASST3.1 (4/7/2017): Kernel memory management.

    • ASST3.2 (4/21/2017): TLB fault handling and sbrk().

    • ASST3.3 (5/5/2017): Paging to disk


  • OS/161 is an instructional operating system developed by David Holland at Harvard University.

  • It attempts to strike a balance between Linux and other extremely-mature systems—​too difficult to hack on—​and existing instructional operating systems frameworks—​not realistic enough.

  • Your OS/161 kernel runs in an emulator, sys161, which emulates an MIPS r2000/r3000 instruction set architecture (ISA).

  • Using sys161 allows us to simplify debugging and hardware support.

10,000 Hours

  • While many operating systems concepts are elegantly simple, implementing them is not.

  • Therefor, this class is not easy:

  • However, this class is also worthwhile:

    • 3.97 overall rating (2016). Website

  1. Everything you need to get started should be online.

  2. We will be updating things as we go.

  3. Lecture slides and notes are online in case you want to follow along in class.


  • Conceptual—(50%)

    • 15%--Midterm Exam

    • 35%--Final Exam

  • Programming—(50%)

    • 5%--ASST0

    • 10%--ASST1

    • 15%--ASST2

    • 20%--ASST3

Continuous Choose-Your-Own Grade Programming Evaluations

  • All assignment grading in CSE421/521 is automated.

  • Therefore…​ you can have your code graded repeatedly whenever you like.

  • Therefore…​ you can stop each assignment whenever you are satisfied with your grade.

Continuous Choose-Your-Own Grade Details and Caveats

  • Assignments are done in pairs, so find a partner who is interested in achieving the same grade as you are.

  • Note that we do not allow students to work alone except in extremely unusual circumstances.

    • "I want to work alone" does not represent one of these situations!

  • Assignments are cumulative and we will not distribute solution sets without a significant penalty.

  • Late submissions will also be penalized.


  • We will sign you all up for a mass email list.

  • We also have a Discourse forum linked off the website which is the best way to get help quickly.

Using Email

  • If you need to email the course staff (, please consider the following:

    • Is this information likely to be available on the website? If yes, go find it!

    • Is the answer to this question likely to benefit other students? If yes, use Discourse.

  • Before you email me directly, please also consider the following:

    • Is this something that the course staff could answer? If yes, email them.

  • Here’s the bottom line: the more time we spend answering repetitive email, the less time we have available to help you with real problems.

Getting Help: Recitations

  • Recitations this year will cover a mix of conceptual and assignment-driven material.

  • There are also screen casts on the website for each assignment. We may update them as we go along.

Getting Help: Office Hours

  • All TAs and Ninjas will be holding office hours.

    • We are hoping to have around 40 hours of office hours scheduled per week, meaning that you have plenty of opportunities to complete the challenging CSE 421 assignments.

  • Office hours are the best place to get help on the programming assignments.

  • CSE 421/521 office hours will be in Davis Hall in locations announced on the calendar, but probably near Davis 301B or in the Second Floor atrium.

  • Just come in and do the assignments during office hours—​that way, when you get stuck, you are in the right place.

Getting Help: Working in Pairs

Partner groups are jointly responsible for joint work.

  • If any part is plagiarized, both partners fail.

  • If any part is plagiarized, both partners fail.

  • If you have concerns about work your partner has submitted, immediately approach the course staff.

  • If you do not we will assume later that your consent was given.

  • It is entirely your responsibility to ensure that your team’s submission is fair and reflects your contributions.

Pair programming assignments for CSE 421/521 are very clear about what kinds of collaboration are permitted. We consider violating these expectations to be cheating.

Getting Help: Helping Each Other

  • The course staff will be working as hard as you—​and sometimes harder—​but there are many of you and few of us. Look to your left and your right: these are your comrades.

  • Good classes come through CSE 421/521 as a team.


  • Simple rule: talking about code is collaborating, talking in code (or exchanging code) is cheating.

    • Unless you are talking to your partner in which case anything goes.


  • I take cheating very seriously:

    • Not because I am vindictive and mean…​

    • …​ but because I believe in protecting and honoring those of you that work hard and play by the rules.

  • We will use an online service to detect and investigating code similarity.

    • It is very fast, so we can use it on every submission.

    • It is very accurate.

    • We will compare your assignment against everything we can think of: this years', last years', anything you can find online, assignments submitted at Harvard, etc.

    • I have a huge repository of old assignments now. If you can find it, I’ve already got it.

Keep Your Code Private

  • You will need a private Git repository that you and your partner can use.

  • Lots of options here:

    • GitHub has limited private repos for students.

    • GitLab and other Git providers also provide private repositories.

  • It does need to support deployment keys so that we can clone your repository during testing.


  • We catch and fail cheaters. Not for the assignment: for the entire class.

Created 2/17/2017
Updated 9/18/2020
Commit 4eceaab // History // View
Built 1/29/2017 @ 19:00 EDT