The Hardware/Software Interface

开始时间: 06/30/2014 持续时间: 8 weeks

所在平台: Coursera

课程类别: 计算机科学

大学或机构: University of Washington(华盛顿大学)

授课老师: Luis Ceze Gaetano Borriello

   

课程主页: https://www.coursera.org/course/hwswinterface

Explore 1600+ online courses from top universities. Join Coursera today to learn data science, programming, business strategy, and more.

课程评论: 7 个评论

评论课程        关注课程

课程详情

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

课程大纲

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

课程评论(7条)

0

老爷不要啊啊啊 2014-07-28 07:06 0 票支持; 0 票反对

我做一个2分法来概述这门课的内容, 前一半程序在汇编和机器级别上的执行情况, 具体说是汇编语言阅读理解和位操作; 后一半Caching
对于没有former exposure的学生, 这门课不能用ad-hoc的方法和self-contained的看法去对待, 这是大量学生在lab1和lab2退出的原因. Video只是老师对textbook的简要陈述, 无法取代textbook. Textbook要做题, 要动笔.
端正了学习的方法和态度后, 你可以有一个高质量的知识吸收, 由困惑造成的挫折感会很少, 这个过程是非常愉快的, 不是最终grade能体现的(如果全独立完成, grade是能够体现其中区别的). 祝你学习顺利

1

超級現實的超現實理想主義者 2013-11-05 17:16 1 票支持; 0 票反对

轮次:Apr 2013

背景:
因为是文科生,当时学的时候几乎是一张白纸,没有物理、电气工程、C语言、Linux等背景。 有过部分编程经验,有数理逻辑背景。因为背景欠缺比较厉害,学这门课的时候吃了不少苦头,不过最后还是以96.8%过了~
接触过或者熟练C语言、UNIX(Linux),并且学过数理逻辑(离散数学)的朋友基本可以胜任这门课程。

内容:
里面的内容还是比较贴合CSAPP的。
讲师有两位,都是胖胖的挺可爱的那种, 其中年长的那位来自意大利(居然没有口音),年轻的来自巴西。听年长的那位讲课不论是讲课语调还是声线都是一种享受,年轻的那位语速有点快(而且中间有一节课讲到后面感觉好像搞砸了,记得停了好一会儿,急得说不出话来,感觉挺可爱的)
两位老师其实讲得都挺好,不过不知道是授课水平的原因还是课程内容的原因,听年长的那位讲课的时候基本上没翻过书,听年轻的那位老师讲完课以后还得把书上相关内容看一遍

作业:
这门课最重头也就是它的作业了。这个是University of Washington同名课程的主页:
http://courses.cs.washington.edu/courses/cse351/
Coursera版和UW他们学校自己上课用的作业基本一致。
该课有普通的Homework以及5个Lab, 其中只有5个Lab算入评分(Homework很多题目直接来自CSAPP,而且答案很多书上就有)其中前三个Lab来自CMU(CSAPP中几个著名的试验)

