4003-406 Systems Programming I - Course Syllabus

Last updated 2012/11/19 12:48:29


Name: Warren R. Carithers
Office: 3617 Golisano (70-3617)
Phone: (585) 475-5393
Email: wrc AT cs.rit.edu

1. Course Overview

1.1. Course Goal

The goal of Systems Programming I is to provide students with exposure to and experience with the concepts and techniques related to the development and maintenance of operating systems and systems software.

1.2. Course Outcomes

The following are the intended outcomes for this course:

1.3. Course Prerequisites

This course has the following prerequisites:

From these courses, you should be familiar with the creation and use of standard data structures (linked lists, stacks, queues, trees, etc.), dynamic memory allocation, assembly language programming concepts (in some assembly language), and typical CPU organization (registers, memory addressing, etc.).

These are prerequisites, not corequisites - to succeed in SP1, you should have already passed all of these courses, or their equivalents. Taking them at the same time as SP1 is not sufficient! See me immediately if you are missing one or more of the prerequisites, or you may be dropped from SP1 without further warning!

Important note: Students who receive credit for SP1 cannot later take 4003-309 (C for C++ Programmers) for credit. If you took 4003-309 before taking SP1, you may find that the first weeks of SP1 cover familiar material; don't make the mistake of thinking that this will apply to the entire course, as we will quickly move on to other topics.

2. Books

There is no required textbook for this course. The recommended optional textbook is The Linux® Programming Interface, by Michael Kerrisk, No Starch Press, 2010. Two alternate texts are:

Not all of the material we will cover this quarter comes from this text; you will have to depend on handouts and class notes for the other material.

The programming assignments for this course will be done in a combination of C and assembly language. Although they are not required, you may want to own a C or x86 assembly language textbook. I've had the bookstore order two additional optional textbooks:

Pointers on C is a particularly good choice for our course, as it focuses on the lower-level aspects of C. I selected Professional Assembly Language for a similar reason: it's the only x86 textbook I've seen that uses the GNU assembler, which means that its examples use the same syntax as the assembler we're using.

3. Grades

Your final grade will be based on three components: a series of programming assignments, a midterm exam, and a final exam. The distribution between these components is:

  50% projects
  25% midterm exam
  25% final exam

3.1. Exams

Two exams will be scheduled for this course. The first is a two-hour midterm exam; the second, a two-hour non-comprehensive exam during finals week.

Currently, the best guess as to the dates of these exams are:

3.2. Projects

There will be four programming projects this quarter. All projects will be equally weighted. One will involve using assembly language alone, two will use C alone, and one will use both languages. Programming style standards for this course are based on those you've used in other courses.

Your work in this course will be done on the computers in the Distributed Systems Lab (70-3610). These are Intel-based systems running Ubuntu® 12.04, and the environment has been set up to be very similar to what's installed on the systems in the main CS labs. The lab has a laser printer called dsl_lw1 (also known as watson, in keeping with the system naming scheme used in the lab); all the DSL systems have been configured to use it as their default printer.

The DSL has no lab assistant; you get in and out by using your RIT ID card. To gain access, you must have your ID entered into the security system; to do this, see Mark Stamer (70-3441), the CS hardware technician. Please don't do this for a few days; things tend to be very hectic at the beginning of the quarter, and you will not need to use the lab immediately.

For security reasons, the DSL is behind a firewall; there is no interactive access to the lab machines from outside the lab itself, so using these machines is less convenient than using the other CS machines.

The DSL server runs a web proxy server, so you do have access to the web from inside the lab, but only HTTP and HTTPS requests are forwarded. All the DSL systems are configured to use the proxy server by default, so accessing the web should be completely tranparent regardless of which browser (Firefox, Chrome, lynx, links, and links2 are currently installed) you use. No other access from inside the lab to the outside world is available.

The ony access to the DSL from outside the lab itself is ftp access to the DSL server; from the outside world, the DSL server is named dsl, and you can connect to it using an ftp command (e.g., ftp dsl within a shell window) or an ftp application to move files to and from your DSL account.

The DSL machines have USB jacks which will accept flash drives. To use a flash drive, simply insert it into one of the computer's USB jacks; Ubuntu should examine it and, assuming it has a file system that Ubuntu recognizes, automatically mount it into the file system. The mounted drive will be found in /media/name (where name is determined by the name used when the flash drive was formatted). If there is no recognizable file system on the drive, it will not be automatically mounted.

Unmount the drive before unplugging it from the machine. To do this, you can either right-click on the desktop icon representing the drive and select eject, or you can use the df command in a shell window to determine the actual device path (e.g., /dev/sdb1) and then run the command umount /dev/sdb1; when you see the next command prompt, it is safe to remove the flash drive.

At some times during the term, it may be necessary to disable the automounting of flash drives so that the USB jacks can be used to create bootable media for the interrupt handling assignment.

Although you can test your C projects on any CS system, and your x86 projects on any x86-based CS system, all project submissions must be made on the DSL machines. In addition, the interrupt handling assignment can only be tested on the DSL machines, as it requires rebooting the machine to get your code running (this is frowned upon on the main-net CS machines).

Important note: All programming projects will be submitted for grading on the DSL machines, and therefore must work on those systems. If you choose to develop your solutions elsewhere, it is your responsibility to allow sufficient time to iron out any problems that may arise due to incompatibilities between your development system and the DSL systems. Programs that "work on my computer at home" but don't work on the DSL systems don't work.

The minimum acceptance test for project submissions is that they must compile and link cleanly (i.e., without fatal compilation or linking errors) when submitted with the try command. Emailed project solutions will not be accepted.

3.3. Problem Sets

In addition to the graded assignments described above, a series of ungraded problem sets and their solutions will be posted to the course home page. Their purpose is to help you gain additional experience with the concepts and techniques covered in class. Although these will not be collected or graded, I suggest you attempt to work the problems before looking at the answers, to help ensure that you understand the concepts.

4. RIT and CS Department Policies

4.1. Academic Conduct

Academic dishonesty will be dealt with in accordance with DCS and RIT policies.

4.2. Section 504 of the Rehabilitation Act

RIT is committed to providing reasonable accommodations to students with disabilities. If you would like to request accommodations such as special seating or testing modifications due to a disability, please contact the Disability Services Office. It is located in the Student Alumni Union, Room 1150; the Web site is www.rit.edu/dso. After you receive accommodation approval, it is imperative that you see me during office hours so that we can work out whatever arrangement is necessary.

5. Notes


Solaris is a trademark of Oracle and/or its affiliates.
UNIX® is a registered trademark of The Open Group.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Ubuntu® is a registered trademark of Canonical Ltd.