读《UNIX操作系统设计》/The Design of the UNIX Operating System

怎么读到这本书的

从某个“必读书单”里看到有人推荐这本书的时候,我一脸问号:这么大气的书名,然而我没有听说过,真是白做了这么多年Linux(爱好者)普通用户了。然而本书早已绝版多年,只能求助万能的GitHub,寻得一扫描版。在翻看了第一章之后,我决定把这本书看完。


感想

其一:此书的英文极为简洁平实,像极了干净漂亮的代码或者学术文章。

其二:这是一本84年出版的书,过时了吗?或者说过时了三十多年了吗(考虑到Unix在那个时代的变迁)?然而并没有。像Unix系统设计这么优雅的东西,大概过多久都不会过时。

其三:这本书不是一个内核API refence(书中仅仅把system call在附录中做了列表)。这本书讲的是,为什么要设计这些接口以及接口背后的原理。那么为什么要了解这些呢?会用不就行了?我的情况恰恰相反:日常工作里面经常需要设计各种软件模块以及他们之间的接口/依赖关系,权衡各个角度的利弊。通过这本书来了解一个大型软件设计中的各种思路,对我来说启发极大。倒并不是看到什么好的方法可以直接拿来用,而是一种熏陶吧。毕竟看看这种殿堂级的设计,再对比一下自己在工期压力下搞出来的东西( ̄▽ ̄)"

其四:课后的习题真是为难现代的读者了。动辄是“我们把这个system call的实现改一改吧”😓


启发

  • 经典套路方法:加一层映射/虚拟化/抽象。当然了这个方法要慎用:你的系统比内核还复杂吗?
  • 书中涉及到的算法其实只有两类:查找,Cache管理(LRU)。进程工作集这个概念本质就是Cache管理。

备忘

  • 切换内核态或用户态的本质就是是否允许访问内核空间。
  • 字符/Raw设备跟块设备的最大区别在于:
    1. 是否必须以块大小来访问数据
    2. 数据是否缓存在buffer cache
  • 信号的三种主要的处理方式
    1. 退出/core dump
    2. 调用用户自定义的处理函数
    3. 忽略信号
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容