怎么读到这本书的
从某个“必读书单”里看到有人推荐这本书的时候,我一脸问号:这么大气的书名,然而我没有听说过,真是白做了这么多年Linux(爱好者)普通用户了。然而本书早已绝版多年,只能求助万能的GitHub,寻得一扫描版。在翻看了第一章之后,我决定把这本书看完。
感想
其一:此书的英文极为简洁平实,像极了干净漂亮的代码或者学术文章。
其二:这是一本84年出版的书,过时了吗?或者说过时了三十多年了吗(考虑到Unix在那个时代的变迁)?然而并没有。像Unix系统设计这么优雅的东西,大概过多久都不会过时。
其三:这本书不是一个内核API refence(书中仅仅把system call在附录中做了列表)。这本书讲的是,为什么要设计这些接口以及接口背后的原理。那么为什么要了解这些呢?会用不就行了?我的情况恰恰相反:日常工作里面经常需要设计各种软件模块以及他们之间的接口/依赖关系,权衡各个角度的利弊。通过这本书来了解一个大型软件设计中的各种思路,对我来说启发极大。倒并不是看到什么好的方法可以直接拿来用,而是一种熏陶吧。毕竟看看这种殿堂级的设计,再对比一下自己在工期压力下搞出来的东西( ̄▽ ̄)"
其四:课后的习题真是为难现代的读者了。动辄是“我们把这个system call的实现改一改吧”😓
启发
- 经典
套路方法:加一层映射/虚拟化/抽象。当然了这个方法要慎用:你的系统比内核还复杂吗? - 书中涉及到的算法其实只有两类:查找,Cache管理(LRU)。进程工作集这个概念本质就是Cache管理。
备忘
- 切换内核态或用户态的本质就是是否允许访问内核空间。
- 字符/Raw设备跟块设备的最大区别在于:
- 是否必须以块大小来访问数据
- 数据是否缓存在buffer cache
- 信号的三种主要的处理方式
- 退出/core dump
- 调用用户自定义的处理函数
- 忽略信号