This course covers the basics of computer systems from a programmer's perspective. Topics include data representation, machine language programming, exceptions, memory systems, and being the client of an operating system. Our goal is to help students be more effective programmers and to prepare students for advanced systems courses, such as architecture, compilers, operating systems, and networks.
The course involves homeworks, exams, labs, and programming projects. Proficiency in C programming is assumed, as per the course pre-requisites.
The course is expected to involve eight homeworks (approximately), two exams, and five projects. You are also expected to attend and complete lab work, but this is not graded.
All assignments are individual.
The assignments page describes how to determine when work is due and how to obtain the handouts.
Projects, and programming sections of the homeworks, must be completed in the CSIL on the Linux machines. This work will be graded in that environment, so, even if your solution works correctly in a different environment, its behavior on a CSIL Linux machine will be the sole determinant of your grade. For this reason, course staff cannot provide support for working in other environments, as you are strongly discouraged from doing so. Please note that you can ssh into the CSIL Linux machines from any location with an Internet connection and work remotely in this environment.
Homeworks and projects will be submitted using svn.
The grading scheme is as follows:
The correspondence between numeric averages and letter grades will be determined by an examination of overall student performance at the end of the quarter. The thresholds needed to attain a specific letter grade, therefore, will not be known in advance.
Please complete all work by the published due date, which is indicated both in the assignment and in the course schedule. There are no extensions.
We have provided information on the timing of all assignments and course policies and details at the beginning of the quarter to aid you in planning your quarter. We expect to hold to this schedule and these policies, but reserve the right to make modifications to correct mistakes, adapt to the pace of the class, accommodate student interests, or for any other reason. We will announce changes if we make them.
The principles of academic honesty will be rigidly and rigorously enforced in this course. Please be sure to read the policy as it applies to this course, as you will be expected to be aware of and follow it.
Labs will be held every Thursday (Weeks 1-8). The schedule shows lab materials for some weeks, but not for others. On weeks with lab materials, the primary purpose of the lab is for you to work through that week's material and have access to your TA to answer questions and provide assistance. For those weeks when there is no lab material assigned, your TA will be available in the normal lab room for the same time period, constituting, essentially, office hours.
Apart from lab times, your instructor and TAs also hold office hours.
You may post questions on the course Piazza board. Please make sure you do not make posts that reveal too much information about assignment solutions, as this would constitute an academic honesty violation. You should have received an invitation to the course Piazza group; if not, please email the instructor to be added.
You should expect Piazza questions to be answered in less than 24 hours, and hopefully significantly sooner. If you have not received a response in a reasonable amount of time, please inform the instructor.
The textbook is Computer Systems: A Programmer's Perspective (2nd Edition) by Bryant & O'Hallaron.
You should not use the (very old) 1st edition, nor any edition other than the US edition (as international editions apparently have substantial differences).
The student site for the book has additional tutorials and reference material that you may find useful.
The schedule shows readings for each lecture. You are responsible both for all lecture material and for all textbook readings.
The material in this course is highly detail-oriented. The goal of the lectures is not to substitute for the book, but to supplement it. The lectures are intended to provide context for the book, and to provide additional and alternate intuition, perspective, and insight.