第2章 Linux 的心脏——Kernel(内核)

第1节 什么是 Kernel?

上一章我们说过:

很多人认为:Linux = 操作系统。

其实更准确地说:Linux 最初只是一个 Kernel(内核)。

那么什么叫内核?先来看一个例子。


假设你的电脑只有:

复制代码
CPU
内存
SSD
键盘
鼠标
显示器

这些都是:硬件(Hardware)

但是这些硬件有一个共同特点:它们不会主动工作。

例如:

CPU不知道:

现在应该算什么?

SSD不知道:

现在应该读取哪个文件?

网卡不知道:

现在应该发送哪个数据包?

它们都需要:

有人指挥。

这个指挥者。

就是:

Kernel(内核)。


可以把 Kernel 理解成什么?

很多书会说:

Kernel 是资源管理器。

这句话没错。

但是不够直观。

我更喜欢一个比喻。

假设一家大型物流仓库。

里面有:

复制代码
100个工人
1000个货架
几十辆叉车
很多传送带

每天:

几万件货物进出。

如果没有管理者。

会发生什么?

工人:

不知道搬哪个。

叉车:

不知道去哪。

货架:

没人管理。

整个仓库:

直接瘫痪。

所以。

需要一个总调度。

例如:

复制代码
张三
去A区
↓
李四
去B区
↓
叉车1
搬这个货
↓
叉车2
搬那个货

这个总调度。

就是:

Kernel。


第2节 Kernel 每天都在干什么?

它几乎什么都管。

最重要的是五件事。


第一件:管理 CPU

假设:

你打开:

复制代码
Chrome
微信
QQ
音乐播放器

CPU只有一个。

Kernel怎么办?

它会:

复制代码
CPU
↓
Chrome
0.001秒
↓
QQ
0.001秒
↓
微信
0.001秒
↓
音乐
0.001秒

不停切换。

速度快到:

你感觉:

它们一起运行。

实际上。

不是。

Kernel一直在:

安排谁先运行。

所以:

Kernel其实像:

CPU 的交通警察。


第二件:管理内存(RAM)

例如:

Chrome:

需要:

复制代码
2GB

VS Code:

需要:

复制代码
1GB

微信:

复制代码
500MB

游戏:

复制代码
8GB

如果:

大家都想要:

100GB。

怎么办?

Kernel负责:

分配。

释放。

回收。

整理。

如果Kernel不会管理内存。

电脑早就崩了。


第三件:管理硬盘

例如:

你双击:

复制代码
照片.jpg

真正发生的是:

复制代码
图片查看器
↓
Kernel
↓
SSD
↓
读取数据
↓
返回图片

注意。

图片查看器。

不能直接控制SSD。

必须经过:

Kernel。


第四件:管理设备

例如:

插入:

复制代码
USB

Kernel马上发现:

新设备来了。

然后:

加载驱动。

建立连接。

让Windows。

或者Linux。

可以访问它。

所以:

驱动程序。

很多时候:

其实属于:

Kernel的一部分。


第五件:管理网络

例如:

浏览器访问:

复制代码
https://example.com

浏览器:

其实只是说:

我要访问这个网址。

真正:

建立TCP连接。

发送数据。

接收数据。

全部都是:

Kernel完成。

所以:

Linux网络性能为什么强?

因为:

Linux Kernel。

网络模块非常优秀。


第3节 为什么程序不能直接控制硬件?

很多新手都会问:

既然Chrome想读取文件。

为什么不能:

直接控制SSD?

答案:

安全。

想象一下。

如果每个程序都能:

直接操作硬盘。

会怎样?

例如:

病毒。

直接:

复制代码
删除整个SSD

根本没人管。

或者:

两个程序。

同时写:

同一个文件。

数据直接乱掉。

所以:

必须:

统一管理。

也就是:

Kernel。

所有程序。

必须先申请。

Kernel同意。

才能操作。

这就是:

系统调用(System Call)


第4节 什么是系统调用(System Call)?

这是整个 Linux 最重要的概念之一。

程序不能直接控制硬件。

所以。

它必须:

向Kernel申请。

例如:

程序:

复制代码
我要打开文件

Kernel:

复制代码
可以

然后:

Kernel读取。

再返回。

整个过程:

复制代码
程序
↓
System Call
↓
Kernel
↓
SSD

以后。

你会看到:

复制代码
open()

read()

write()

close()

这些。

都是:

系统调用。

几乎所有软件。

每天都在用。

只是:

你感觉不到。


第5节 Linux 和 Windows 的 Kernel 有什么区别?

很多人第一次学 Linux。

都会问:

Windows是不是也有Kernel?

答案:

有。

Windows:有自己的Kernel。

Linux:有Linux Kernel。

macOS:有自己的Kernel。

Android:也是Linux Kernel。

所以,Android其实和Linux关系非常近。

只是,手机厂商在Linux Kernel上,开发了自己的手机系统。

所以,如果你以后研究:安卓Root、Magisk、Termux,都会发现很多Linux知识,完全通用。


第6节 Ubuntu、Debian 到底是什么?

现在终于能回答上一章留下的问题了。

很多人说:

我要安装 Linux。

实际上。

安装的是:

复制代码
Ubuntu

或者:

复制代码
Debian

它们都不是Kernel。

它们是:

Linux 发行版(Distribution)

什么叫发行版?

可以理解成:一个已经组装好的 Linux 系统。

例如:

复制代码
Linux Kernel
+
Shell
+
软件包管理器
+
系统工具
+
默认配置
+
很多常用软件

组合在一起。

就变成:Ubuntu。

如果换另一套组合。

就是:Debian。

所以它们最大的区别通常不是Kernel。

而是:

围绕 Kernel 的生态和默认配置。


第7节 本章最重要的一张图

这是以后你要一直记住的结构:

复制代码
            你(User)
                 │
                 ▼
         应用程序(Chrome、微信)
                 │
        System Call(系统调用)
                 │
                 ▼
      Linux Kernel(内核)
      ├── CPU 管理
      ├── 内存管理
      ├── 磁盘管理
      ├── 网络管理
      └── 设备管理
                 │
                 ▼
             硬件(Hardware)

以后你学 Docker、数据库、Nginx、Python、AI 服务,它们全部都运行在内核之上


本章总结

只需要牢牢记住六句话:

  1. Kernel(内核)是操作系统最核心的部分。
  2. 所有程序都必须通过 Kernel 才能操作硬件。
  3. 程序向 Kernel 请求服务的过程,叫系统调用(System Call)。
  4. Kernel 负责管理 CPU、内存、磁盘、网络和设备。
  5. Windows、Linux、macOS 都有自己的内核。
  6. Ubuntu、Debian 等发行版,是"Linux 内核 + 一系列工具和软件"的组合。

学习提示

从这一章开始,你会发现我们已经不是在学 Linux,而是在学现代操作系统是如何工作的。这也是为什么很多程序员、运维工程师和网络工程师都会花时间理解这些基础,因为它们几乎适用于所有操作系统。


下一章(第3章) 我们将进入你真正开始和 Linux 交互的地方:

Shell 和 Terminal 到底有什么区别?为什么大家总把它们混为一谈?

学完这一章,你第一次打开那个"黑窗口"时,就会知道每输入一个命令,系统内部到底发生了什么。