Get started with custom lists to organize and share courses.

Sign up

Class Central is learner-supported. When you buy through links on our site, we may earn an affiliate commission.

The Hardware/Software Interface

University of Washington via Coursera

11 Reviews 439 students interested

Taken this course? Share your experience with other students. Write review

Overview

Sign up to Coursera courses for free Learn how

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

Taught by

Luis Ceze

Help Center

Most commonly asked questions about Coursera Coursera

Reviews for Coursera's The Hardware/Software Interface
4.5 Based on 11 reviews

  • 5 stars 55%
  • 4 stars 45%
  • 3 star 0%
  • 2 star 0%
  • 1 star 0%

Did you take this course? Share your experience with other students.

Write a review
  • 1
Sami L
5.0 5 years ago
Sami completed this course, spending 6 hours a week on it and found the course difficulty to be hard.
This course starts by taking off most of the nice things most programmers are accustomed to and tosses simple bit manipulation exercises on the face of students. While this may seem backward and antiquate, it forces students to think hard. This is especially true for those who have not fiddled with such a low level stuff previously.

Although fairly demanding in terms of time, the course gives a lot as well. Most of the homework is presented as challenges which gradually get more difficult. Some of the problems were quite difficult even though I do have a somewhat solid background …
3 people found
this review helpful
Was this review helpful to you? Yes
Farsan R
4.0 2 years ago
by Farsan completed this course and found the course difficulty to be hard.
Coursera does not offer this course anymore. This was a tough course. Usually coursera courses have pass mark around 80% but this course demanded only 65% which is indicator of how difficult course it was. But if you have time, patience and interest to know how high level computer programs are broken down into low level machine readable codes you might want to try it. Memory management was also covered in the course.
Was this review helpful to you? Yes
Emmebi E
4.0 5 years ago
Emmebi is taking this course right now and found the course difficulty to be hard.
It seems a very well crafted and interesting course, but not at all for beginners: you must have already had exposure to C language, and in general the pace of the course is fast
4 people found
this review helpful
Was this review helpful to you? Yes
Radomirs C
5.0 a year ago
by Radomirs completed this course, spending 6 hours a week on it and found the course difficulty to be hard.
A few years ago I was trying to take this course. It wasn't easy and had plenty of quite challenging and very interesting hand-on assignment that gave understanding of the material. Regretfully the course was taken off by Coursera with no further explanation. I wish it was back.
Was this review helpful to you? Yes
Hari R
4.0 3 years ago
by Hari completed this course.
0 person found
this review helpful
Was this review helpful to you? Yes
Andrei D
5.0 3 years ago
by Andrei completed this course.
0 person found
this review helpful
Was this review helpful to you? Yes
Andrew Y
5.0 2 years ago
Andrew completed this course.
Was this review helpful to you? Yes
Andrei
5.0 4 years ago
Andrei completed this course.
Was this review helpful to you? Yes
Christopher P
5.0 3 years ago
by Christopher completed this course.
Was this review helpful to you? Yes
Juliano I
4.0 3 years ago
by Juliano completed this course.
Was this review helpful to you? Yes
Ilya R
4.0 4 years ago
by Ilya completed this course.
Was this review helpful to you? Yes
  • 1

Class Central

Get personalized course recommendations, track subjects and courses with reminders, and more.

Sign up for free

Never stop learning Never Stop Learning!

Get personalized course recommendations, track subjects and courses with reminders, and more.