CSCI 3410 - Systems Programming

Posted on January 8, 2022 by Gabriel Parmer

Instructional Team Contact info

Fall 2021 Class Time/Location:

Your Immediate TODO

  1. Sign up for the class’ Piazza – link in an email you should have received on 1/9/22. On Piazza, you’ll find links to the rest of the TODO items.
  2. Complete the “getting to know you” survey now. We cannot grade your work without this information.
  3. Find the Discord invite to our server, and join.
  4. Find a link to the first homework (HW0) via github classroom.

Course Overview

Learning Outcomes

Objectives - In completing this class, students will…

Fundamentally, students will understand that processes are manipulable data, that processes control and manage other processes, and that applications are composed out of libraries and processes.

Structure - This class is broken into two main activities: lectures and lab.

Direct Instruction and Independent Learning

Each semester, you’re expected to spend at least:

Covid Policy and Actions

This class will run in accordance to GWU’s policies around Covid. Please attend to your regular tests, the mask requirements, and actions should you be exposed or symptomatic. Please notify Gabe immediately if you are concerned about your well-being.

Course Prerequisites and Student Responsibilities


Responsibilities - Students must

I also need your feedback for parts of the class that aren’t working for you. We do our best in running the class, but certainly make mistakes, or overlook different aspects. Class evaluations are of limited use since they only are given at the end of the class. Please provide feedback using the linked feedback form on Piazza.

Professor and Instructional Staff Responsibilities

You should depend on the instructional staff (including Gabe) for the class to

These can be remembered as “we’re here to make it clear what you should do, what you should know, and what to do if you don’t feel like you know what you’re supposed to do or know”. If at any point, you have concerns about any of these, of if we’re dropping the ball on any of them, please let us know and we’ll do better. There are trade-offs made in the class (for example, homeworks are not formally specified as I don’t want them to be 50 pages each), but you always encouraged to ask questions and clarify.

Further, it is our intent that students from all diverse backgrounds and perspectives be well-served by this course, that students’ learning needs be addressed both in and out of class, and that the diversity that the students bring to this class be viewed as a resource, strength and benefit. It is my intent to present materials and activities that are respectful of: gender identity, sexuality, disability, age, socioeconomic status, ethnicity, race, nationality, religion, and culture. Your suggestions are encouraged and appreciated. Please let me know ways to improve the effectiveness of the course for you personally, or for other students or student groups.

Above all, it is important that this class provides an environment for learning and self improvement. Gabe takes this very seriously, so if it is not adequately serving that purpose, don’t hesitate to let him know why.

Your role!

Provide feedback. Many aspects of the class are new and experimental, thus they might require modifications throughout the course of the class. Because of this, all students must take the contents of the section below on “Professor and Instructional Staff Responsibilities” seriously: if something isn’t working for you, assume that the class needs a tweak, and contact the professor, or provide anonymous feedback. Gabe will take this feedback seriously.

Community and online social contract. As an increased part of the class is online, it is necessary that everyone conduct themselves respectfully and productively online. Please see the class’ Online Social Contract. The class will have a zero-tolerance approach toward disrespectful conduct, or harassment.

Take responsibility for your own education. Much of the work for this class will be more group-oriented than in normal instances of the class. If you burden your partner with most of the work, you are setting yourself up for failure. If you take on your partner’s responsibilities, you are setting them up for failure. The homeworks build on each other. The benefit of this is that by the end of the class you’ll laugh at how easy some of the earlier homeworks are as you’ve massively leveled up. The challenge is that if you don’t put in a genuine effort on each homework, you will find later homeworks increasingly intractable. If you don’t put effort in for each homework, you’ll create dis-proportionally more work for yourself in later homeworks. If you cannot carry your own weight, you will not be able to achieve the learning objectives for the class.

Also remember that your team members will change throughout the semester, and they happen to be the network you’ll use to help get a job. Not impressing them hurts your future opportunities.

Class Technologies

How you comport yourself online in the class just adhere to our online social contract. For the class we’ll use the following technologies for the specified purposes:

Please see the discussion about Academic Integrity below. A rule of thumb is that you should not post code on any discussion medium with reach beyond your group. We do not use blackboard.


If you need to be absent, please send me an email to let me know that you can’t make it, and please let me know why. If you know you’re going to be absent (e.g. religious holiday), try and let me know in advance, otherwise, let me know as soon as you can. If you’re sick, keep me updated on how you’re feeling if you can.

