Syllabus
Instructor |
Dr. Jakob Eriksson <jakob@uic.edu> |
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 <tmerri4@uic.edu> |
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.
Overview
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.
Prerequisites
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.
Materials
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
ACADEMIC INTEGRITY
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.
Evaluation
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
- Memory Management and Virtual Memory
- Program Life Cycle
- Exceptional Control Flow
- Debugging and Debuggers
- Process Communication
- Concurrent Programming