CSE 351: The Hardware/Software Interface, Winter 2011
  CSE Home   About Us   Search   Contact Info 
 
Course Home
  Home
Administation
  Overview
  Course email
  Anonymous feedback
  View feedback
 
Assignment Utilities
  Home Virtual Machines
  Homework Turnin
  Class GoPost Forum
  Gradebook
 
Most Everything
  Schedule
   

Course Overview

  Pre-requisites
  Topics

Assignments

Exams
  Grades

Policies


 
Pre-requisites

Required

  • CSE 143: Familiarity with writing, running, and debugging Java programs. Familiarity with common programming language features (e.g., operator precedence, variables and scope, methods/procedures). Appreciation of the importance of data structures. (We won't be programming in Java, though.)
Generally Useful
  • We'll be programming in C on Linux, so any familiarity you have with those is a plus. (None is required, though.)

back to top     


 
Approximate Topic List

This is a new course, part of the newly redesigned undgraduate third year course structure. The list below is the set of goals set when designing the course.

  • Number representation: Twos complement, signed vs. unsigned, floating point (1 week)

  • Assembly (2 weeks)
    • Memory vs. registers
    • Instruction format
    • Control structures in assembly (loops, procedure call)

  • C (2 weeks)
    • Pointers, arrays, strings

    • memory management, malloc/free, stack vs. heap
    • structs

  • Compilation, linking, libraries (code across multiple files) (< 1 week)

  • The process model (what the O/S provides, not how it provides it) (1 week)
    • Virtualization and isolation (including virtual memory)
    • Components of a process state / notion of a context switch
    • System calls
    • Asynchronous signals

  • High-level machine architecture (1 week)
    • Register file
    • Instruction cycle
    • Caching / memory hierarchy

  • The Java-to-C connection (1 week)
    • Representing an object as pointer to struct with pointer to method-table; performing a method call
    • Constructors as malloc-then-initialize
    • Garbage collection via reachability from the stack
    • Java array-bounds-checking via array-size fields

  • Parallelism / multicore / pthreads (1 week)

back to top     


 
Assignments

There will be three kinds of assignments given throughout the class:
  • Textbook Reading: you will be given reading assignments from the course textbook associated with each lecture. You should try to finish the reading before coming to the lecture. We will be covering a large fraction of the topics in the text. It won't be easy to catch up if you fall behind.
     
  • Textbook(-style) questions: Some assignments may include questions from the text, occasionally supplemented with similar questions I invent.
     
  • Programming: We'll be doing C programming, on Linux. You won't end up a master of either C or Linux, but you'll be well posed to become one.

    This quarter I'm encouraging the use of the CSE home Linux virtual machine for the programming assignments.

This is a 4 credit hour course, meaning that it deserves something like 12-16 hours of your undivided attention per week. Try to reserve hours for the reading and stick to your schedule, even if some programming assignment that isn't going as well as you expected (i.e., all of them, for all of us) is coming due shortly.

back to top    


 
Exams

     There will be one midterm and a final exam for this course. The dates are listed on the course calendar. The midterm date is subject to change (with reasonable advance notice given).

back to top    


 
Grades

     Grades will be assigned roughly as follows:

  • Homeworks: 55%
  • Midterm: 15%
  • Final: 30%

back to top     


 
Policies

(Many of these policies are taken verbatim from previous instances of this course.)
  • Late Policy: There is a 10% penalty for each late day, or portion thereof. You get two free late days - two days of lateness with no penalty - to use at your discretion.

  • Reasonableness: No set of rules can apply perfectly in every setting. Reasonable exceptions can be made.

  • Cheating vs. Collaboration: Collaboration is a very good thing. On the other hand, cheating is considered a very serious offense, and is vigorously prosecuted. Vigorous prosecution requires that you be advised of the cheating policy of the course before the offending act. For this course, the policy is simple: don't cheat. You know it when you're doing it. We'll recognize it when you do it.

    That said, collaborating is, for many people, an effective way to learn. Learning isn't cheating. Misrepresenting that you've learned something, or done the work that implies you've learned something, almost certainly is.

back to top   


Computer Science & Engineering
University of Washington
Box 352350
Seattle, WA  98195-2350
(206) 543-1695 voice, (206) 543-2969 FAX
[comments to zahorjan at cs.washington.edu]