From the course catalogue:
CSE 351: The Hardware/Software Interface (4) - Examines key computational abstraction levels below modern high-level languages; number representation, assembly language, introduction to C, memory management, the operating-system process model, high-level machine architecture including the memory hierarchy, and how high-level languages are implemented. Prerequisite: CSE 143.
This course should develop students’ sense of “what really happens” when software runs — and that this question can be answered at several levels of abstraction, including the hardware architecture level, the assembly level, the C programming level and the Java programming level. The core around which the course is built is C, assembly, and low-level data representation, but this is connected to higher levels (roughly how basic Java could be implemented), lower levels (the general structure of a processor), and the role of the operating system (but not how the operating system is implemented).
For (computer science) students wanting to specialize at higher levels of abstraction, this could in the extreme be the only course they take that considers the “C level” and below. However, most will take a subset of Systems Programming, Hardware Design and Implementation, Operating Systems, Compilers, etc.
For students interested in hardware, embedded systems, computer engineering, computer architecture, etc., this course is the introductory course after which other courses will delve both deeper (into specific topics) and lower (into hardware implementation, circuit design, etc.).
This course should develop students’ sense of “what really happens” when software runs — and that this question can be answered at several levels of abstraction, including the hardware architecture level, the assembly level, the C programming level and the Java programming level. The core around which the course is built is C, assembly, and low-level data representation, but this is connected to higher levels (roughly how basic Java could be implemented), lower levels (the general structure of a processor and the memory hierarchy), and the role of the operating system (but not how the operating system is implemented).
The course has three principal themes:
At the end of this course, students should:
Weeks are approximate; they are particularly useful for identifying topics that are essential for “connecting the pieces” yet which do not command a large portion of the class (e.g., Java-to-C). The order of presentation depends on instructor preference. There are arguments for “top down” (they already know Java), for “bottom up” (understand what’s going on below), or starting with C (useful for homeworks).
Course Format: Three hour-long lectures plus a one-hour tutorial section per week. Total lecture hours 27-29 depending on the quarter in which class is taught. Two in-class exams (1 hour midterm and 2 hour final).
Evaluation: 4 written homework assignments, 5 lab assignments, a 1-hour in-class midterm exam, and a 2-hour in-class final exam.
ABET Credit Allocation: Four (4) credits of Engineering with a significant design component.
ABET Outcomes Coverage:
Prepared By: G. Borriello and L. Ceze
Last Revised: July 9, 2012
The material on assembly, machine language, and CPU organization was previously taught in CSE 378. The material on number representation was taught in CSE 370. This course will be many students’ first exposure to C, where CSE 303 once held that distinction. Competent C programming is covered in a separate course: Systems Programming. In the old curriculum, the role of an operating system was briefly touched on in CSE 378, but was otherwise seen only in CSE 451.