TWiki> CS361fall13 Web>Syllabus (2013-10-09, Main.jakob)EditAttach


Instructor Dr. Jakob Eriksson <>
Meets 11-11:50 am MWF, in 309 BH
Office hours Wed 1-2 pm (in SEO 1135)
Office Phone 312-996-0481

TA Timothy Merrifield <>
Lab Hours 11-noon Tuesdays, in SEL 2254
Office Hours Thurs. 4pm-5pm Engineering Research Facility (ERF), Room 2054
Office Phone 312-413-2103

Inspirational Quote

"Most people find the concept of programming obvious, but the doing impossible." - Alan Perlis

By the end of the systems sequence, our hope is that you'll have come to see that the concept of programming is mindboggingly complex, but thanks to good system design, the doing is usually pretty straightforward.


The purpose of this course is to familiarize you with the the environment that modern computer programs exist in. Through a large and varied set of practical assignments, you will gain experience with the many steps along the path from source code to running program, memory management and virtual memory, process creation, communication and control, and a healthy dose of concurrent programming.

While the class combines theory and practice, there will be a focus on practical demonstrations in lecture and extensive hands-on programming experience. Plan to spend 10 +/- 5 hours per week on homework programming, depending on your current proficiency.


This class is programming intensive, with several large assignments done in C. Significant C programming experience, such as that from the required prerequisite CS211 is necessary to successfully complete this course. Some parts of class will also require a solid understanding of machine language and architecture, as gained from the required prerequisite CS261. Concurrent enrollment in either of these courses only with instructor consent, and strongly not recommended.


We will be using the book below as our main textbook. This is the same textbook as used in CS261, and it covers the majority of the topics discussed in this class.

Computer Systems, a programmer's perspective
Randal E. Bryant and David R O'Hallaron
Prentice Hall

All assignments are done in C. This is an excellent (and classic) introduction to the language.

The C Programming Language
Kernigan and Ritchie
Prentice Hall


Consulting with your classmates on assignments is encouraged, except where noted. However, turn-ins are individual, and copying code from your classmates is considered plagiarism. For example, give the question "how did you do X?", a great response would be "I used function Y, with W as the second argument. I tried Z first, but it doesn't work". An inappropriate response would be "here is my code, look for yourself".

To avoid suspicion of plagiarism, you must specify your sources together with all turned-in materials. List classmates you discussed your homework with and webpages from which you got inspiration or copied (short) code snippets. All students are expected to understand and be able to explain their turned-in materials. Plagiarism and cheating, as in copying the work of others, paying others to do your work, etc, is obviously prohibited, is grounds for failing the course, and will be reported.


Your grade will be based on your performance on the 10 homework/lab assignments, the 2 midterms and the final. The results from each part (normalized to a 0-100 scale) will be combined to form a weighted sum, using the weights below. Final letter grade is then assigned based on a curve established after course completion.

Final 30%
Midterms 10% x2
Homework 5% x10

Topics Covered

  1. Memory Management and Virtual Memory
  2. Program Life Cycle
  3. Exceptional Control Flow
  4. Debugging and Debuggers
  5. Process Communication
  6. Concurrent Programming
Topic revision: r10 - 2013-10-09 - 18:10:25 - Main.jakob
Copyright 2016 The Board of Trustees
of the University of
Helping Women Faculty Advance
Funded by NSF