CSAPP与15213
这本书反正大家都在推,对应的解析也很多,不过就知乎和部分社媒上的观感上来说,可能真正看完这本书并完成对应实验的人没有看上去那么多。
在CSDIY中PKU飞猪罕见地给一门导论课打上了5星的难度,就我看完的体感来说,5星不至于但4星还是有,总体来说是一本兼具深度和广度的很好的书籍,叫它导论一定程度上屈尊了。
前情:
这本书是本人在大四补基础时最早开始学习的资料。当时由于基础不够扎实,本人阅读学习本书采用了最笨的方法,一字不落地看原著和课程,书写的很有趣所以其实过程并没有感觉枯燥,感觉收获还是比较大的。
在22年6月底的帖子中,本人提到因为做毕设以及自己能力有限,这本书一开始自己啃了一半,但是最终还是没有坚持下去,干了三个月进度推不下去,跑路去补习其他功课了。一年半过去了,在上个月本人恰好有了一段相对慵懒的时间,就把书籍从第七章开始往下看,差不多一个月时间一边玩一边把上次剩下的半条尾巴收掉了,于时感觉虽然这两年啥也没做,但见过的世面至少比两年前大了(叹×)
必要性:
我校本科的计算机系课程布置相对扎实,但缺乏一个介于数据结构、组成原理,和操作系统、体系结构课程中的一个衔接式导论课程,部分同学上课有概率会因为学习曲线较为陡峭而心生畏惧。现在的开源芯片设计课布置在大三下学期,其对应的PA任务与CSAPP有部分重叠,但开课时间很难起到“导论”的意味。
我校网安专业现将组成原理和体系结构并做一门,然后在下个学期上操作系统课,而网安的部分计算机基础课程设计质量并不是比较令人安心。虽然我校网安专业绝大部分同学应该不会选择偏向System与二进制方向作为将来的主攻方向,但不排除有少数像鄙人这样方向跨度较大,碰瓷系统安全和操作系统方向的同学存在。
内容简要梳理:
ICS课程有很多种类型,不同与Yale N Patt的更加偏向电路的ICS书籍(感兴趣的同学也可以去阅读,书写的不错),CSAPP侧重于从一个programmer
的视角去了解计算机系统,也就是说,他面向的人士可能不像是专门造芯片、从事IC行业的人群,而是从事系统软件开发或者更上层的相关人士,对于系统软件之下的部分硬件特性,该书做了一定的屏蔽。
具体内容包括:
- 数据的表示 -> 完成datalab,学习位操作的一些奇技淫巧。
- 汇编 -> 完成bomblab和attachlab,CTF中RE和PWN的入门课,不过做起来也没那么快,本人大四时各花了两三天时间去做。
- 处理器结构 -> 介绍一个类似X86-64的Y86-64模拟器,对应archlab,本人不搞体系结构便看完书就没动了。
- 程序简单优化 -> 一些看上去微不足道的程序优化小窍门,这一章总结来一句话就是注重两个局部性。
- 内存架构 -> 介绍内存,局部性以及缓存的东西,对应cachelab,Lab做起来和搭积木体感接近,比较快乐。
- 链接 -> 非常简单介绍了链接,讲了一下COOL的流程。内容不够丰富,建议未来工作用到的时候再去查看《自我修养》和《linkers & loaders》
- 异常处理流程 -> 介绍了中断、异常处理机制,状态现场存储等。书中主要介绍了Linux中的sighandler等相关API,对应ShellLab,这个Lab在大四时劝退了我,在这章阅读书籍请务必看懂示例代码。
- 虚拟内存 -> 介绍虚存,出乎意料的是这门导论课的虚存讲的比很多专门讲虚存的操作系统教材还要清晰明了并兼具深度,对应MallocLab,应该是本书最难的Lab,自己写一下堆分配的流程,写完后对于内存的内部和外部碎片化会有比较直观的理解。本人用了三个方法来写,大家也可以在这里体验一下不同方法带来的内存分配差异。
- I/O -> 最简单的章节,讲了一些read、write、open之类的API,建议配合csci0300 Proj3学习。
- 网络编程与并行编程 -> 讲了一下怎么写web server,以及信号量与同步上的事情,在rCore教材中,这里讲的多核和信号量的故事对应rCore第八章内容。对应的Lab是Proxy Lab,写一个玩具服务器代理,也就是在浏览器和后端服务器之间的一个抽象层,我们科学上网用的东西。。。有很多大佬说它简单,实际上做这个也花了我三四天,,使用了cachelab中的一些知识,并且会要求你搞清楚生产者消费者,reader-writer模型。
(经过了解似乎proxy lab和byr网站的某些特殊考核模式有点联系,哈哈哈)
简要评价:
看的出来其实面向的广度非常之大,很值得去学习。当然学完本书,也有小朋友梳理了一下全书,写了一个很不错的小品,可供读者茶余饭后时一乐。
https://zhuanlan.zhihu.com/p/513307151
相信在做过CSAPP之后,你对某些东西的了解会更深入,虽然它们可能不会直接体现在代码能力上,但有可能会在方法论上影响一下你,尤其是在遇到棘手bug,需要深入剖析其成因并想要解决的时候,它们会帮忙。
其他:
祝大家新年快乐!
对于CSAPP一书鄙人确实还是有一些复杂微妙的情感,毕竟和这老朋友相处了这么久,不知道是说自己菜、这么久才完结撒花比较好,还是感谢他帮我打开自学的美丽新世界为好。不过往事确实已经翻篇:
我的心向我呼唤,去动荡的远方。