Course Instructor: Prof. Chris Fernandes
Office Hours: M 12:30-1:30, T 10:30-11:30, Th 10:30-noon, F 1-2
or anytime my door's open!
Office: 229 Steinmetz Hall
Course Webpage: http://cs.union.edu/csc335
Text (1 required). Available at the Bookstore:
Silberschatz, Galvin, Gagne,
Operating System Concepts. 7th edition, Wiley, 2005.
A C++ reference manual is recommended. Two are available at
Ray Lischner, C++ in a Nutshell. O'Reilly and Associates, 2003.
(There's an 8th edition, but the changes aren't worth buying it
new. All readings will be from the 7th ed.)
Jesse Liberty, SAMS Teach Yourself C++ in 24 hours, Complete
Starter Kit. SAMS,
3rd edition, 2001.
The purpose of this course is for you to understand the most important
concepts and systems associated with a modern operating system (OS).
The goals of this course are:
- to understand the responsibilities of an OS
- to understand how an OS handles
- job scheduling
- memory management
- file management
- security issues
- to refine your programming skills through the use and modification
of third-party software
Topics to be covered include:
- semaphores, monitors, and locks
- classic synchronization problems
- scheduling algorithms and deadlock avoidance
- paging systems
- virtual memory
The best way to understand an OS is to build one yourself,
so this course is primarily a programming course. You will
be writing code in the C/C++ language on the
antipasto Linux server. Thus, an indirect goal of this
course is for you to practice becoming proficient in a programming
language and OS environment with which you may not already be
familiar. The ability to independently learn new languages and
environments is a skill every Comp. Sci. and Comp. Engg. should have.
Computer Organization (CSc 270 (210)) is necessary
since the OS interacts with hardware a lot. You'll need to
remember what things like registers, the system stack,
the program counter, and the ALU do.
You will also occasionally need
to understand assembly language for the programming projects.
- Exams. There is 1 midterm that will be on Wed,
If you cannot be at an exam for a good reason (illness, for
then please let me know so we can make other arrangements.
The final will be cumulative. On exams, you will be responsible
for all material covered in the readings and in lectures. Exams are
open book and open notes.
- Programming projects.
These projects are where a lot of the solidification of the OS concepts
we discuss in class will happen. You'll be adding on to a small
but incomplete OS called NACHOS. It is written in C++, and a lot of
your job will revolve around understanding the code already there and
figuring out what new code to add and where.
Programming projects are due at the start
of class on the day it is due. Please turn in an e-copy
(not on Blackboard usually. Your instructor will tell
you how.) Please also turn in a hard copy of your modified
Late projects will not be accepted. There will be an
automatic 30% deduction if your code does not compile.
- Homework. Written homework will be assigned
sporadically throughout the trimester. Homework is due
at the start of class on the day it is due.
Late homework will not be accepted.
- Written homework: 10%
- Programming projects: 40% Here's the breakdown:
- C++ project: 2%
- Concurrency project: 5%
- Synchronization project: 10%
- System calls project: 13%
- Virtual memory project: 10%
- Midterm Exam: 25%
- Final Exam: 25%
Students often have some confusion about what might or might not be
considered "cheating" in a computer science
class. In general, you should take advantage of your instructors
and fellow students in working out
solutions to assignments. This especially applies to C++ and Linux
issues. You should be working together (either physically
or virtually) so you can ask each other questions like, "what
does this compiler error mean?" or "how do you do X in C++/Linux?"
As always, however,
you should not be using other people or the
Web as a crutch. There is a point at which working together
becomes plagiarism. As a rule of thumb, feel free to discuss
general solutions to problems, but the writing down of an
actual solution must be done solo by you. Two (or more) people
should not be creating a single piece of code. That's plagiarism.
Looking at someone else's code "for inspiration" is also plagiarism.
So is copying code off the Web.
If you have any doubts, talk to me
before turning in the assignment.
In all cases, you must give credit to any source
(like a written work or help from some individual) that you use to help
complete an assignment.
What you need to do
To prepare for class, you are required to do the following:
You are expected to be present for every class. However, I realize that
sometimes other things come up (interview, illness, etc.) so
just please let me know in advance or by phone/email if you're going to
be absent. Unexcused absences are NOT allowed and will
affect your grade. If you miss class, get notes from someone
and do the readings before coming to see me. I'm happy to
explain things, but I won't repeat lectures for you.
Read the text
Lectures will primarily follow the major topics covered by the text.
You should do the reading for that week before coming to class so
that questions you have about the material can be answered during
There will always be a time for questions about the readings or previous
lectures at the beginning of class. Take advantage of it.
All of the readings for the entire term can be found on the course
web page in the Full Schedule section.
Check the webpage
The reading assignments (and other announcements) will be
posted regularly on the course webpage. You are required
to check it at least once a week. The URL
is at the top of this document.
The Bottom Line
Ask questions and seek help. This is the most important
point of all. I live to answer questions. Don't be afraid to
come to my office every single day if you want. It's better
for everybody (you AND me) if you understand
things sooner rather than later.
Any student with a documented learning disorder is welcome to
come talk to me privately about options for completion of exams and
CSc 335 homepage