阅读过程
我感觉读《深入理解计算机系统》读得有些快了,这大概和自己急切的心情有关。今天读并发编程那一章读到最后确实是有点郁闷了。
自从二月二十一日左右开始读这本书,前后花了一个月的时间。假期里因为掺杂着读文学名著和了解技术栈拓展,所以实际上读得并不多。主要还是开学之后,在上课之前先快速地把主课大概三个星期学的东西过了一遍,然后基本上所有的课都在读这本书。最终在今天终于把这本书读完了。
各章节理解总结
1. 计算机系统漫游
结合之前软工导论课程的知识,加上对这一章的阅读,我对计算机内部的各个关键部件以及主要组件有了较为清晰的认知。这一章让我了解了键盘、鼠标、网络等I/O设备,CPU内部的寄存器、PC等组件,以及内存和计算机运行的基本流程。
2. 信息的表示和处理
各种码的计算让我有些感觉不适,之前软工导论课程就不太喜欢这部分内容。所以读得也不是很深入,只是大致了解了码与码的计算以及计算结果溢出的处理方式。
3. 程序的机器级表示
汇编代码对我来说理解起来有些困难,读完之后感觉只是大致了解了CPU与汇编代码的关系,说不上来具体的收获是什么,可能这一章读得比较失败。未来如果要进一步精进底层知识,在重新阅读这本书时会重点关注这一章。
4. 处理器体系结构
这一章仍然以汇编代码为主,但更加深入地讲述了数据在处理器中的传递过程。这让我认识到程序与硬件之间的关系非常密切,甚至让我联想到如果有精密的物理仪器,是否也可以达到程序的效果?就像高中物理题中的压强感测仪,可以看作是一种if条件判断。不过这个联想似乎没有太大实际意义。
回归正题,对于这章的数据传递部分,我印象深刻的是立即数、寄存器和内存之间的数据传递过程。立即数进入寄存器,然后经过一系列处理操作得到结果。我认为自己对这一章的理解是大体正确的,但对细节的掌握还不够。
另外,流水处理机制也是一个重要知识点。我尝试结合向量数据库的pipeline来理解它,虽然AI说这两者关系不大,但我感觉它们的思想有一些联系,这种学习方法对我来说很有帮助。
5. 优化程序性能
这一章读完后,我感觉没有获得特别多的新知识。主要收获是可能会让我以后在工程开发时更加顺手一些。我感觉这一章关于优化程序性能的内容不如后面几章实用。
6. 存储器层次结构
存储器的分页和分层结构是这一章的最大收获。首先,分页结构可以应用在很多场景,我感觉它与之前开发的Bot中的隔离思想有些相似,并且分页结构可能有更多的迁移应用场景。
其次,分层结构让我在脑海中形成了一个金字塔结构的形象,各个层次发挥不同的作用,综合起来达到最佳效果。总的来说,我认为分层结构比第五章讲的优化程序性能更加实用。在编写程序时,这种分层思想可能对调峰和性能优化有借鉴意义,虽然我目前没有具体的项目来实践,但相信在有需求时能够想起并应用这些知识。
7. 链接
这一章内容较短,主要讲述了C语言程序在运行过程中的栈的状况,从底层看是栈的变化,从代码层看是函数之间的关联。这是我对这一章的主要理解。至于ELF执行文件中的各种后缀,我只是粗略阅读以了解大致方向,所以这一章读得也不是很细致。
8. 异常控制流
这一章篇幅相当长,也是我感觉收获最大的一章。xv6的实验感觉主要就是围绕这一章的内容展开的。开多个进程、内核模式、用户模式、子进程回收、故障终止、信号、信号阻塞等等,这些只是主要的大类,还有不少小的知识点也很有用。
对于多进程,我的理解是可以通过多个进程的协调来优化性能。内核模式和用户模式的概念让我对环境隔离有了更深刻的认识。子进程回收机制让我了解到可以通过这种方式来优化性能。故障终止的相关知识让我知道了之前写程序时遇到的各种报错的部分原因。信号和信号阻塞的概念,我主要是将其迁移到并发编程的理解中,之前的xv6实验也对这部分内容进行了学习。
9. 虚拟内存
感觉这一章是对分页结构的再次深化阐述,以及对程序运行时程序与硬件关联的再次深化理解。这一章对我在工程思考方面的作用其实感觉不大,除了虚拟化思维之外。之前的第六章就已经让我有了一些与这一章相关的思考。
这一章对我的主要作用是提高了对生僻代码的快速理解能力,以及对底层代码运行时数据变化的理解。另外,共享的概念我理解得不是特别深刻,可能是因为Go语言对这种操作的简化导致的,但通过xv6的实验,我对这个概念有了进一步的理解,应该还算可以。
10. 系统级I/O
这一章感觉就是把前面几个单元的知识迁移到了I/O层面进行讲解,让我对I/O有了更加清晰的认知。其他内容就不再赘述了。
11. 网络编程
这一章主要让我了解了计算机网络的基本概念,所以理解得不是很深刻。不过,这一章让我对之前学习的微服务有了更深刻的理解。另外,这一章还让我了解了套接字的概念,书上说它是一种用于网络通信的编程接口。我感觉这个描述有些抽象,如果让我抽象转述一下,大概就是一种网络上的通信通道。
12. 并发编程
这一章主要讲述了并发的问题。作者提到并发问题其实更加细致和复杂。我对并发的理解是,这些知识虽然没有特别突出的亮点,但都很实用。基于进程的并发编程中,子进程的创建、隔离和并发是重要的知识点。I/O多路复用也是讲述了并发中可以优化性能的操作。
对于并发安全相关的部分,我感觉用抽象层次来理解有些困难,所以就用自己天然的逻辑方向去理解,大致就是并发要遵守”秩序”,像读写这样的操作需要分工合作。如果分工明确的话,可以节约性能并保障安全。书里的进程图我不是很能看懂,但文字部分的内容我理解得差不多。我认为这一章的内容主要需要在编程实践中进行熟练掌握。
总结
通过阅读《深入理解计算机系统》这本书,我对编程的底层原理有了不少理解。虽然有些章节读得比较粗略,理解得不够深入,但整体上还是收获颇丰。这本书让我对计算机系统的各个组成部分以及它们之间的关系有了更清晰的认识,为我今后的技术学习和工程实践打下了更坚实的基础。
未来,我会在需要的时候重新阅读这本书的某些章节,特别是那些理解不够深入的部分,以进一步提升自己的技术水平。
部分信息可能已经过时








