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.
The overall goal of CSS 503, "Systems Programming" includes the ability to:
Prerequisite: 2.7 or better in CSS 502
[top]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]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]
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]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:
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.
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.
A missed exam will require a doctor's note for make-up accommodation.
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]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]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.
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]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 |
|
||
3 | Apr 12 | 5 |
Assignment #1: Convex Hull
due April 13 |
|
Apr 14 | 6 |
|
||
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 |
|
||
6 | May 3 | 11 |
|
|
May 5 | 12 | |||
7 | May 10 | 13 |
|
Lab #3: Unix Low-Level I/O |
May 12 | 14 | |||
8 | May 17 | 15 |
|
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 |
|
Final Project
due June 1 |
Jun 2 | 20 |
|
||
|