The Hardware/Software Interface

Gaetano Borriello and Luis Ceze, University of Washington

Examines key computational abstraction levels below modern high-level languages. From Java/C to assembly programming, to basic processor and system organization.

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).

Syllabus

This course should develop students’ sense of “what really happens” when software runs — and convey 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.). 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 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.
At the end of this course, students should:
  • 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).
Topics:
  • Number representation
  • Assembly language
  • Basics of C
  • Memory management
  • Operating-system process model
  • High-level machine architecture
  • Memory hierarchy
  • Implementation of high-level languages

Recommended Background

Introductory programming in C or Java as well as familiarity with binary numbers.

Suggested Readings

Text are recommended but not required:

Computer Systems: A Programmer’s Perspective, 2nd Edition (CS:APP2e)
Randal E. Bryant and David R. O’Hallaron
Prentice-Hall, 2010

Purchase direct from Pearson
Purchase eBook from CourseSmart
Purchase print or Kindle edition from Amazon.com

Students are also encouraged to have access to a good C reference – any will do – there are many available on the web as well:

The C Programming Language (Kernighan and Ritchie)
C: A Reference Manual (Harbison and Steele)

Course Format

Video lecture topics. Written homework and programming assignments. Only the programming assignments will be graded. The written assignments provide students with a sense for the kinds of topics and analysis are considered most important.
Dates:
  • 30 June 2014, 8 weeks
  • 15 April 2013, 8 weeks
Course properties:
  • Free:
  • Paid:
  • Certificate:
  • MOOC:
  • Video:
  • Audio:
  • Email-course:
  • Language: English Gb

Reviews

No reviews yet. Want to be the first?

Register to leave a review

Show?id=n3eliycplgk&bids=695438
Included in selections:
Embedded-systems_shape-the-world_378x225 Микроконтроллерные системы
3-4 курс МИЭМ ВШЭ, 7 кредитов
NVIDIA
More on this topic:
6-02f12 Introduction to EECS II: Digital Communication Systems
An introduction to several fundamental ideas in electrical engineering and computer...
Sp-769f04 Photovoltaic Solar Energy Systems
This class will study the behavior of photovoltaic solar energy systems, focusing...
Extensionflag Systems Programming and Machine Organization
This course covers the fundamentals of computer systems programming...
6-004s09 Computation Structures
6.004 offers an introduction to the engineering of digital systems. Starting...
Extensionflag Introduction to Computer Science Using Java I
Intended for students with no previous programming background, this...
More from 'Computer Science':
Regular_7d911eb6-1549-4551-aef8-7a752052d4fb Social Media Analytics: Using Data to Understand Public Conversations
How can you discover what’s being said about the things that matter to you on...
Regular_1361bcd9-a334-41ef-9b5b-ce2f3b8355ef Internet of Things for Active Aging
Learn about how the Internet of Things can help people aging well with this...
Regular_6c70469a-6f1d-4ff7-bcd0-b5780b6d9fd0 Cyber Security for Small and Medium Enterprises: Identifying Threats and Preventing Attacks
Discover what common cyber threats and attacks face small and medium enterprises...
Regular_12b2b05f-d1a4-4512-a1fb-2c56cafa6174 Competitive Advantage: Using Information to Build Business Success
Learn the value of information to businesses and how it can give the business...
Regular_1926570c-cfb2-452b-8a0f-b75e61ab4458 Understanding Data in the Tourism Industry
How can you benefit from using data in your tourism business? Learn the opportunities...
More from 'Coursera':
Success-from-the-start-2 First Year Teaching (Secondary Grades) - Success from the Start
Success with your students starts on Day 1. Learn from NTC's 25 years developing...
New-york-city-78181 Understanding 9/11: Why Did al Qai’da Attack America?
This course will explore the forces that led to the 9/11 attacks and the policies...
Small-icon.hover Aboriginal Worldviews and Education
This course will explore indigenous ways of knowing and how this knowledge can...
Ac-logo Analytic Combinatorics
Analytic Combinatorics teaches a calculus that enables precise quantitative...
Talk_bubble_fin2 Accountable Talk®: Conversation that Works
Designed for teachers and learners in every setting - in school and out, in...

© 2013-2019