<

Syllabus

[top]

Description & Goals

This course examines the logical design and programming aspects of operating systems and network communication. Topics covered include processes, threads, synchronization, deadlocks, memory management, virtual memory, file systems, and client-server network programming.

Goals

The overall goal of CSS 503, "Systems Programming" includes the ability to:

Prerequisite: 2.7 or better in CSS 502

[top]

Administrivia

Classes are Monday & Wednesday 6:00 pm to 7:45 pm held remotely via Zoom. Office hours are after class and Sunday afternoons from aproximately 1:30pm, or by appointment.

Office hours are public and informal (I will talk to almost anyone about almost anything). Anyone may sit in. If a private conversation is needed, a separate Zoom session can be arranged.

Office hours are generous; you are strongly encouraged to take advantage of them.

Instructor's email is morrisb9@u.washington.edu. Please use it sparingly only for matters that are important, urgent, and brief.

[top]

Textbooks

Course material is based on Operating System Concepts. 9th edition, Avi Silberschatz, Peter Galvin, and Greg Gagne. You may prefer the 10th edition, which is only available in EPUB format, but your instructor favors dead-tree editions for reading technical material.

Slides for the 10th edition are available at http://os-book.com/OS10/slide-dir/index.html.

Your instructor also likes Modern Operating Systems, 4th edition, Andrew S. Tanenbaum and Herbert Bos. Tanenbaum is also the author of the Minix operating system, which was designed for teaching. Minix inspired a young student by the name of Torvalds to write his own operating system based on Unix.

Textbooks are expensive. For the purposes of the course, you may be able to get by with less expensive options such as used books or earlier editions.

See also recommended supplementary texts

[top]

Assignments and Grading

Programming Assignment 1 10%
Programming Assignment 2 10%
Programming Assignment 3 10%
Final Project 20%
Midterm Exam 25%
Final Exam 25%
Instructor Discretion 5%
Total 105%

Turn in assignments using Canvas by 11:30pm on the due date. Acceptance of late assignments will be determined on a case-by-case basis. Generally, it won't be a problem if it's only a few days (e.g. due to demands of your day job), as long as the privilege is not abused.

Submit a single compressed tar or zip archive containing all source code with sample input and output files as appropiate. Include a README file with relevant notes and discussion (basically, as much or as little as necessary to show you got the pedagogical value of the assignment, generally no more than a page or so). Empirical results (such as timing measurements) may be reported in the README.

Include BUILD and RUN scripts for compiling on running your program(s).

Do not include compiled executables or large data files.

Unless otherwise stated, assignments are to be implemented in standard C or C++ (2011 or greater). Your solutions must be runnable on the machines in the Linux Lab (UW1-320). You may use your preferred development enviroment, but do your final testing on a Linux machine. There are some subtle differences between the toolsets under *BSD (including Mac) and Linux. The assignments will be graded on the instructor's laptop, but any subtle conflicts or incompatabilities will be resolved using the lab machines.

Compile-time errors will not be looked upon kindly. Always compile with the -Wall (all warnings1) -Werror (warnings are treated as errors), and -pedantic flags.

While no specific style is required2, expect to lose points if your code is painful to read. Variable names should be concise but descriptive3. Comments should enhance the code4. Consistency matters.

Since this course is on low-level programming techniques, pay attention to resource management. Avoid leaking memory or open file descriptors5. Check the return status of system and low-level library calls6.

Generally, unless there is a good reason otherwise, programs should be implemented to read from standard input (cin) and write to standard output (cout) and standard error (cerr). Standard I/O can be redirected, so you can script (automate) program execution. Do not submit screen captures.

While you are encouraged to discuss the assignments with your peers, do not crib off each other. Make sure you know where to draw the line. Blindly copying something you found on some website is an example of cargo cult programming and is never a good thing. In addition to citing all sources, do make sure you actually understand the solution. Your instructor hates filing academic misconduct paperwork and it makes him grumpy. Do not make your instructor grumpy. See the Academic Conduct section below.

Generic feedback about assignments will be provided in class. Individual feedback will be given on request during office hours.

If a grade is egregiously out of whack with your expectations, feel free to ask for another look. With limited time available for grading7, overlooking something is easy to do. Just be aware that a re-evaluation may cause the grade to go up or down.

Final grades may be adjusted at the instructor's discretion.

[top]

Policies

See the common STEM policies document: http://www.uwb.edu/getattachment/stem/about/stem-policies/classroom-policies-stem-fc-1-12-17.pdf for information on:

Class Conduct

As this course will be remote via Zoom, most of the usual in-class etiquette does not apply. Just keep your microphone muted when not speaking.

Live lectures are inherently interactive. Questions during class are encouraged. Use the Zoom chat to "raise your hand". At the instructor's discretion, answers may be tabled until the end of class or office hours if they veer too far off topic.

