??刚看到书名的时候以为这是一本讲述程序员为人处世,享受生活的文章,当我抱着当小说看消遣的心情从群里下载下来的时候,却发现这实际上是一本干货满满的书。当我看到副标题——链接,装载与库, 我意识到这会是一本让我受益匪浅的书,因为我没有选修过操作系统,编译原理相关的课程,对于代码 是如何在电脑上跑起来的是毫无概念的,每次配置环境变量,配置链接库,都是一头雾水。而且我认为要成为一个优秀的程序员 ,仅仅满足于代码能运行是远远不够的,只有对背后的运行机制有所了解,才能写出优秀的代码。
??我决定多花些时间细读一下这本书,读书笔记也按书的章节来记录。
温故而知新
??文章先从笔记本硬件谈起,讲述了人们为了让计算机变得更加高效,计算机体系结构的改变,南北桥的出现, 器件间通讯协议的更迭,cpu频率出现天花板后,多核处理器的诞生。并阐述了多核在处理耦合度较低的 的多任务时的优越性,如数据库,服务器处理大量并发请求时。
??紧接着又讲述了计算机软件体系结构的一些知识,如中间层重要性,层与层之间通过 接口进行进行通信,如应用程序与运行库之间的应用程序编程接口,运行库与操作系统间的系统调用接口。 操作系统与硬件之间硬件规格接口。
??接下来讲述人们是如何压榨计算机CPU,内存,磁盘,io的潜力的。 对于cpu人们发明了分时系统并演变到后来的多任务系统,进而出现进程,优先级,抢占,超时暂停的概念, 操作系统可以使cpu在各进程之间快速切换,表现出同时处理的假象。
??对于内存的使用也利用中间层的概念,利用分段分页解决隔离,定位与效率的问题。
??接下来是我非常感兴趣的一个概念,线程。定义为程序进行最小单元,可以共享同一进程的的内存以及其他资源, 多线程可以利用等待时间,如等待网络响应,或者一个线程用来计算,另一个用来计算。收获较大的是进程安全这一小节,之前没有遇到过。、 通过对数据访问上锁,保证线程访问的原子性。对于可重入函数的描述更是让我意识到了const变量的作用,以及编译器优化可能带来的问题。
静态链接
?? 在此之前我对编译链接的过程其实是没有多少概念的。
?? 程序运行先是预处理,会对#开头的指令进行一些操作。如展开宏定义,处理条件编译指令,删除注释
?? 接着就是编译过程,生成汇编代码文件。
?? 链接过程将目标文件进行链接生成可执行文件。
??在上叙过程中,编译器的作用是将高级语言翻译成机器语言,高级语言写法与硬件无关,可以更注重逻辑本身。并且中间代码的存在可以让编译器分为前端与后端从而减小编译器开发的工作量。 但是编译完成后,一些变量和函数定义在其他模块中,这些东西的地址就必须经过目标文件的链接才能最终确定。书中花了大量时间讲述这一概念的由来,并把这链接过程形象的比喻为拼图。
?? 以上就是本周看的一些东西,相比较于晦涩的专业书籍,这本书还是相当好读的,下周会继续往下读。