Welcome to CS61C, "Machine Structures"

What's this course all about?

The CS61 series is an introduction to computer science, with particular emphasis on software and on machines from a programmer's point of view. The first two courses considered programming at a high level of abstraction, introducing a range of programming paradigms and common techniques. This course, the last in the series, concentrates on machines and how they carry out the programs you write.

The main topics of CS61C involve the low-level system software and the hardware organization of a "logical machine" — not the actual electronic circuits, but the computational operations that those circuits carry out. To make these ideas concrete, you will study the structure of a particular computer, the MIPS R2000 processor, in some detail, down to the level of the design of the processor's on-chip components. Some of this study involves programming in assembly language. In real life, you'll probably never actually write programs at this level, but for us it serves as a vehicle for teaching about computer architecture. Material covered in CS61C will be the basis for further exploration in the courses EECS150 ("Components and Design Techniques for Digital Systems"), CS152 ("Computer Architecture and Engineering"), CS162 ("Operating Systems and System Programming"), CS164 ("Programming Languages and Compilers"), and CS186 ("Introduction to Database Systems").

The recommended prerequisite for CS61C is CS61B, CS9C, CS9F or CS9G. In particular, you are expected to be comfortable programming in a C-based language (C itself, C++, Java or C#), and familiar with recursion and linked-list processing.  We will expect you to judge your own fitness for this class, and as such will not enforce any prerequisites.  However, we will gladly help you decide if this is the right class to be in if you should ask.


A list of the current GSIs/TAs, along with their contact information and sections which they will be teaching, can be found on the Staff and Schedule pages.  Both discussion and lab will be held every week, including the first week.

If you wish to switch from an existing lab section to another lab section, contact both the GSI/TA of your current section and the GSI/TA for the section to which you wish to switch. If you're on the waiting list, go to a discussion section; GSI/TAs will be keeping track of who is in their sections, and the GSI/TA will be able to give you an estimate of how full the section will be.

Note that this semester we will be holding "honors sections" for both lab and discussion. In these sections, in addition to the normal material covered by lectures and the normal sections, we will go into more depth and cover advanced topics. This extra material will not appear on the exams or in the normal assignments. Attending the honors section and participating in the extra work from it is a necessary condition for earning an A+ in the course.


The CS61C home page is http://inst.eecs.berkeley.edu/~cs61c. The CS61C newsgroup is ucb.class.cs61c . Please make sure to check the News page and the newsgroup regularly.  We will assume that any changes in assignments or exams posted to the News page will have been read by all students within ~24 hours of posting.

The instructor is Prof. John Wawrzynek, 631 Soda, 642-9434, johnw <at> cs.berkeley.edu.  His administrative assistants are Brenda Farell (brenda <at> eecs.berkeley.edu, 666-3121) for general matters, and Audrey Raya in 385 Soda, specifically for CS61C related matters.  The Head GSI will be Greg Gibeling, who is responsible for assignment, website and newsgroup related issues.  As listed above, there are several teaching assistants.  Soon to be named to the staff are the readers who will grade your homework, and the lab assistants who will help you in the lab.  Office hours and electronic mail addresses for all staff will be posted to the Staff page.

This semester, along with the normal offering of CS61C, we are introducing a small lab only version of the course titled CS61CL. The instructor for the lab version is Mike Clancy, 779 Soda, 642-7017, clancy <at> cs.berkeley.edu.

We will also be offering an honors section (Lab 16, CCN: 26408 and Discussion 116, CCN:27382, both of which are on the Schedule page) which will be led by Adam Megacz.  We will probably attempt to move the honors section to Soda Hall 5-6pm starting the third week of class.  If this scheduling presents a problem, but you would like to enroll in the honors section, please let Adam & Greg know ASAP.

There are two required textbooks for the course: Computer Organization and Design: The Hardware/Software Interface, Third Edition, by Patterson and Hennessy (henceforth referred to as "P&H"), and The C Programming Language, by Kernighan and Ritchie ("K&R"). Both these books should be available at a bookstore.  Do not purchase Computer Architecture: A Quantitative Approach by Hennessy and Patterson; it's a similar-looking graduate text.

Handouts, supplements, and other material (exams from previous semesters, for instance) will be distributed via the CS61C website throughout the semester, primarily on the Calendar page.  CS61C lectures will be webcast and thereafter available at http://webcast.berkeley.edu/courses. The CS61C Calendar page will contain a link to the webcasts.  We strongly recommend that you attend lecture in person and rely on the webcast only for those rare occasions when you can't attend class.  This is a fast paced, information rich class and an inability to ask questions and interact will definitely affect your grade.

Lecture slides will generally be posted before 10am on the day of the lecture.  Pre-lecture quizzes and labs will generally be available on the Friday before they are due, allowing you to work and read ahead.  Homeworks will be posted every Wednesday and are due by 2:45pm the next Wednesday.

You will each be given an account on the EECS instructional computers. Account forms will be handed out during the first discussion section on Tuesday August 28th; pick up an account form from Audrey Raya in 385 Soda if you don't get one in discussion.

Help sessions on UNIX, Emacs, VI, and general use of instructional resources are available this semester as they are every semester. These are heavily attended by (and almost mandatory for) students in the 61 series classes. The times, dates and locations are as follows. There are two sessions for each topic, one in the first week of semester and a repeat in the 5th week.  All of these are also noted on the Calendar page.

As an additional guide to the UNIX operating system, we suggest A Practical Guide to Solaris, by Mark Sobell (Benjamin-Cummings, 1999), available at a bookstore. There is also substantial online help available through http://inst.eecs.berkeley.edu.


There will be five kinds of assignments in the course.

All assignments (with the exception of the peer instruction questions) will be posted to the Calendar page.  The last day which the assignment is listed for is the day upon which it is due at 2:45pm, the assignment should be posted before the first day for which it is listed.  For example, homeworks are always due Wednesday at 2:45pm; and should be released each Wednesday (or earlier).  You will find that some of the projects overlap.  This is not because we expect you to work on two projects at once, but because we intend to release the project early enough that you can look them over during the relevant lectures.

You will generally get no credit for homework, labs, or pre-lecture quizzes submitted after the due date.  Lab exercises must be checked off in lab; you will generally get no credit for lab work that you don't finish in your section.


In addition to homework and lab exercises, there will be two evening exams and a final examination, all of which are listed in bold on the Calendar page.  Each evening midterm concentrates on the material that has been covered on dates listed next to it on the Calendar.  The final exam will encompass all the semester's material.  All exams will be open book, open notes.  The midterms will not be cumulative, but the final will.

The exam times are not entirely settled, but they will most likely be 2 hours, sometime between 6 and 9pm on the listed dates.  These dates are highly unlikely to change for any reason.

If you have a conflict with any of the three exams, it is you responsibility to let us know NOW.  We may or may not be able to help you, however if you don't mention it until the week before the test, we certainly won't be able to help.


The various course activities will contribute points to your grade as follows.

Activity (Submission Method)


Points Per Points Cap Scale Course Points

Grade Percentage

Homeworks (Handin)


4 44 0.36 16


Projects (Handin)


8 1 40


Pre-lecture Quizzes (?)


2 60 0.1 6


Labs (Checkoff)


4 48 0.25 12


Participation & Peer Instruction (CPS)




Evening Midterm1


60 0.5 30


Evening Midterm2


30 1 30


Final Exam


60 1 60


Total 200 100%

We will keep point totals for each student, for each kind of activity.  These points are then scaled, and the scaled values added together to produce a course point total.  Using the table below, this can be translated directly into a grade.  While the glookup utility can be used to lookup your score on any given assignments, it's estimation of your grade is unlikely to be correct, as it does not account for point caps.

Notice that the homeworks, pre-lecture quizzes and labs have point caps.  This means that anything over the point cap is not, strictly speaking, necessary to your grade.  Rather than use this as an excuse to skip doing the assignment, consider this a way to deal with scheduling conflicts or a good way to justify occasionally using the webcast for lecture.

Homeworks 1-4 were graded out of a total of 4 points as listed above.  The remaining homeworks were out of 8 points, just for our grading convenience.  For those assignments, dividing your score by 2 will give a score out of 4 which can be used according to the above table.

The final grading equation:  CoursePoints = [MIN(SUM(HW1 through HW4) + SUM(HW5 through HW12)/2, 44) * 0.36] + SUM(Proj1 through Proj5) + [MIN(SUM(Quiz1 through Quiz39), 60) * 0.1] + [MIN(SUM(Lab1 through Lab14), 48) * 0.25] + (Exam1 * 0.5) + Exam2 + Exam3 + CourseParticipation.  Where MIN returns the smallest of it's arguments, and SUM returns the sum of a number of values.  Note that this equation accounts for point caps, and the differing homework maximum scores.

Note that participation consists of the peer instruction questions in lecture, as well as discussion and lab attendance and interaction, your involvement on the newsgroup and your involvement in office hours.  By participation we mean both asking and answering questions.  Being able to help someone else learn the material is a good way to demonstrate to us that you understand it clearly yourself.

Your letter grade will be determined by total course points, as shown in the following table.  In other words, there is no curve; your grade will depend only on how well you do, not on how well everyone else does.  We may adjust the below table, particularly if the course exams turn out more difficult than expected.  Any such adjustment will only raise your grade.  Note that the A+ grades are available only to those students who actively participate in the honors discussion and lab section.






























Incomplete grades will be granted only for dire medical or personal emergencies that cause you to miss the final exam, and only if your work up to that point is satisfactory.

Autograding & Grading Questions

Quizzes, homeworks and projects will be autograded. This means that we will have a set of tests which we will run against your submitted project, or homework. For quizzes we will simply extract the first line of your answer, the one which begins with 1. or 2..

In the event that you pass all tests, you will receive 100% on the project, homework or quiz. In the event that you fail some or all tests, you will receive a score, however a reader will examine your submission to determine your final score. If you simply misnamed a file, or formatted your quiz answer wrong (so that our autograder cannot read it) you will likely end up receiving full credit anyway.

If you submit a solution after the deadline, you will initially receive a 0 score. Again a reader will evaluate this to see if you submitted a valid solution before the deadline, or if you submission was late by, for example, just a minute or two, in which case we will be understanding.

You should ask general grading and grading policy questions on the newsgroup. Personal questions should be e-mailed to the reader that has set your score, or the one mentioned in the comment. Missing grades or major problems should be sent to Greg Gibeling (cs61c-ta <at> imail.eecs.berkeley.edu). Particularly if the autograder set your score. Before e-mailing, please check the comments about your score on glookup, if the comment says that your score needs to be reviewed by a reader, please don't bother e-mailing us, as your score isn't final anyway.

If you find you are missing a score for an assignment after others have it, most likely you did not submit that assignment. If you feel that's an error, one of the readers, or your TA can look into the matter for you.

Policy on collaboration and cheating

Cheating directly affects the reputation of the Department and University and lowers the morale of other students. As is consistent with departmental policy, incidents of cheating on an assignment will result in a negative grade on that assignment and may result in a failing grade in the course, while cheating on an exam will definitely result in a failing grade in the course. All incidents of cheating will be reported to the Office of Student Conduct, where records of academic misconduct are kept throughout your undergraduate career.

We encourage you to help each other learn the material by discussing the work before you do the assignments. Most students can distinguish between helping other students and cheating. For example, explaining the meaning of a question or offering advice on what an error message from the compiler means are both examples of interaction that we encourage. On the other hand, there is no reason that you should ever have another student's solution, or any part thereof, in your possession, either electronically or in hard copy form. (We will call this the "no code rule".) If you are not sure whether a particular interaction is appropriate, talk to your GSI/TA or one of the instructors before you turn in the assignment.  If you receive significant assistance on an assignment from someone, clearly acknowledge that person in your solution. Not only is this good scholarly conduct, it also protects you from accusation of theft of your colleagues' ideas.

Thus, presenting another person's work as your own constitutes cheating, whether that person is a friend, an unknown student in this class or a previous semester's class, or an anonymous programmer on the web who happened to have solved the problem you've been asked to solve. Everything you turn in must be your own doing, and it is your responsibility to make it clear to the graders that it really is your own work. The following activities are specifically forbidden on all graded course work:

Some of the assignments in this course will be done in partnership (labs). This will be clearly marked on the assignment, along with rules for choosing a partner. Any assignment that is not designated as a team assignment should be done individually. On partnership assignments, the above rules for individuals apply to the partnerships: you may not work with more than one partner, exchange partners without our permission, work with another partnership, or share solutions across partnership. Each individual in a partnership is responsible for the entire project, which means that you will be held responsible if your partner uses another group's solution to produce part of your partnership's solution.

In our experience, nobody begins the semester with the intention of cheating. Students who cheat do so because they fall behind gradually and then panic, or because they perceive that they have fallen behind when they have not.  Some students get into this situation because they are afraid of an unpleasant conversation with a professor if they admit to not understanding something.  In the past we have found that it is far more common that we explained something poorly than you didn't understand.  We would much rather deal with the misunderstanding early than deal with the consequences of cheating later.  Even if you are convinced that you are the only person in the class that doesn't understand the material, and that it is entirely your fault for having fallen behind, please remember that it is unlikely either of these is true, set aside your feelings and come ask for help.  More often than not, your requests for help change the class for the better in the future.

Many students also resort to cheating without consideration of the consequences because they don't expect to get caught.  Please make no mistake; we will be actively checking for plagiarism, particularly on the projects you submit, and any form of plagiarism, no matter how slight is likely to be found.

Please remember that the other students in the class are working under similar constraints they are taking multiple classes and are sometimes holding down outside employment.