CSCI 415 - Fall 2024
Systems Programming
Syllabus


Course Description from Catalog

The design and implementation of programs which provide robust and efficient services to users of a computer. Macro processors; scripting languages; graphical interfaces; network programming. Unix and X are emphasized.

Learning Outcomes

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

  1. Understand how the operating system interacts with, and manages resources, on behalf of applications.
  2. Learn how to write programs that use:
    1. File I/O and file systems
    2. Signals
    3. Process management
    4. Network communication
    5. Event-driven I/O
    6. Multiple-threads
  3. Understand the design and implementation of several system services, such as the shell, a cron service, a key-value server, and a chat server.
  4. Develop experience using systems-level development tools and languages, specifically Make and C.
  5. Gain exposure to systems-level development tools and languages, specifically the shell and Rust.

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. The course also includes short crash courses in shell scripting and Rust programming.

Prerequisites

Mechanics

We will use gradescope for project submissions, and 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.

Textbook and Readings

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)

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 (415)

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. I will count only your four 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 a student 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\% \]

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), then you can resubmit the project by 11:59pm 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. You may copy or lightly adapt snippets of source code from any site on the Internet or AI service, but you must cite the URL or service in a comment. That said, the majority of the project must be your own work and not from the Internet or an AI service.
  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.