Computer Science
>
>

CSE 351 The HW/SW Interface

Autumn 2022

University of Washington

This course develops students' understanding of software functioning at different levels of abstraction. Focus areas include C, assembly, and low-level data representation. It also introduces concepts of operating systems and differences between Java and C. It serves as a starting point for those interested in hardware or high-level abstractions.

Course Page

Overview

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 (CSE333), Operating Systems (CSE451), Compilers (CSE401), 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.). Of particular interest are Introduction to Digital Design (CSE369), Design of Digital Circuits and Systems (CSE371), Introduction to Embedded Systems (CSE474), and Computer Architecture I (CSE469).

Prerequisites

No data.

Learning objectives

At the end of this course, students should be able to:

  • Describe the multi-step process by which a high-level program becomes a stream of instructions executed by a processor;
  • Describe the basic organization of the memory hierarchy and the effect of its parameters on system performance;
  • Trace the execution of assembly code (x86-64), map the assembly to high-level language constructs, and write simple pieces of assembly programs;
  • Write C code using pointers to create and manipulate complex data structures;
  • Write (or rewrite) code to be take advantage of the computer execution model to improve execution efficiency;
  • Debug small-ish C and assembly programs using GDB;
  • Explain the role of an operating system;
  • Describe fundamental differences between Java and C.

Textbooks and other notes

Course Themes

Course Themes

The course has four principal themes:

  • Representation: How different data types (from simple integers to arrays of data structures) are represented in memory, how instructions are encoded, and how memory addresses (pointers) are generated and used to create complex structures.
  • Translation: How high-level languages are translated into the basic instructions embodied in process hardware with a particular focus on C and Java.
  • Control Flow: How computers organize the order of their computations, keep track of where they are in large programs, and provide the illusion of multiple processes executing in parallel.
  • History and Society: The principles computers are built upon were influenced by the societal context of the historical periods in which they were designed and, in turn, computers influence society in ways far beyond pure computational power.

Other courses in Computer Systems

CS 110: Principles of Computer Systems

Winter 2022

Stanford University

CS 107e Computer Systems from the Ground Up

Winter 2023

Stanford University

CS 107A: Problem-solving Lab for CS 107

Autumn 2022

Stanford University

ELE/COS 475 Computer Architecture

Fall 2019

Princeton University

Courseware availability

Lecture slides available at Schedule

Topic videos available on YouTube at 351 Topic Videos

Assignments available at Assignments

Simulators, Linux, Debug and other resources available at Main

Covered concepts