Core API 与基础设施

这页讲内核里的“公共工具箱”:很多模块看起来各干各的,但它们大量共享同一批基础设施。学这页的重点,不是背 API 名字,而是建立“为什么大家都在复用这层底座”的感觉。

这块是什么

Core API 可以理解成“内核内部最常复用的公共能力集合”。它不像网络、文件系统那样直接对最终用户可见,但许多模块都站在它提供的抽象和工具之上。如果缺少这层,很多子系统就得重复解决相同的基础问题。

如果把 Linux 内核看成一座城市,Core API 更像道路、管道、电网和通用设施,而不是某一个具体商店。

它通常包含什么

对象与生命周期

  • 对象模型
  • 引用计数
  • 生命周期管理
  • 统一资源释放习惯

异步与后台执行

  • workqueue
  • 延后处理
  • 后台工作调度
  • 把工作放到更合适上下文里完成

通用容器与工具

  • 链表、红黑树、xarray
  • 通用辅助函数
  • 日志与打印
  • 减少各子系统重复造轮子

为什么内核需要这层公共底座

问题如果没有公共底座会怎样Core API 的价值
对象怎么被安全释放每个子系统自己设计规则,容易不一致,也容易埋内存和生命周期问题。把“对象何时还能用、何时应释放”这类共性问题做成统一做法。
某些工作不能立即做完各模块自己随意处理延后工作,会造成上下文混乱。提供 workqueue 等机制,把延后执行这件事做得更规范。
数据结构如何高效管理每个模块重复发明容器,学习成本和维护成本都会升高。提供稳定、常见、可复用的数据组织方式。
日志和调试怎么统一子系统之间输出风格混乱,排错成本高。让基本日志输出和很多辅助能力有共同语言。

关键概念

概念现在怎么理解
kobject内核里一种很重要的“对象被系统统一看见”的方式,和 sysfs、设备模型等关系密切。
kref引用计数工具,用来安全管理对象什么时候还能用、什么时候该释放。
workqueue把某些工作延后到更合适的上下文里执行,而不是立刻硬做完。
printk内核里最基础的日志输出机制。
xarray / rbtree常见的内核数据组织工具,用来高效管理索引和查找。

你以后会在哪些地方反复遇到它

为什么重要

常见误解

它负责什么 / 不负责什么

负责什么不负责什么
提供可复用的底层机制和工具。不直接决定网络协议怎么处理、文件如何存盘、驱动如何和具体硬件交互。
统一很多基础问题的做法。不等于单独系统功能模块。
让其他子系统少重复解决公共问题。不替代具体子系统自身的核心职责。

和其他模块的关系

读完这页后,你应该能回答

后面适合继续问:kobject 为什么对设备模型很关键?workqueue 和中断上下文是什么关系?引用计数为什么比表面看起来更重要?