强烈推荐Coursera的《Hardware/Software Interface》

Y君
2013-06-16 看过
最新课程:2014年6月30日这门课在Coursera开始第二季,地址https://www.coursera.org/course/hwswinterface,请大家及时关注

如果你觉得这本书过于厚重担心看不下来的话,不妨跟着coursera的Hardware/Software Interface这门课程去听一听。这本书虽然是这门课的超集,但是其中的关键与精华都在课程中有讲到。其实更关键的是,coursera的课将原书中最为精彩的lab移植了过来,在做这些作业时很难感到枯燥。下面把这门课的lab列出来,以及一些提示:

Lab1:位运算,我觉得这是最无聊也是最有趣的一个Lab,看你怎么看它。说其无聊主要是指没有成就感(相对于其他的Lab来说),说其有趣是指也许这是你第一次用这么少的代码实现这么多的功能。甚至可以只用与或非来实现三目运算符

Lab2:BinaryBomb,拆炸弹,非常经典的Lab。一共有6个Phase,每个Phase都需要你打开GDB(懒人可以用DDD),打各种断点,查看各种寄存器内存状态,分析汇编语句,整理出结构。6个Phase从易到难,分别是简单的比较(助教已经演示)、循环(这个可以算是最耗时间的,一旦你通过了这个Phase,剩下的就好说了)、switch语句(注意计算offset)、递归(嗯,fib什么的)、指针数组(注意跟踪过程,一定要有纸笔)、链表(排序算法什么的)。这个Lab是整门课最精彩的Lab,因为时刻伴随着你在一步步地逼近真相的神秘感与快感。当这个Lab做完后,你会发现GDB调试功力大涨,对于操作系统的调用过程也很熟悉了。

Lab3:内存攻击,最邪恶的Lab没有之一,这个Lab是要你去利用内存溢出的漏洞去攻击给你提供的可执行程序。这个Lab也有好几个Phase,最后一个Phase是直接注入自己的汇编代码。sendmail真是被黑出翔

Lab4:不透明的Cache,又是类似于Lab2的黑箱Lab,通过给几个虚拟的Cache提供输入,以及Cache给你返回的Hit/Miss信息判断Cache的规格。对了解Cache的结构很有帮助

Lab5:手写一个malloc,嗯,你没看错。不过其中最痛苦的块合并功能已经给你写好了,你只要知道malloc、free的流程就可以了,侯捷老师课上学的东西终于能派上用场了

这就是全部的5个lab,设计的精巧程度自然不用多说,关键是,之前有可能只是抽象的学过这些概念,比如Cache、比如内存溢出攻击,这次就可以实际观察、演练。

这门课的最后一章还讲了一些JVM与Intel架构的不同之处,对Java有些了解的同学可以听一听。

最后还要说,尽管这本书和这门课很精彩,但毕竟是体系结构入门的教材,在大多数方面还是和操作系统、组成原理的深度是比不了的。所以我觉得这本书大三之前还值得看(最好在操作系统前看),到大三之后,除非是为了面试临时复习抱佛脚,否则这本书还是讲的有些浅了。不过如果是作为汇编的入门,倒是很好的教材。
372 有用
10 没用

查看更多豆瓣高分好书

评论 46条

查看更多回应(46)

深入理解计算机系统(原书第2版)的更多书评

推荐深入理解计算机系统(原书第2版)的豆列

了解更多图书信息

豆瓣
免费下载 iOS / Android 版客户端