Remember to check this regularly
- A sample final has been posted here.
- Due date for Lab 4 updated to June 4th.
- Lab 3 due date updated (again).
- Grades for homework 2 have been posted.
- Please note big changes to schedule!
- Lab 3 has been posted!
- Solutions for the midterm are available here.
- Homework 3 has been posted!
- Grades for labs 1 and 2 have been posted.
- A sample midterm has been posted here.
- Grades for homework 1 have been posted.
- The final will be during the time scheduled by the Northwestern Finals Schedule, Wednesday June 6, 3:00-5:00.
- Class on 04/09 cancelled.
- First lab posted!
- First homework assignment posted!
- The first TA session will be tonight (March 27th) in the Wilkinson lab.
- Tentative schedule for homework assignments and projects posted.
ProfessorFabián E. Bustamante
Technological Institute, L477
+1 847 491-2745
Office Hours: By email
Ford Design Center, Room 2-217
+1 847 467-3250
TA Session: Tue 5-6PM in Wilkinson
Office Hours: Mon 4-5 and Wed 5-6 (in office)
This course has four purposes: (1) to learn about the hierarchy of abstractions and implementations that comprise a modern computer system; (2) to demystify the machine and the tools that we use to program it; (3) to come up to speed on systems programming in C in the Unix environment; (4) to prepare students for upper-level systems courses.
This is a learn-by-doing kind of class. You will write pieces of code, compile them, debug them, disassemble them, etc.
This course is ideally taken after EECS 211 early in your academic career.
Location and Time
Mondays and Wednesdays 2:00-3:20PM.
(Tech Building L251)
- EECS-211 Fundamentals of Computer Programming II. (Required)
- Experience with C or C++ (Required)
- EECS-311 Data Structures and Data Management. (Useful)
EECS 213 is a required core course in the Computer Science curriculum in both McCormick and Weinberg. It is also a required course for CS minors in Weinberg. EECS 213 can also be taken for credit within the Computer Engineering curriculum. Most 300-level systems courses have EECS 213 as a prerequisite.
There are a number of communication channels set up for this class:
- We will use the course web site to post homework assignments, projects, course-related announcements, etc. You should check this regularly.
- We will use the Google Group EECS 213 at Northwesternfor class discussion. This particular channel is intended to foster communication among you, the students. You'll find that someone else in the class will have thought of the same problem that you have and will perhaps have some valuable insight that will prove helpful. The staff will be monitoring the discussion threads and will step in with guidance when appropriate. If you don't have a subscription already, you can request one:
- Finally, there is always email for questions that would be inappropriate to post on the newsgroup (source code being a good example). When using email to contact the staff, please start your subject line with "EECS213: helpful-comment" to ensure a prompt response.
Textbook and Other Readings
- Computer Systems: A Programmer's Perspective, Randal E. Bryant and David R. O'Hallaron, 2nd Ed., PH 2010. (Textbook).
- Advanced Programming in the Unix Environment, R. Stevens, Addison-Wesley, 1992. A basic book for anyone writing programs that run under Unix (Highly recommended).
- The C Programming Language, 2nd Ed., B. W. Kernighan and D. M. Ritchie, Prentice Hall, 1988. ``The'' reference book (Recommended).
The course is organized as a series of lectures, Lab and homework assignments and exams:
- Lectures - A set of lectures through which I present the core of the material.
- Homework - Four homework assignments with questions from (or similar to those in) your textbook, aimed at reinforcing the material covered in the lectures. Homework assignments are to be done alone.
- Labs - There will be four programming labs.
- Exams - Two exams, a midterm and a final exam. These exams cover the material presented in the lecture, homework assignments and labs.
There will be two kinds of homework assignments given throughout the class: reading assignments and textbook-style questions. You should have finished the assigned reading before coming to lecture. In addition, there will be a set of written homework assignments that must be done alone and turned in by midnight on the due date (see course policies below).
To submit your assignments use the following page: SUBMISSIONS.
|1: Ints & Floats||3/28||4/6 11:59PM CST||--|
|2: Decoding assembly||4/18||4/27 11:59PM CST||--|
|3: From Memory to Virtual Memory||5/2||5/11 11:59PM CST||New due date: 5/16|
|4: Exceptions and Signals||5/28||6/1 11:59PM CST||New dates!|
As you can deduce from the allocation of weights for grading, programming projects make up a major portion of this class. Their goal is to make you apply the concepts you've learned and to gain familiarity with Unix tools that can help you apply them.
There will be four (4) projects. All projects are to be done by teams of two (2) people. Both partners should work cooperatively on the design, implementation, and testing of their solution.
The following table of deadlines should serve you as a guideline for planning your quarter. You are given about two weeks per project. This should be plenty of time if managed carefully.
|1: Data Lab||3/30||4/10 11:59PM CST|
|2: Bomb Lab||4/13||4/24 11:59PM CST|
|3: Malloc Lab
Extra credit addendum
|5/4||5/15 11:59PM CST|| New due date: 5/21 5/23
|4: Shell Lab||5/21||6/4 11:59PM CST||New dates!|
You wil be able to do the programming assignments on any modern Linux machine. You should have an account on the TLab and/or Wilkinson Lab computers. If this is not the case, contact root@eecs .... The Wilkinson Lab has recently been renovated and is now quite a nice place to meet to work together. It should be possible to do some of the assignments using the Cygwin environment on Windows or in Mac OS X, but they will be graded in a Linux environment, so be sure your code works on the TLab machines.
There will be a midterm and a final exam. Exams will be in-class, closed-book, and will cover materials from lectures, homework assignments and projects. The final exam will not be cumulative.
I use a criterion-referenced method to assign your grade; in other words, your grade will be based on how well you do relative to predetermined performance levels, instead of in comparison with the rest of the class. Thus, if a test has 100 possible points, anyone with a score of 90 or greater will get an A, those with scores of 80 or greater will get a B, those with scores of 70 or greater will get a C, and so on. Notice that this means that if everyone works hard and gets >90, everyone gets an A.
Total scores (between 0 and 100) will be determined, roughly, as follows:
- 10% - Homework assignments
- 50% - Programming labs
- 20% - Midterm
- 20% - Final
Course Outline and Approximate Dates
Because one has to be an optimist to begin an ambitious project, it is not surprising that underestimation of completion time is the norm.
-- Fernando J. Corbató, ``On Building Systems that Will Fail'', 1990 Turing Award Lecture.
Here's a link to the online calendar for the course, including lectures, assignments, exams, etc.
|03/28||Bits and Bytes||2.1|
|04/09||Machine programs - Introduction||3, 3.1-3.5|
|04/11||Condition and Control||3.5-3.6|
|06/30||Network programming and wrap-up||11|
Unless otherwise indicated, homework assignments and projects are due by midnight on their due date. If you hand in an assignment late, we will take off 10% for each day (or portion thereof) it is late. No points will be granted for assignments submitted more than five days late.
Cheating vs. Collaboration:
Collaboration is a really good thing and we encourage it. On the other hand, cheating is considered a very serious offense. When in doubt, remember that it's OK to meet with colleagues, study for exams together, and discuss assignments with them. However, what you turn in must be your own (or for group projects, your group's own) work. Copying code, solution sets, etc. from other people or any other sources is strictly prohibited.