linux内核 - 服务进程是内核的主要责任
在运行时,Linux 内核管理内存、调度任务、处理 I/O、处理中断并强制执行系统安全性。这些责任是必不可少的,但它们本身都不是目标。内核的存在是为了服务用户进程。
它的工作是确保每个进程可靠、安全和高效地运行。如果内核无法响应系统调用、分配内存、访问存储或强制隔离,则它的核心目的就失败了。
重要的是,内核不会自行运行。它仅在三种情况下进入执行状态:来自用户空间的系统调用、来自硬件设备的中断或计划执行系统工作的内部线程。其中每一个都是对外部需求的反应,通常源自用户进程。内核在需要时被激活,并且只有在那时才被激活。
考虑启动流程时会发生什么。用户调用 exec.内核必须通过虚拟文件系统解析二进制路径,使用底层文件系统驱动程序加载文件,分配和映射内存,通过安全模块验证访问,并计划进程执行。这些步骤中的每一个都涉及不同的子系统。他们都不能独立行动。所有作必须按顺序完成才能启动单个流程。
即使是简单的读取调用也会跨越多个模块。系统调用处理程序从进程的任务结构中验证文件描述符。虚拟文件系统将找到关联的文件对象。根据文件类型,读取请求可能会转到常规文件、管道或套接字。如果内存缓冲区位于未映射的页面上,则内存管理器必须先解决故障,然后才能复制数据。只有当所有这些都成功完成时,内核才会返回用户空间。
相同的模式适用于所有 I/O、网络和进程间通信。每个用户作都会导致内部协调链。内核的任何部分都无法提供结果。它始终是整个系统。
内核线程也不例外。回收内存或刷新脏缓冲区时,它们不会代表自己执行作。它们的存在是为了保持系统足够健康,以便用户进程继续。他们的工作直接支持用户空间中正在进行或未来的执行。
这就是 Linux 内核的结构。每个子系统都围绕流程支持进行组织。每个内部服务的存在都是为了响应、启用或保护执行。它不是一个闲置的核心。它是一个被动的、合作的系统。
内核之所以重要,不是因为它执行许多工作,而是它执行这些工作是为了服务于其他东西。那个东西就是用户进程。
下面图显示了内核如何仅在需要时运行,并且始终为该进程服务。
参考:https://www.linkedin.com/posts/moon-hee-lee_serving-the-process-the-kernels-primary-activity-7320186364757508098-ITy3/