Details
Examines key computational abstraction levels below modern high-level languages. From Java/C to assembly programming, to basic processor and system organization.
About the Course
This course 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. We will 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).
Outline
- 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.
- understand the multi-step process by which a high-level program becomes a stream of instructions executed by a processor;
- know what a pointer is and how to use it in manipulating complex data structures;
- be facile enough with assembly programming (X86) to write simple pieces of code and understand how it maps to high-level languages (and vice-versa);
- understand the basic organization and parameters of memory hierarchy and its importance for system performance;
- be able to explain the role of an operating system;
- know how Java fundamentally differs from C;
- grasp what parallelism is and why it is important at the system level; and
- be more effective programmers (more efficient at finding bugs, improved intuition about system performance).
- Number representation
- Assembly language
- Basics of C
- Memory management
- Operating-system process model
- High-level machine architecture
- Memory hierarchy
- Implementation of high-level languages
Speaker/s
Jerre D. Noe Professor
Computer Science & Engineering
University of Washington
Gaetano Borriello is Jerre D. Noe Professor of Computer Science & Engineering at the University of Washington with adjunct appointments in Electrical Engineering, Human Centered Design & Engineering, and the Information School. His PhD is in Computer Science from the University of California at Berkeley. He has received the UW Distinguished Teaching Award and is a Fellow of both the ACM and IEEE. He is also a Fulbright Scholar and a UC Berkeley CS Division Distinguished Alumni.
Associate Professor
Computer Science & Engineering
University of Washington
Luis Ceze is an Associate Professor in the Computer Science and Engineering Department at the University of Washington. His research focuses on computer architecture, programming languages and OS to improve the programmability, reliability and energy efficiency of multiprocessor systems.