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]Location & Time
Professor: Morris Bernstein
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]
Labs | 5% |
Programming Assignment 1 | 10% |
Programming Assignment 2 | 10% |
Programming Assignment 3 | 10% |
Final Project | 20% |
Midterm Exam | 25% |
Final Exam | 25% |
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:
Live lectures are inherently interactive. Questions during class are encouraged. Raise your hand or dance like a chicken to get the instructor's attention. At the instructor's discretion, answers may be tabled until the end of class or office hours if they veer too far off topic.
Limit computer use during class to note-taking so as to not distract or disturb your classmates or your instructor. Since a large part of the presentation involves diagrams, it may be more convenient to turn off the computer and take notes the old-fashioned way. Quill pens are optional.
Flash photography is not permitted. Non-flash photography to capture the white board will be permitted as long as it is not disruptive or distracting. Don't even think about video.
Silence your cell phones.
If you arrive late or have to leave in the middle of class, do so as quietly as possible without causing disruption.
As this course focuses on technical knowledge vital to your future career in software development, the 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.
If you're sick, stay home. Do not selfishly infect others.
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.
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.
Labs are designed to prepare you for a related assignment. They are minimally valuable and will be graded on a pass/fail basis. You may work together on the labs but do avoid riding on someone else's coattails; you'll still have to complete the assignments on your own.
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. Facilitating plagiarism is also plagiarism and subject to the same sanctions.
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.
[top]Subject to change as the quarter progresses.
Week | Date | Lecture # | Topic | Assignment |
---|---|---|---|---|
1 | Apr 1 | 1 | ||
Apr 3 | 2 | |||
2 | Apr 8 | 3 |
Lab #1: Process Management
due April 11 |
|
Apr 10 | 4 |
|
||
3 | Apr 15 | 5 |
Assignment #1: Convex Hull
due April 18 |
|
Apr 17 | 6 |
|
||
4 | Apr 22 | 7 |
Lab #2: Thread Synchronization
due April 23 |
|
Apr 24 | 8 | |||
5 | Apr 29 | 9 |
Assignment #2: Sleeping Barbers
due April 30 |
|
May 1 | 10 |
|
||
6 | May 6 | 11 |
|
|
May 8 | 12 | |||
7 | May 13 | 13 |
|
Lab #3: Unix Low-Level I/O
due May 14 |
May 15 | 14 | |||
8 | May 20 | 15 |
|
Assignment #3: C Standard Library I/O
due May 23 |
May 22 | 16 | |||
9 | May 27 | 17 |
|
Lab #4: UDP Multicast
due May 30 |
May 29 | 18 | |||
10 | Jun 3 | 19 |
Final Project: Inter-Segment/Group UDP Broadcast
due June 6 |
|
Jun 5 | 20 |
|
||
|