CSE 410, Computer Systems, Information and Syllabus, Spring 2012

Logistics and Contact Information: Instructor: Hal Perkins, CSE 548, perkins(at)cs. See www.cs.washington.edu/410/ for all information about the course including lectures, assignments, TAs, office hours, and so forth.

Communications: A discussion board is linked to the course home page so we can keep in touch outside of class meetings. Please participate. You will also automatically be subscribed to a class mailing list at your uwnetid address. This will primarily be used for announcements, clarifications, hints, and other notices from the course staff, and you are responsible for everything that is mailed there. Messages for the course staff that are not appropriate for the discussion board can be sent to cse410-staff[at]cs. Please don't send mail to individual staff members if at all possible - messages sent to the entire staff are much more likely to receive a timely response.

Goals: The goal of the course is to develop a sense of "what is really happening" when software runs -- and that this can be answered at several levels of abstraction including hardware architecture, machine instructions, assembly language, the memory hierarchy (including caches and virtual memory), operating systems, and higher-level languages like C and Java. The core around which the course is built is C, assembly, and low-level data representations, but this is connected to other levels as well as to the role of the operating system in providing abstractions used to support programs. The goal is to understand how these abstractions interact from the programmer's perspective and how they affect program execution.

Prerequisite: CSE 373 (data structures and algorithms)

Grading and Exams:

  • 55% - Homework assignments and programming projects, approximately weekly
  • 15% - Midterm exam, date tbd, in class
  • 25% - Final exam, Tuesday, June 5, 2:30-4:20
  • 5% - Class participation, citizenship, and other

Assignments are intended to contribute roughly equally to the 55%, but longer or more difficult assignments will be given somewhat heavier weights. Percentages are tentative and may be adjusted slightly.

Late Policy: Deadlines will be given with each assignment. These deadlines are strict. It is exceedingly unlikely that skipping class or being late to class because of homework is in your interest. For the entire quarter, you may have four free "late days". You are strongly advised to save them for emergencies. You may not use more than two for the same assignment, and on group projects (if we have any) you may only use late days if all members of the group have them available, and all members of the group will be charged for each late day used. They must be used in 24-hour (integer) chunks. This policy may not be the same as in other classes. You are responsible for understanding it if you choose to submit late work.

Academic Integrity: Any attempt to misrepresent the work you do will be dealt with via the appropriate University mechanisms, and your instructor will make every attempt to ensure the harshest allowable penalty. The guidelines for this course and more information about academic integrity are in a separate document. You are responsible for knowing the information in that document.

Text: The primary text for the course is Computer Systems: A Programmer's Perspective by Randal Bryant and David O'Hallaron, 2nd ed., Prentice-Hall, 2011. You should have a copy of the 2nd edition; there are significant differences from the 1st edition and, in particular, you want to be sure you do the correct problems from the current edition of the book.

For the operating systems part of the course we will use a new text being written by Tom Anderson and Mike Dhalin that will be freely available as a pdf file. This book isn't all there yet, but it is much better than the previous OS text for the course, it already has the parts we need, and it will save everyone having to spend $120 for a book that is only used for a few weeks of the quarter.

The course will not require extensive knowledge of Linux or C. There is an enormous amount of information available online and, in most cases, that should be sufficient. However if you want to get a book, for Linux, we suggest The Linux Pocket Guide by Daniel Barrett (O'Reilly, 1st ed. 2004, or 2nd ed. 2012). For C, the classic book is The C Programming Language by Brian Kernighan and Dennis Ritchie (Prentice-Hall, 2nd ed. 1988). A less tutorial, but more detailed reference is C: A Reference Manual by Samuel Harbison and Guy Steele (Prentice-Hall, 5th ed., 2002).