【译】《心悟内核:先懂设计,再读代码》—5、一体架构,协同行为:内核的真实模型
作者:Moon Hee Lee
原文: The Kernel in the Mind
心悟内核:先懂设计,再读代码——一体架构,协同行为:内核的真实模型
-
Linux 内核在结构上是 ** 单体式(monolithic)** 的。调度、内存管理、文件系统、网络栈与设备驱动等核心子系统,都被编译为单一的二进制镜像。它们共享同一地址空间,运行于特权模式,并且可以直接相互调用。在结构层面,组件之间不存在隔离。但在运行时,内核的行为由所有子系统都必须遵守的全局约束所塑造。
-
执行上下文决定了内核在任一时刻可以执行的操作。代码运行在进程上下文、内核线程上下文、中断上下文或软中断(softirq)上下文。进程与内核线程上下文允许休眠、阻塞、访问用户态内存以及处理页错误;中断与软中断上下文则不允许。这些路径对时间敏感,必须避免阻塞或调度,否则会延迟其他任务。页错误处理在此类上下文被禁止,因为解析页错误可能涉及 I/O、内存分配或回收,而这些操作都需要休眠。这些约束是全局性的,影响着内核的每一项决策。
-
子系统通过这些共享规则进行交互。调度器不会抢占原子执行路径;内存分配器在阻塞前会检查上下文与标志位;文件系统通过从非阻塞到阻塞的有序状态转换来执行 I/O;网络栈始于中断上下文,随后将处理流转交给软中断与工作队列;设备驱动则将无法在原位安全完成的工作延后处理。这并非约定俗成,而是设计本身:子系统通过合法的阶段流转来处理工作,而非一次性完成所有操作。
-
同步机制也遵循同样的规则:自旋锁用于原子执行路径,互斥锁仅在允许休眠的上下文中使用,RCU 让读者无需加锁即可继续执行,顺序锁(seqlock)则允许在更新时进行快速重试。这些原语的选择基于上下文与访问模式,而非开发者偏好。其使用方式通过宏、断言以及内核中统一执行的规则进行校验。
-
内存访问也遵循同一模型:访问用户态内存必须处于进程上下文;页错误仅能在允许休眠的上下文中处理,因为解析过程可能涉及磁盘 I/O 或内存回收;内存分配的行为取决于标志位与上下文,同一函数的表现可能是阻塞、立即返回或失败,具体取决于它的运行位置。内存管理始终兼顾可见性、局部性与上下文。
-
延迟执行机制串联起了这些分层。始于中断的工作会被传递给软中断,再交由工作队列,最终由内核线程处理。每一步都为了适配下一阶段的约束而设计。这种分阶段模型支撑着 I/O、网络、定时器与设备驱动的运行。
-
内核以单一二进制形式构建,但其运行时是一个协同系统。子系统并非独立运作,而是遵循一套由上下文、时序与并发模型定义的共享规则。它在形式上是单体的,但在执行上却是模块化、纪律严明的。

– 注:内核在代码层面是单体式的,但其运行行为是模块化、受约束且由上下文驱动的。它的运行时由时序要求、安全规则与接口约定共同塑造。
如本文对你有些许帮助,欢迎大佬支持我一下(点赞+收藏+关注、关注公众号等),您的支持是我持续创作的竭动力
支持我的方式
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)