如果你把 Linux 操作系统看作一个“帝国”,那么内核就是这座帝国的“心脏”和“中枢神经”。上一章我们知道了它是怎么出生的,这一章,我们就要隆重介绍它的具体长相和运作机制。

一、两种派系之争:Linux 选择了“单核模式”

在计算机世界里,内核设计主要有两大流派:

  1. 微内核(Microkernel): 比如早期的 Windows NT。它把服务都拆得很细,一部分崩溃了,不至于整个系统瘫痪,优点是稳定,但因为模块之间通信太多,速度相对慢一些
  2. 单内核(Monolithic Kernel): 这是 Linux 采用的设计。把所有核心功能(内存、文件、进程等)都塞在一个巨大的程序里,优点是执行速度飞快,缺点是如果一个模块挂掉了,整个系统可能“爆雷”

你书里的 Linux 0.11 采用的正是这种单内核模式。这种选择有点像“瑞士军刀”——所有工具都在刀柄里,拿出来就用,不用拼装。

二、五位“大臣”各司其职(五大核心模块)

通过书中第一个图表,你能清楚地看到,Linux 内核主要由 5 个核心模块组成:

  1. 进程调度模块: 负责管理 CPU 资源,安排谁先运行。它是整个系统的“指挥官”
  2. 内存管理模块: 负责物理内存的分配与回收。
  3. 文件系统模块: 负责管理硬盘上的文件,让普通程序能“读”和“写”数据。
  4. 进程间通信模块: 负责让不同的程序互相“打电话”和发消息。
  5. 网络接口模块: 负责网卡的驱动和网络通信。

三、复杂的“朋友圈”:依赖关系大揭秘(原图 2-3)

在这里插入图片描述

这些模块并不是孤立的,它们之间有着非常紧密的依赖关系。尤其是“进程调度”,它几乎是所有人的“爸爸”,大家都要靠它来挂起和恢复运行。

下面的 Mermaid 图完美复刻了原书 图 2-3 中的Linux内核模块结构及相互依赖关系

关键解读

所有箭头指向代表依赖关系

进程调度是系统的核心枢纽

进程调度模块

内存管理模块

文件系统模块

进程间通信模块

网络接口模块

核心知识点翻译:

  • 进程调度是老大:所有模块都需要它来挂起/恢复进程。比如文件系统读硬盘很慢,进程调度器会让你先“睡一会儿”,等数据读好了再叫醒你。
  • 进程间通信的“远程传音”:它依赖于内存管理,因为两个不同的程序要共享内存才能传输数据。
  • 文件系统的“远程访问”:如果想通过网络读写别人的硬盘(NFS),文件系统就需要依赖网络接口。

四、终极结构透视:分层与模块设计(原图 2-4)

在这里插入图片描述

为了把这些复杂的组件整齐地排布好,操作系统划分了清晰的层级结构。你可以把操作系统想象成一个多层楼的大厦。

原书 图 2-4 是这本书中最经典的宏观结构图,我用 Mermaid 帮你立体地画出来:

硬件级

内核级

用户级

系统调用接口

进程控制子系统

进程间通信

调度程序

内存管理

文件子系统

文件管理

高速缓冲

字符设备 & 块设备

设备驱动程序

用户应用程序

函数库

内核级

硬件控制

硬件

这个图揭示了三个重要的宇宙法则:

  1. 分层隔离: 用户程序不能直接控制硬件,必须通过底层的“系统调用接口”层层传递指令,保障了系统的安全。
  2. 左右开弓: 左半边(文件子系统)负责输入输出(数据怎么存、怎么读);右半边(进程控制子系统)负责大脑运算(内存怎么分、进程怎么跑)。
  3. 硬件直连: 最底层的“硬件控制”像一双无形的手,把所有东西连到真实的物理硬件(CPU、内存条、网卡)上。

五、一次神秘的穿越:从用户态到内核态

书里提到一个关键细节:用户程序 -> 系统调用(int x80) -> 切换到内核态

举个通俗的例子:

  • 用户态: 你在普通停车场停车,只能把自己的车停好。
  • 内核态: 你成了交通指挥中心,可以控制红绿灯、封锁道路、指挥所有车辆。
  • 当你的普通程序(用户态)想把文件写到硬盘里时,它没有权限,它只能通过一个特殊的指令 int 0x80 发出一声尖叫,CPU 立刻暂停当前工作,进入内核态,由系统内核帮它完成这个危险的操作,操作完再切回用户态。

总结:为什么要读 0.11 的源码?

这章虽然都是宏观概念,但它其实在告诉你:不要被庞大的 Linux 系统吓倒。
Linus 在 1991 年写的 Linux 0.11 版本,结构就是这么清晰简单。当你读完这一章,你脑子里就有了整个大楼的“施工图纸”。接下来,这本书就会带你从最低层的 Makefile 文件开始,一行一行代码地拆解这个“大厦”是怎么搭建起来的。准备好了吗?让我们开始啃源代码吧!

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