Goals and Syllabus
Course Description
From
the course
catalog:
CSE 410: Computer Systems (3) -
Structure and components of hardware and software systems. Machine organization, including central processor and input-output architectures; assembly language programming; operating systems, including process, storage, and file management. Intended for non-majors. No credit to students who have completed CSE 351 or CSE 451. Prerequisite: CSE 373.
Course Goals
This course should develop students' sense of "what is really happening"
when software runs — and that this question can be answered at
several levels of abstraction including hardware architecture, machine instructions,
assembly language, the memory hierarchy (including caches and virtual memory),
operating systems, and higher-level languages like C and Java.
The core around which the course is built is C, assembly, and low-level data
representations, but this is connected to other levels as well as to the role of
the operating system in providing abstractions used to support programs.
The goal is to understand how these abstractions interact from the programmer's
perspective and how they affect program execution.
Course Themes
The course has three 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 executed by 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 simultaneously
Course 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;
- use pointers to manipulate complex data structures;
- write and interpret simple pieces of assembly code (x86-64) and map between high-level languages and assembly;
- describe the basic organization and parameters of memory hierarchy and explain its importance for system performance;
- explain the role of an operating system;
- describe what parallelism is and why it is important at the system level; and
- program more effectively (e.g. more efficient at finding bugs, improved intuition about system performance).
Course Syllabus
Approximate list of topics (approximately 1 week each - 1 to 3 lectures):
- Memory and data representation
- Number representation for integers and floats
- Machine code and the C programming language
- x86 assembly language
- Procedures and stacks
- Arrays and other data structures
- Memory and caches
- Operating system process model
- Virtual memory
- Operating system overview
Note that even more important than the topics at various levels of
abstraction is the connection between them: students should get an
informal sense of how C could be translated to assembly, how assembly
could be translated to binary, and how data is manipulated during
program execution.