CSCI 415/515 - Fall 2022
Systems Programming
Syllabus


Course Description

This course will help you develop a relatively deep knowledge of the Linux/Unix userspace programming environment, and how a userspace process interacts with the operating system kernel. Topics covered include:

By the end of this course, you will have a better understanding of how various systems and systems-level tools - such as the shell, a cron service, a key-value server, and a chat server - are implemented at the programmatic level.

This course is programming-intensive: you will develop several projects that incorporate the above topics. You will primarily use the C programming language to implement these projects. Time-permitting, the course may also cover shell scripting and the Rust programming language.

Prerequisites

Mechanics

Generally, we will use gradescope for project submissions, and Blackboard for the exam submission. We will also use Blackboard for any online discussions, for posting any lecture recordings, as well as for tracking grades. Otherwise, the course materials will be published via this website.

Equipment

You are free to develop the projects using whatever setup you like. The official setup is of course the gradescope environment, which is a standard Ubuntu Linux 22.04 system. The projects themselves have very few dependencies, so any recent Linux distribution will likely suffice.

If you wish, you can develop your projects on the CS department's Linux lab, which allows for remote access. If you do not already have an account, please follow the instructions for requesting access.

Reading

The course textbook is:

The Linux Programming Interface
Michael Kerrisk
No Starch Press, October 2010, ISBN-13: 9781593272203
(free online access via William & Mary library)

Time-permitting, I will also include "crash courses" in shell scripting and the Rust programming language.

For shell scripting, I will reference:

Shell Programming in Unix, Linux and OS X, 4th edition
Stephen Kochan
Addison-Wesley Professional, 2016, ISBN: 0-13-449669-8
(free online access via William & Mary library)

For Rust, I will reference the official online book

If you need to brush up on C programming, the following books may be useful:

  1. C Programming: A Modern Approach (2nd Edition)
    K. N. King
    W. W. Norton & Company, 2008, ISBN-13: 978-0-393-97950-3

  2. Programming in C (4th Edition)
    Stephen Kochan
    Addison-Wesley Professional, 2014, ISBN-13: 978-0321776419
    (free online access via William & Mary library)

  3. C In Easy Steps (5th Edition)
    Mike McGrath
    In Easy Steps Limited, 2018, ISBN: 9781840788402

  4. Head First C
    Dave Griffiths and Dawn Griffiths
    O'Reilly Media, Inc., 2012, ISBN: 9781449399917
    (free online access via William & Mary library)

Graded Materials and Grading

The course has six programming assignments and a final exam. The programming projects account for 70% of your grade, and the final exam the remaining 30%.

Each programming assignment is scored out of 100 points and carries equal weight. For undergraduates, I will count only your four best assignments, and for masters students, your five best assignments. If a student submits more than this required number, then the student's lowest scoring assignment(s) will be counted as extra credit at 50% of their value.

For instance, if an undergraduate submits five assignments with scores of:

and earns an 87 on the final exam, then the student's total final score is:

\[ \left(\left(\frac{(100 + 85 + 80 + 75) + (0.5 * 60)}{400} \times 0.7\right) + \left(\frac{87}{100} \times 0.3\right)\right) \times 100\% = 90.9\% \]

The final score for a master's student with the same set of scores would be:

\[ \left(\left(\frac{(100 + 85 + 80 + 75 + 60)}{500} \times 0.7\right) + \left(\frac{87}{100} \times 0.3\right)\right) \times 100\% = 82.1\% \]

Your final numeric grade will be mapped into a letter grade "on the curve." Generally, 90 and above is an A; 80 to 89.99 is a B, and so on. I will adjust this scale downward as necessary.

There are no project extensions: every project is due on its due date. If you received a score of less than 80 points on a project (or simply did not submit), and the project is autogradable (my intent is that all will be), then you can resubmit the project by 7am on December 13th to receive up to 80 points. In other words, even if a resubmission passes all of the unit tests, its final score is capped at 80. Resubmissions can also count as one of the "extra credit" projects.

Nearly every project will have extra credit points. I also plan to post one or two smaller assignments which are purely for extra credit toward projects.

While this is the initial grading plan, I reserve the right to adapt this plan throughout the semester to best meet the needs of the class.

Honor Code

William & Mary has a significant tradition in its honor code, stated below:

As a member of the William & Mary community, I pledge on my honor not to lie, cheat, or steal, either in my academic or personal life. I understand that such acts violate the Honor Code and undermine the community of trust, of which we are all stewards.

For this course, programming assignments must be completed on your own. The operative rule is that you may consult with your classmates on general issues about an assignment, but code remains private. You should neither show another your program source code, nor look at another's source code. Beyond that, you should adopt an "empty hands" attitude toward collaboration: talk about the project as you wish, but leave the conversation with nothing written.

There are three corollaries to this rule:

  1. Do not post your code on a public repository.
  2. If you copy or lightly adapt source from any site on the Internet, you must cite the URL in a comment.
  3. If you come to me or the TA for help, we will not "eyeball debug" your code; that is, for all but the most trivial problems for which you ask for help, we won't look at your source code. Short of looking at your source code, I'm more than willing to help you design and debug your program.

I reserve the right to use an automated service to screen project submissions for cases of code sharing.

Attendance

I do not take attendance: attendance and classroom participation are not a component of your final grade.

Accommodations

William & Mary accommodates students with disabilities in accordance with federal laws and university policy. Any student who feels they may need an accommodation based on the impact of a learning, psychiatric, physical, or chronic health diagnosis should contact Student Accessibility Services staff at 757-221-2512 or at sas@wm.edu to determine if accommodations are warranted and to obtain an official letter of accommodation. For more information, please see www.wm.edu/sas.

As per the university's guidance, if you have a religious observance that conflicts with a deadline, please notify me as soon as possible so that I can attempt to make an appropriate adjustment.