作者Moon Hee Lee原文 The Kernel in the Mind心悟内核:先懂设计再读代码——内核并非进程而是整个系统本身Linux 内核既不是普通进程、守护进程也不是应用程序。它是一套常驻内存的高特权运行环境是操作系统的底层基石。与用户态程序不同内核不受调度器调度、没有进程 PID也无法像常规任务一样被启动或终止。内核在开机引导阶段载入内存后便永久驻留统筹管控硬件与软件之间的所有交互行为。引导加载程序完成内核镜像加载后内核会从 start_kernel() 函数开始执行依次完成内存管理、设备接口、核心子系统等模块的初始化工作。完成这一次性全局初始化后内核并不会以独立任务的形式持续运行而是转变为响应式执行层仅在被需要时才会触发执行触发来源包括用户进程发起的请求、硬件产生的中断事件以及内核自身的内部线程。内核代码的执行场景主要分为三类用户进程发起系统调用陷入内核态执行硬件设备触发中断由中断处理函数响应执行长期驻留的内核线程全程运行于内核空间。这类内核线程由内核自主创建与管理负责处理内存回收、IO 调度、资源同步等后台核心任务。我们在进程列表中能看到这类线程名称通常被方括号包裹但它们不属于用户态守护进程永远不会执行用户态代码。所有内核线程的始祖是 PID 为 2 的 kthreadd 进程。它在内核初始化收尾阶段的 rest_init() 函数中被创建职责是衍生、管理其余所有内核线程。如果说 PID 1init /systemd是用户态世界的起点那么 PID 2 就是内核线程运行时的开端。内核线程数量并非固定不变。系统开机时会默认创建 20~40 个基础核心线程例如每个 CPU 核心专属的软中断线程、看门狗线程、进程迁移辅助线程与早期工作队列线程。系统运行过程中还会根据负载按需新建线程服务于磁盘 IO、内存管理、文件系统、设备驱动等各类场景。主流现代 Linux 设备中同时运行的内核线程数量普遍在 100~150 个区间会随业务负载动态伸缩调整。即便内核线程可以被正常检索查看其本质也并非独立程序。内核本身不是一个被调度运行的任务而是时刻存在的运行环境。内核是被动进入、而非主动调度运行它为整机系统提供运行框架、权限管控与资源支配能力支撑所有用户任务正常运转自身却不以独立任务的形态对外呈现。总而言之内核不是系统中的某一个进程而是整个操作系统的核心本体。永久驻留内存、持有最高特权、全程掌控全局这就是 Linux 内核的本质。如本文对你有些许帮助欢迎大佬支持我一下点赞收藏关注、关注公众号等您的支持是我持续创作的竭动力支持我的方式