Lab 1: Manipulating Bits Using C
作业的要求是用bitwise operator(位运算符)解决一系列问题,而且有字符数限制,要在一定字符范围内搞定。每一小题都像是填空题一样,但是很花时间和脑力,当时花了一整天的时间做完以后已经头昏眼花了...这也是这门课唯一需要用到一些逻辑学知识的地方,如果懂一些基本的数理逻辑,例如德摩根率(De Morgan's law)搞定这个Lab应该不成问题
后面还有一道关于pointer的题目,不过记忆中好像比较简单,印象不深了

Lab 2: Disassembling and Defusing a Binary Bomb
传说中的二进制炸弹。当时对于Command Line(Linux)基本上一窍不通,光凭着课程提供的cheat sheet凑代码,虽然做出来了,但是至今依然觉得匪夷所思...

Lab 3: Buffer Overflows?|?d??|?d?Segmentation fault: 11
传说中的缓冲区溢出攻击试验。同上一个Lab, 虽然做出来了,至今依然觉得匪夷所思...不过对于stack frame有了很好的理解

Lab 4: Cache Geometries
这个试验是让你用反向工程破解一个CPU的构造,如果课程内容好好理解的话应该没太大问题,当时论坛帮了我很多忙,有很多牛人在我对概念理解不清的时候给出了很好的解释。感觉这是5个Lab中难度最低的一个。

Lab 5: Writing a Dynamic Storage Allocator
这个试验要亲手实现两个函数:malloc和free。当时在这道题目上花了很多时间,甚至还把它提供的框架代码研究了一遍,现在想想其实没有太大必要。说一个小插曲,当时写出代码以后死活运行不对,于是带着极大的挫折感在QQ上向同时在上这门课的@wzyer 求助,他盯着我的代码没多久就找出了一个非常非常细小的bug,然后就运行成功了,不愧是大神!

社区:
这门课的社区对于我的帮助非常大,在学习的过程中遇到了各种问题很快就有各路牛人给出了很好的解答(因为问题问太多感觉都有点不太好意思了,于是发了很多匿名贴...)

感受:
收获非常大的一门课,回想起整个过程就常常觉得自己赚到了。

3

wzyer 2013-08-08 22:02 3 票支持; 0 票反对

教材是CSAPP,程序猿必备基础教程。课程的内容与CSAPP前半部分基本一致,由于课时的关系,后面的内容讲的不多。不过个人感觉前半部分已经够了,后面未讲的内容——IO,网络,并发什么的其实都可以以后深入学习。所以这门课的内容安排个人觉得很紧凑凝练,学过之后会对计算机的基本结构,汇编指令及其执行,内存模型等等内容有清晰准确的概念,为之后的学习工作打下坚实的基础。

不能不提到的还有课程的作业。前面几周的作业完全来源于CSAPP在CMU开课的内容。分别是位运算,二进制炸弹和缓冲区溢出攻击。感觉很有趣味性和挑战性,绝对值得你付出时间。后面的两周作业好像不是CSAPP上的,不过也很有启发性,对于加深理解极有帮助。

这门课的老师其实并没有给我留下多少深刻印象,感觉讲课比较中规中矩。不管怎么说,这种课程,清晰正确的把原理表述清楚就是负责任的老师了吧。

如果你没上过类似课程,那这门课绝对不能错过。

1

ototsuyume 2013-06-07 18:14 1 票支持; 0 票反对

当初被这门课的名字被骗了,还以为是硬件的课程,实际上用的教材是CSAPP,讲解得很好,编程作业设计得的也很有挑战性。特别是那个老头子教授的英语很清晰而且咬字发音很准确,像我这种英语瘸腿的不看字幕几乎能听清楚每一个词。另外传说CMU这门课程更好,学完后有脱胎换骨的感觉

0

超級現實的超現實理想主義者 2013-06-05 23:37 0 票支持; 0 票反对

世界名著CSAPP的配套課程,內容不用多說。課程的精華在于他的五個Lab,直接出自CSAPP,對我這種菜鳥來說挺有挑戰性的。很享受這種從一籌莫展,無從下手到最後搞定的過程。同時也謝謝高人指點,幫我挖出自己不可能找到的“知識死角”

0

课程图谱 2013-06-03 13:46 0 票支持; 0 票反对

如果你熟知或者正在学习“深入理解计算机系统”这本书,那么就不要错过这门由华盛顿大学出品的“The Hardware/Software Interface”的公开课,这门课程的配套书就是“深入理解计算机系统第二版”,其目的就是培养学生“计算机到底发生了什么”的意识。

0

wzyer 2013-05-17 09:31 0 票支持; 0 票反对

其实我比较在乎它的作业。内容嘛,其实就那么多,谁来讲也是那么多。作业应该都是出自CSAPP,所以还是很不错的课程。

Step forward in 2017: Build in-demand career skills with Coursera

课程简介

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

课程标签

计算机 计算机科学 C 计算机系统 java 深入理解计算机系统 CSAPP 二进制炸弹 buffer overflow CMU Hardware/Software C语言 汇编语言 缓冲区溢出 华盛顿大学 UW Linux

126人关注该课程

主题相关的课程

Introduction to Databases 关注

Computer Security 关注

Cryptography II 关注

Cryptography I 关注

Pattern-Oriented Software Architectures for Concurrent and Networked Software 关注

关注

C++ For C Programmers 关注

Artificial Intelligence Planning 关注

Computer Architecture 关注

Natural Language Processing 关注