Office Hours

You must properly prepare for and present yourself at Office Hours.

Course Schedule

Homeworks for the class are generally due every week. Each homework is broken into a number of milestones. In the following, HW = homework; M or MS = milestone.

Date Week Topic Homework Due
C Programming
1/10 1 C Review HW0, HW1
1/17 2 (No Lab) C Memory Model HW2 HW0.M0
POSIX Abstractions
1/24 3 Processes HW1.M0
1/31 4 Descriptors, Pipes, and Signals HW3 HW2.M0
2/7 5 I/O: Filesystem I/O HW2.M1
2/14 6 I/O: IPC and Event Multiplexing
2/21 7 (No Lab) Exercises and Event Notification HW3.M0
Software and System Structure
2/28 8 Libraries - Static and Dynamic HW3.M1
3/7 9 Programming libraries and System Calls HW4 (week of 3/14) HW3.M2
3/21 10 Malloc and Memory Management HW3.M3
3/28 11 Memory/Injection Vulnerabilities
4/4 12 System APIs and FS HW5
Modern UNIX
4/11 13 Android
4/18 14 Containers: Namespaces, APIs, and FS HW4.M0, HW4.M1 (Extra credit)
4/25 15 (Two Mondays ☹ ) HW5.M0

The schedule for homeworks follows:

Week Day Homework Activity
\(X\) Thursday Homework Assigned
\(X+Y+1\) Thursday @ 11:59pm Milestone \(Y\) extra-credit deadline (\(+10\%\))
\(X+Y+2\) Monday @ 11:59pm Milestone \(Y\) deadline

The “Deadline”s in the weekly schedule above are for the final deadline, not the extra-credit deadline. Each homework will have at least one milestone. A milestone is a concrete set of objectives that progress toward completing the overall homework. Each milestone has a set of requirements/tests that must be satisfied for credits.

Generally, homeworks are assigned (in the “Homework” column) on week \(X\)’s Thursday, and milestone \(Y\) is due on week \(X+Y+2\)’s Monday at 11:59pm (in the “Deadline” column). Submissions of a milestone by Thursday at 11:59pm on week \(X+Y+1\) will result in \(+10\%\) extra-credit. Milestones will be graded separately, but often a milestone \(Y\) can only be satisfied if you finish \(Y-1\).


HW MS Description
HW0 M0 questionnaire, honesty, convetions, github
HW1 M0 key-value store w/ libc functions
HW2 M0 prefix trie w/ lexographic autocompletion
M1 prefix trie w/ history-based autocompletion
HW3 M0 shell: string processing of commands
M1 shell command execution and job control
M2 shell job control
M3 shell I/O redirection - FS & pipes
HW4 M0 IPC (w/ poll), routing, and server program activation
M1 Server reboot - Extra Credit
HW5 M0 Simple Valgrind

Course Material

Required reading. You must read through the material at the repo for class resources. This includes some intuition as to how to develop C, how to think about debugging and testing, and how to think about generating good code.

Lecture material. Lectures for the class are code-heavy. You might find the source for the lectures (or a pdf of the material) useful.

Textbooks. The required text book is Computer Systems: A Programmer’s Perspective, by Randal E. Bryant and David R. O’Hallaron. Though other editions should be OK, we’ll reference chapters in the 3rd edition.

Optional, but strongly encouraged resources:

A few additional resources:

Assignment Submission

All of your homeworks for this class will be submitted via github. The last commit must be done with the script that should be available in your homework repo in the util directory. This must be executed from the class server. You must then push to your github classroom repo in the main branch. Please do not make pushes to your repo after the version you want graded.

There are a huge number of errors that one can make, so I highly suggest that you do the following procedure. The script reminds you of many of these, but, when you submit an assignment, I suggest that you follow this procedure:

  1. git status to make sure that you have git added all of the intended files.
  2. git diff and git diff --stat to make sure that you’re committing what you think you are. Of note, check to see if you’re committing any printfs that are intended for debugging, not for program output.
  3. git commit and git push to upload your code to github.
  4. Go to the associated webpage for the repository, and make sure that the most recent commit is present in your repository.
  5. Use git clone ... to get a fresh version of the repository, build it, and run your tests. Students who omit this step get bad grades for very avoidable reasons. Always make sure that your submission matches what you think you’re submitting.


Only talk about your grades with Gabe. No other instructional staff have access to your grades. Grades will be assigned with the following proportions:

