CMPS105, Fall 2013, Section 01: Syllabus

Time: MWF 9:30–10:40
Location: Physical Sciences 110
Section: W       12:30PM-01:40PM---Soc Sci 2 141
F       12:30PM-01:40PM---Soc Sci 2 171
Instructor: Prof. Darrell Long (darrell«at»
Office & hours: Darrell Long (371 Engineering 2): TBD
TA: Erik Steggall (esteggall«at»
TA office & hours: M 11:00AM-12:00AM E2 383 (knock)
Prerequisites: Computer Science 101 and Computer Engineering 12 and 12L
Required text:
Optional texts:
Home page:

Course Objectives

The goal of this course is to teach your systems programming; that is, using the operating system directly to accomplish lower-level tasks that you haven't dealt with before in your other classes. This will include dealing with processes, interprocess communication (including networking), threads, file systems, I/O devices, and more. It will also be about building an effective toolkit for doing all those important tasks that are difficult to do if you do not have access to the command line.

We will use Linux (a version of Unix) to learn systems programming. Why Unix? Unix was designed by programmers for programmers. While it has been around since 1970, it has evolved and is at this point probably the most commonly used operating system. It runs all the large data centers, the high performance computing systems, but is also used all the way down to embedded devices and Android mobile phones.

We have an ambitious schedule, and will try to cover as much of the material as possible:

  • UNIX System Overview 
  • UNIX Standardization and Implementations 
  • File I/O 
  • Files and Directories 
  • Standard I/O Library 
  • System Data Files and Information 
  • Process Environment 
  • Process Control 
  • Process Relationships 
  • Signals 
  • Threads 
  • Thread Control 
  • Daemon Processes 
  • Advanced I/O 
  • Interprocess Communication 
  • Sockets 
  • Advanced IPC 
  • Terminal I/O 
  • Pseudo Terminals 
  • A Database Library


The required text is the one by Stevens and Rago. It's a huge tome, but fairly comprehensive. You really do need to get it, and you really do need to read it.

You might also consider some of these books as well. They are optional, but make a good addition to your professional library.  

In fact, the O'Reilly nutshell books are great ones to have. You might think of going in with your friends and getting a set of those most relevant to this class.

Assignments & Grades

Assignments will be posted on the web, and will be accessible from anywhere on the Internet. It is likely that some assignments will be posted before they are officially assigned; however, you should not assume that an assignment on the web is in final form until the date it is assigned. In other words, assignments are subject to change before the date that they are officially assigned.


There will be a homework assignment assigned about every week and a half, due about one week later. The homework will give you a chance to see how well you understand the concepts we've covered in class. They will be graded pass / fail. That means you really ought to do them, though they are not formally part of the grade calculation. But if you're on the edge between grades, and you failed the homework it will make a difference.

Programming projects

Programming projects are an important component of this course. You'll be writing your programs using the Linux operating system on top of a virtual machine. Each student will get their own virtual computer with full administrative priviledges. Try not to break it, since it might take a little while to fix it!


There will be two examinations in the class: a midterm around week 6, and a final exam during examination week. Both examinations are mandatory. If you miss an examination, you should have "barfed up a lung" or something equally dramatic. You can thank Prof. Miller for that graphic example.


Assignments are due on the date and time specified in the assignment. Late homeworks will not be accepted. To accommodate potential scheduling issues during the class, you have 3 grace days you may use to extend the due date of a programming assignment (for you only, not the whole class). You may use as many grace days as you wish for any assignment, assuming you haven't already used them up already. Programming assignments turned in after the due date lose 25 points per day, including weekends and holidays—assignments more than three days late will receive a maximum grade of 5 points. Please make a note in a README file that you're using grace days when you submit the assignment; you cannot retroactively apply them to assignments you've already submitted. 

You must turn in a reasonable attempt at each project to pass the class. Graded assignments will be returned as soon as possible, usually within one week, and grades will be available on-line during the quarter.

There may be a time where you submit a project but it doesn't work for the TA (the TA will not fix your programs for you). If this happens, your project will be returned to you and you will be given the opportunity to fix and resubmit the project. After the project is returned to you, every 24 hour period used to fix the project will use up a grace day. If you no longer have any grace days left, 10% will be docked off of the project for every day late. If you feel that the project should have worked, and you are not at fault, please contact the TA immediately in order to schedule an appointment to resolve the issue.

Grades will generally follow a 90/80/70/60 scale, but we reserve the right to adjust the curve upward or downward as appropriate. Your grades will be determined as follows:

  • Programming assignments: total of 40%
  • Homework: pass / fail (all homeworks weighted equally)
  • Midterm: 18%
  • Final: 30%
  • Class participation: 2%

Note: You must average above 50% on the programming assignments and on the examinations in order to pass the class. A score below 50% on either part of the class will result in a failing grade regardless of your overall score. This is a necessary, but not sufficient, condition for passing the class—averaging above 50% on both parts does not guarantee a passing grade.


Class attendance is mandatory; we typically won't take attendance, but class participation is 2% of your grade. It's that 2% that can push you over the line when you're on the edge between grades. So how do we know? Don't worry, we know. Please don't think you can just look at the slides for the class and pass; that's unlikely, and so we recommend strongly against it.

Homeworks, assignments, and important dates will be posted to the class web forum, but this is provided as a courtesy and is not always complete. It's your responsibility to find out what you missed if you don't attend class. Laboratory section attendance is also required, though attendance won't be taken. However, you'll miss important material on the programming assignments if you don't attend one laboratory section per week. This is where the programming assignments will be discussed in detail. Office hours are optional. They're your chance to ask the professor and TA questions about the material being covered, programming assignments, or anything else about operating systems (or other general computer science issues) you want to discuss.

Academic Honesty: Collaboration versus Cheating

You're encouraged to discuss the course material and concepts with other students in the class. If you do so, you may not take notes during the discussion. You should also follow the Simpsons rule (historically, this was called the Gilligan's Island rule, but all of you are too young to have seen Gilligan's Island unless watch certain cable channels late at night): you should watch an episode of The Simpsons between discussing the material with other students and working on your own assignment; other 30 minute activities, such as watching AnimaniacsSpongebob Squarepants, or Gilligan's Island are also acceptable.

If you get significant help on an assignment from a source other than the textbook, slides, your own notes, or the course staff, you must acknowledge it in whatever you turn in. It's not cheating to read other textbooks or look for help on the Internet; it is cheating if you copy solutions from one of these sources. Under no circumstances may you look at anyone else's code or show anyone else your code. While you may discuss the concepts used in the programming assignments, you may not discuss implementation details of the assignments themselves. If you are caught copying or otherwise turning in work that is not solely your own, you will fail the course and a letter will be sent to your Department, the School of Engineering, and to your Provost and academic preceptor.

The bottom line is that you're expected to conduct yourself as a person of integrity—you're expected to adhere to the highest standards of academic integrity. This means that plagiarism in any form is completely unacceptable. You are a (soon-to-be) computing professional; we encourage you to consult the code of ethics appropriate to your discipline (the ACMIEEE, and IEEE Computer Society).

Plagiarism will be assumed until disproved on work that is essentially the same as that of other students. This includes identically incorrect, off-the-wall, and highly unusual duplicate answers where the probability of a sheer coincidence is extremely unlikely. All parties to this unacceptable collaboration will receive the same treatment. In the case of programs, reordering routines, renaming files, and simply renaming variables does not make two programs different.