初衷
读完《编码:隐匿在计算机软硬件背后的语言》的时候,我就深深折服于Charles Petzold大叔化繁为简的能力和穿针引线的技巧。几年前听说他又出了本有关图灵的新书《图灵的秘密:他的生平、思想及论文解读》,第一时间就找来原版拜读,可惜英文水平有限,囫囵吞枣之后感觉意犹未尽。
幸好最近得闲,又找来中文版细细品味。不禁感叹,酒香不怕巷子深,图灵还是你祖师爷。
遂留下此文,方便日后再品。
读完《编码:隐匿在计算机软硬件背后的语言》的时候,我就深深折服于Charles Petzold大叔化繁为简的能力和穿针引线的技巧。几年前听说他又出了本有关图灵的新书《图灵的秘密:他的生平、思想及论文解读》,第一时间就找来原版拜读,可惜英文水平有限,囫囵吞枣之后感觉意犹未尽。
幸好最近得闲,又找来中文版细细品味。不禁感叹,酒香不怕巷子深,图灵还是你祖师爷。
遂留下此文,方便日后再品。
《深入理解Linux内核》毋庸置疑是一本阐述Linux内核各个模块的经典之作,它不是一本教授如何使用系统调用,进而实现用户进程功能的最佳实践,而是以数据结构为切入点,通过解释各个子系统的实现原理来帮助读者提升内功。
这么好的一本书,也还是有一些缺憾:
占位符太多
虽然作者已经根据知识的推进过程合理地对各个章节进行了布局,但是无奈知识点太多,且呈网状分布,文章中还是存在不少类似”某某内容留在某某章节详细讨论”的占位符,如果阅读过程中不来回参考,容易顾此失彼。
缺少子系统间的架构图
本书在每个章节间都有一些配图说明复杂的数据结构和内容,但是子系统之间却缺少一些架构图来帮助读者抓住它们之间的一些要害,容易让读者陷入细节,一叶障目。
缺少每章总结
本书每章都配有引导词,简单介绍本章内容的布局。但是末尾却缺少相应的总结,无法做到提纲挈领。这也是我写这篇总结的主要原因。
本篇文章是我间隔五年第二遍阅读本书之后所作的个人梳理,会不断更新和勘误(解答自己遗留下来的问题),也欢迎大家留言一起讨论指正。
并发的概念充斥在各种各样的程序设计书籍中,甚至有许多专门教授利用某一门编程语言进行并发编程的书籍。然而在我看来,并发确是高于语言的通用概念,本文就作为并发系列的第一篇,阐述我对于并发的理解,希望能和各位看官碰撞出思想的火花。
glibc(GNU C Library)是Linux采用的C语言运行库,它提供了ISO C11/POSIX.1-2008等标准定义的一系列API,几乎被所有应用所引用。阅读其源码能够提升对计算机底层组件的认知层次,修炼内功。
不同于python这类解释型语言可以直接在解释器中运行程序,C作为编译型语言需要将源码编译链接成机器码后才能执行(关于编译链接的具体机制可以参看我之前写的介绍文章:理解C语言-3:编译链接)。在glibc这样的超大型项目中,编译过程尤为复杂:不仅需要考虑不同平台间的不同配置项,还需要通过awk/sed等文本处理程序生成各种项目依赖文件。如果贸然扎进源码分析某个模块,很容易陷入不知道某个具体符号来自哪里的困境,铩羽而归。
GNU Make负责完成如此负责的编译,本文就通过分析Make的调试信息,解析编译glibc的具体过程,引出glibc源代码的目录结构,为后续分析glibc中的具体模块打下基础。