读《现代操作系统:原理与实现》

11月初刚发行的书,终于今天看完了hhhh

首先,看os相关的书这件事属于重要但不紧急的。因此,有规划的做,保证进度就很好。这可能也算是我第一本有规划然后成功读完的书,非常不戳。

其次,这本书对于我来说收获是相当大的,相当于在基本的os课上完之后的复习+进阶读物。读的过程中也留下很多问题现在还没完全解决的,所以也考虑2刷。当然脱离了代码是不行的。一些收获如下,以备后用:

  • 内存管理
    • SLAB分配器
  • 进程和线程
    • fork接口以及posix_spawn, vfork还有rfork/clone
    • 多线程内存布局与线程本地存储(TLS)
    • 合作式多任务:ucontext和纤程
  • 调度
    • 公平共享调度(fair-share scheduling):彩票调度和步幅调度
    • 多核调度
      • 负载分担(全局任务队列)
      • 协同调度
      • 两级调度
    • Linux调度器发展历史和CFS调度器
  • 进程间通信
    • 微内核进程间通信
    • L4消息传递
    • LRPC: 迁移线程模型
    • Android binder ipc通信
  • 同步原语
    • 读写锁的实现
    • RCU原语
    • futex接口
  • 文件系统
    • VFS架构
    • FAT和NTFS
  • 设备管理
    • 设备的识别:设备树和ACPI
    • 设备的中断处理:硬件和Linux上下半部,下半部的三种机制
    • 设备驱动和设备驱动模型
    • Linux设备驱动模型
    • Linux用户态驱动框架VFIO
  • 系统虚拟化
    • CPU虚拟化
    • 内存虚拟化
      • 影子页表
      • 直接页表
      • 两阶段翻译
      • 换页和内存气球
    • io虚拟化
      • 软件模拟
      • 半虚拟化方法
      • 设备直通
    • 中断虚拟化
    • qemu和kvm架构

一些还没有完全理解的点

  • futex
  • 设备驱动和驱动模型
  • 虚拟化一些具体实现机制(中断虚拟化*)

另外,对于系统方向的东西,因为是必须每天都要思考和总结的,我希望纯知识点的copy-paste类型的输出就没有必要了,应该输出属于自己的体会以及经验。2刷的时候每章后面的思考题可以好好考虑一波。