读CSAPP

  两个月来断断续续地把CSAPP中ICS课程的章节看完。讲系统的书多少有些枯燥,但看下来的收获与成就感是不可替代的。

  国内的CS专业讲计算机系统通常有两门必修课程——机组和操作系统,前者很偏硬,很多内容对于程序员不实用,也就失去了学习的兴趣。CSAPP则从程序员的视角窥视计算机系统,并无讨厌的数字电路内容,深入浅出,让人有看下来的兴致。全书以C语言和Unix系统为例子。

  第1章,计算机系统漫游:导论的章节。

  第2章,信息的表示和处理:C变量的机器级表示,最基础的内容,讲得很详细。熟悉的可以略过这一章。

  第3章,程序的机器级表示:也就是介绍汇编语言。国内一些汇编语言教材会从mov开始逐个介绍指令,教你手工编写汇编代码,让人无所适从。CSAPP则是把一段C代码与GCC编译成的汇编代码对照着讲,意在让你理解汇编代码——毕竟这年头很少会用到汇编语言开发什么东西,更多的是通过观察汇编代码,调试或调优C,C++代码。

  第4章,处理器体系结构:太偏硬,直接跳过。知道现代处理器的流水线技术就够了。

  第5章,优化程序性能:讲指令级的优化。实际编程中,通常做到算法级的优化就够了,让编译器去干优化指令的苦差。这一章告诉我们,编译器的优化并不完美——尤其是涉及指针的操作,编译器为了确保正确的运行结果,会采取更保守的优化策略。

  第6章,存储器层次结构:比较枯燥的一章,局部性更好的程序跑得更快。

  第7章,链接:只看了静态链接的部分。“重定位”一节似乎有些晦涩,在那卡了很久才自以为看懂。

  第8章,异常控制流:通过异常控制流引出进程的概念,并介绍了一些Unix的库函数。很枯燥的一章……

  第9章,虚拟存储器:这一章很精彩。虚拟地址的概念让进程觉得自己的内存空间是连续线性的。而操作系统又能够根据映射机制作出优化——例如通过“写时拷贝”技术, fork函数比想像的廉价。“动态存储器分配”一节介绍了各种分配器的实现,以及malloc函数的实现——此前一直以为malloc只是简单地向系统申请堆空间……“垃圾收集”一节并不深入,只是简单地介绍了Mark&Sweep算法,以及为什么C语言难以有效地垃圾回收。

  以后再看最后3章吧……

你可能感兴趣的:(APP)