Category Percentage
Homeworks 70%
Tests/Quizzes 20%
Participation 10%

The milestone for which you receive the lowest grade will be counted as extra credit. This is to allow for sickness and other events beyond your control.

We’ll drop the lowest three quiz grades in formulating your test/quiz grade.

Homework Grade Modifications

The following modifiers apply to your grade on all homework milestones. These all assume that a homework is out of 100 points.

Your grade can be minimum 0%, but your maximum grade can be higher than 100% (with the extra credit). There is one exception:

Late Policy

The late policy for this class is strict. This is for two reasons:

  1. We aim to be fair. Once we get into the business of making exceptions, we lose the ability to be fair, and can (sometimes rightfully) get accused of bias. Uniform policies, applied to everyone is our means of ensuring fairness.
  2. Falling behind in this class is a slippery slope. As deadlines fall every week in the class, missing a deadline means that you have more work in the following week, which makes it less likely that you’ll be able to do it all. To succeed in the class, the number one optimization is to not fall behind. Please talk to Gabe if you’re concerned.

As such, the only acceptable excuses for late submissions are medical and family issues. I will strongly encourage you to use your module that will be counted as extra-credit if you miss a deadline so that you don’t fall behind on the coming deadlines. Generally unacceptable excuses include:

You get 0 credit for late work that is unexcused. However, once the grades are released, you can resubmit your code within seven days, rounded up to the closest midnight. For example, if the grades are released at 2:30pm on the 8th, resubmissions are due at midnight on the 15th (i.e. \(8 + 7 = 15\)). You will get 0 credit for submissions after this date.

We will grade the last commit before the resubmission deadline, and you will receive 50% of the credit on top of the original grade, rounded up to the nearest percent. For example, if you got a 43% on the initial deadline, and resubmit and get a 68%, your final grade (\(g\)) will be \(g = \lceil 43 + \frac{(68 - 43)}{2} \rceil = 56\).

Do not come to rely on the resubmission process. Homeworks are due every week or every other week, so it is very harmful to get behind on them, or to add more work to your schedule. Thus, our late policy is quite strict to discourage procrastination.

Please note that in terms of academic honesty, you cannot share your code with your peers even after it is due.

Testing your implementation:

You are required to test your own code. Our tests will attempt to test every edge case in the implementation. If you do not write code to test the edge-cases of the specifications, then you will lose credit. This is the largest reason why students get lower grades than they believe they deserve. If you believe that an error was made in grading, then please explicitly address why you believe your test cases are sufficient to test all cases. See the discussion about testing and debugging below.

Style and Code Craftsmanship:

You must adhere to the class’ style spelled out in the lecture notes. It is very important that you not only get your code working, but view your work as *fine code craftspersonship. If you want to understand a more complete set of style guidelines, see the Composite Style Guide.

Academic Honesty

Just as you can do a google search for code online, it is trivial for us to do the same. We have caught numerous people cheating in the past in this way. If you feel pressured about an assignment, please come see me instead of cheating.

You are not allowed to collaborate on the homeworks and the lab assignments. The group projects require collaboration within each group, but no collaboration between teams is permitted. Please refer to the academic integrity policy linked from the course web page. This policy will be strictly enforced. If you’re having significant trouble with an assignment, please contact me. If you have not signed the academic integrity statement for homework 0, you will not receive a passing grade for the class.


In the past, the only way that people have failed this class is to either not try (not do homeworks), or to cheat. There is almost no reason to cheat. Come to me, and we can discuss where you’re at, and what you have to do to make it through this difficult class!

Justification: Cheating hurts your ability to compete for CS jobs. Everyone came to college to learn. You learn by doing work to reinforce class ideas. Understanding ideas from class is nowhere near as effective at learning as applying those ideas in an implementation. Thus, you need to do your own implementation to be a competitive CS student in the real-world!

Cheating hurts your peers. Courses that are graded on a curve have the side-effect that if someone inflates their grade not by hard work, but by cheating, your good grade (should the Professor not catch you) will hurt the grade of all of your colleagues that put the work in.

Cheating also hurts the quality of the OS class in the long term, thus hurts all future generations of GW CS undergrads. If you cheat, especially using previous year student’s work, to the point where the Professor believes that they must develop new assignments every year, then those assignments will not be as strong. They will not meet learning objectives in a course like this. All future CS students will be less prepared for competing for the best jobs.

Please see additional information about university policies.

University Policies

Please find details about university policies regarding