As this course focuses on technical knowledge vital to your future career in software development, the virtual classroom is a politics-free zone. As in the workplace, you may find yourself working with people who hold differing views on many controversial subjects outside the realm of software engineering. There are times and places to discuss such topics but the software engineering classroom is neither. You may be asked to cover or put away clothing, electronics, or other gear decorated with controversial, offensive, inflamatory, or simply distracting slogans.

Attendance and Class Participation

While attendance is not taken, to get the most out of the course, plan to attend class and be actively engaged.

If you have to miss any classes, it's your responsibility to keep up with the material. Get lecture notes from a peer or see the instructor during office hours.

Do not email the instructor just to tell him you won't be able to attend a lecture. It is not his problem.

Illness

If you have to miss an assignment due to illness, let the instructor know as soon as practical. Generally, a few days shouldn't be a problem, but do not abuse the policy. Anything longer will probably require a doctor's note.

A missed exam will require a doctor's note for make-up accommodation.

Email

Simple email questions might get a response if it is so urgent (in the instructor's opinion) that it cannot wait for the next class day or office hours. Complex questions are best saved for office hours.

The instructor has generous office hours. Please respect the instructor's time by not inundating him with email.

[top]

Academic Conduct

Please review the Student Guide to Academic Integrity.

Assignments and projects are to be done independently unless otherwise indicated. Their purpose is to help you understand complicated technical material that will aid your future career prospects, whether in industry or graduate studies.

The BUILD and RUN scripts are like cover sheets for your assignments. You will lose points by omitting them, but they are not part of the core pedagogical value of the assignment and do not need to be your original work. You may use any legally authorized material from any source for this purpose8 if properly cited.

There is a lot of good reference material on the interwebs. Refrain from seeking exact solutions to the assignments. If you happen to stumble upon anything suspiciously similar, let the instructor know as soon as practical. If it was in good faith, there should be no problem (likely with some additional work assigned to be fair). Bad faith leads to consequences. Attempting to disguise copying is evidence of bad faith.

When in doubt, cite your references.

In general, you will be graded on your own work, not on your ability to use a search engine. You won't be penalized for being resourceful, but you will be for not doing your own work. Use good judgement to determine where to draw the line.

Do not post assignments and solutions to any public websites or forums. Doing so potentially helps someone else cheat. Don't tempt them; it makes you an accomplice. Providing your solution to someone else is facilitation and carries the same penalties as plagiarism.

Limited distribution of assignments to family, friends, and potential employers is okay, as long as they are unlikely to take this course in future.

By all means, discuss the problem statement and help each other debug, but do your own design and coding. See the student honor code, particularly the section on academic misconduct. Know where to draw the line.

Cheating, when detected, will be referred to Student Conduct where a neutral third party will make a determination. Pending adjudication, the course grade for the accused will be "X" ("no grade submitted"). If affirmed, the minimum sanction will be a zero grade for the assignment and a record of the incident will go into the perpetrator's file. The university may impose additional sanctions, up to and including expulsion, depending on the seriousness of the incident and whether it has happened before.

Furthermore, if you do manage to cheat and get away with it, you may pass the course but you will fail your job interviews because you didn't learn vital material you needed to know. This does eventually catch up to you.

Do not disrespect your instructor's hard work by cheating. Office hours are generous and he wants you to succeed.

[top]

Special-Needs Students

To request academic accommodations due to a disability, please contact Disability Resources for Students at 425.352.5307, 425.352.5303 TDD, 425.352.5455 FAX, or at uwbdrs@uw.edu.

Religious Accomodations

Washington state law requires that UW develop a policy for accommodation of student absences or significant hardship due to reasons of faith or conscience, or for organized religious activities. The UW’s policy, including more information about how to request an accommodation, is available at Religious Accommodations Policy. Accommodations must be requested within the first two weeks of this course using the Religious Accommodations Request Form.

[top]

Tentative Schedule

Subject to change as the quarter progresses.

Week Date Lecture # Topic Assignment
1 Mar 29 1
Mar 31 2
2 Apr 5 3 Lab #1: Process Management
Apr 7 4
  • Processes (cont.)
3 Apr 12 5 Assignment #1: Convex Hull
due April 13
Apr 14 6
  • Threads (cont.)
4 Apr 19 7 Lab #2: Thread Synchronization
Apr 21 8
5 Apr 26 9 Assignment #2: Sleeping Barbers
due April 27
Apr 28 10
  • Midterm Review
6 May 3 11
  • Midterm
May 5 12
7 May 10 13
  • File System Implementation (cont.)
Lab #3: Unix Low-Level I/O
May 12 14
8 May 17 15
  • Distributed Systems (cont.)
Assignment #3: C Standard Library I/O
due May 18
May 19 16
9 May 24 17 Lab #4: Networking
May 26 18
10 May 31 19
  • Memorial Day (no class)
Final Project
due June 1
Jun 2 20
  • Virtual Memory (cont.)
  • Final Exam

Footnotes