Machine architectures define interfaces - specifications of what can be done
and how to make those things happen. Architectures are typically thought of
as the lowest level interface in a system, the one defined by the hardware.
Complicated software behavior is obtained by layering many interfaces on top
of this lowest level one - e.g., the operating system, the language runtime,
a set of libraries/packages, and the application code.
This course typically looks down from the architecture interface,
concentrating on how to build hardware systems that implement it efficiently.
We will do that as well, following the book to concentrate on critical
components of the hardware organization, in particular the central processing
unit (CPU) and memory subsystem.
More than in most instances of 378, though, I'd like to spend a little time
also looking up from the architecture interface, to explain the role of other
system components (e.g., compilers, linkers, and the operating system),
how their jobs are affected by the architecture, and what the architecture must
do to support them.
By the end of the quarter, you should understand not only the fundamentals of
how machines are built (and why they're built that way), but also the
fundamentals of how computer systems operate. (And you may have learned a bit
of C along the way as well.)
CSE 303 -
Reasonable familiarity with C, including the concepts of linking and
the run time library.
CSE 370 -
Especially computer organization
and some of the material in the
finite state machines topic.
There will be homework.
In all cases the goal of the homework is to help motivate you to
learn the material,
and to help verify that you've done so.
The majority of the homeworks will be done using
SMOK/Cebollita, and are cumulative: each
successive homework builds upon the previous one, either directly,
as a modification of an earlier machine design, or more indirectly,
making use of the key concepts from the earlier homework.
Most of the homeworks will be done in (randomly assigned) teams.
I'd like this to be an interactive class.
Interaction with the instructor and the TAs in class and during office
hours is highly encouraged.
"Appropriate" interaction with each other, say through the
class mail list, is also encouraged. (See the Policies section
for some guidance on what "appropriate" might mean.)
There will be two mideterms. The dates on which they will be held
could change (e.g., if we get off schedule in the lectures).
- Midterm I: Friday, January 27 (Date subject to change.)
- Midterm II: Friday, February 24 (Date subject to change.)
- Final exam: 8:30-10:20am, Wednesday, March 15
Grades will be assigned roughly as follows:
- Homeworks: 45%
- Midterms: 10/15%
- Final: 25%
- Section quizzes & course participation: 5%
- Late Policy: unless otherwise indicated, assignments and
projects are due by the beginning of lecture on their due date. If
you hand in an assignment late, we will take off 20% for each
day (or portion thereof) it is late. However, you have two
extension days that you can use as you please to avoid the late
penalty. If you want to use one, make sure that it is clear to
the TA you are doing so.
- Cheating vs. Collaboration:
Let me just state up front that this is an unresolvable issue.
Collaboration, as an aid to learning, is highly encouraged.
Cheating is just as highly discouraged.
The university more or less requires that each course present
you (students) with a clear definition of unacceptable behavior.
Here it is for this course: cheating is any effort made to
earn points without actually doing the work those points represent
or understanding the material to the degree those points indicate.
Not cheating is anything you do that helps you understand the
course material (not just the solution to a single problem, but
the underlying information on which the solution rests).
If you're unsure about any particular activity, please ask.