Skip to content

Linux 内核

字数: 1553 字 时长: 6 分钟

Linux 内核是 Linux 操作系统的主要部分,它实现进程管理、内存管理、文件系统、设备驱动和网络系统等功能,从而为核外的所有程序提供运行环境。它是计算机硬件与其进程之间的核心接口,负责两者之间的通信,还要尽可能高效地管理资源。如果内核不认识某个最新的硬件,那么硬件也就无法被驱动,也就无法使用该硬件。

之所以称为内核,是因为在操作系统中就像果实硬壳中的种子一样,控制着硬件(无论是电话、笔记本电脑、服务器,还是任何其他类型的计算机)的所有主要功能。

NOTE

任何人都可以获取最新版本的 Linux 内核源代码。Linux 内核官网

内核作用

  • 内存管理:追踪记录有多少内存存储了什么以及存储在哪里
  • 进程管理:确定哪些进程可以使用中央处理器(CPU)、何时使用以及持续多长时间
  • 设备驱动程序:充当硬件与进程之间的调解程序/解释程序
  • 系统调用和安全防护:从流程接受服务请求

在正确实施的情况下,内核对于用户是不可见的,它在自己的小世界(称为内核空间)中工作,并从中分配内存和跟踪所有内容的存储位置。用户所看到的内容(例如 Web 浏览器和文件)则被称为用户空间。这些应用通过系统调用接口(SCI)与内核进行交互。

可以这样理解:内核就像是一个为高管(硬件)服务的忙碌的个人助理。助理的工作就是将员工和公众(用户)的消息和请求(进程)转交给高管,记住存放的内容和位置(内存),并确定在任何特定的时间谁可以拜访高管、会面时间有多长。

为了更具象地理解内核,不妨将 Linux 计算机想象成有三层结构:

  1. 硬件:物理机(这是系统的底层结构或基础)是由内存(RAM)、处理器(或 CPU)以及输入/输出(I/O)设备(例如存储、网络和图形)组成的。其中,CPU 负责执行计算和内存的读写操作。
  2. Linux 内核:操作系统的核心。(没错,内核正处于核心的位置)它是驻留在内存中的软件,用于告诉 CPU 要执行哪些操作。
  3. 用户进程:这些是内核所管理的运行程序。用户进程共同构成了用户空间。用户进程有时也简称为进程。内核还允许这些进程和服务器彼此进行通信(称为进程间通信或 IPC)。

内核版本命名

Linux 内核版本命名在不同的时期有其不同的规范。目前 Linux 内核版本号任然是由 3 个数字组成:A.B.C

  • 数字 A 是内核版本号,版本号只有在代码和内核的概念有重大改变的时候才会改变。
  • 数字 B 是内核主版本号,主版本号根据发布时间来分配。
  • 数字 C 是内核次版本号,次版本号是无论在内核增加安全补丁、修复 bug、实现新的特性或者驱动时都会改变。

在正式发布之前,一般都冠以「待发布」(release candidates)字样,通过在内核版本的普通数字之后添加后缀 rc

有些时候,版本号后面有类似于 tip 这样的后缀,表明另一个开发分支,这些分支通常(但不总是)是一个人开始发起的。举例来说,ck 代表 Con Kolivas,ac 代表 Alan Cox 等等。有时,字母和内核建立分支的主要开发领域相关,例如 wl 表示该分支主要测试无线网络的。同时,不同的发行版也会根据需要有自己的后缀。

内核版本分类

可以在 Linux 内核官方网站 https://www.kernel.org/ 上查看各种版本的内核源代码。

Linux 内核版本主要分为以下几类:

  • Mainline:主线版本,是最新的内核版本,包含最新的特性和改进,但可能不够稳定。
  • Stable:稳定版,由 mainline 在时机成熟时发布,稳定版也会在相应版本号的主线上提供 bug 修复和安全补丁。
  • Longterm:长期支持版,提供长期的 bug 修复和安全补丁支持,适用于需要长期稳定运行的系统。
  • Linux-next:一个用于测试下一个主线版本的内核树。
shell
mainline:  6.5-rc1            2023-07-09    [tarball]             [patch]                    [view diff]    [browse]    
stable:    6.4.2              2023-07-05    [tarball]    [pgp]    [patch]    [inc. patch]    [view diff]    [browse]    [changelog]
stable:    6.3.12             2023-07-05    [tarball]    [pgp]    [patch]    [inc. patch]    [view diff]    [browse]    [changelog]
longterm:  6.1.38             2023-07-05    [tarball]    [pgp]    [patch]    [inc. patch]    [view diff]    [browse]    [changelog]
longterm:  5.15.120           2023-07-05    [tarball]    [pgp]    [patch]    [inc. patch]    [view diff]    [browse]    [changelog]
longterm:  5.10.186           2023-06-28    [tarball]    [pgp]    [patch]    [inc. patch]    [view diff]    [browse]    [changelog]
longterm:  5.4.249            2023-06-28    [tarball]    [pgp]    [patch]    [inc. patch]    [view diff]    [browse]    [changelog]
longterm:  4.19.288           2023-06-28    [tarball]    [pgp]    [patch]    [inc. patch]    [view diff]    [browse]    [changelog]
longterm:  4.14.320           2023-06-28    [tarball]    [pgp]    [patch]    [inc. patch]    [view diff]    [browse]    [changelog]
linux-next:  next-20230707    2023-07-07                                                                    [browse]

每一行都表示一个内核版本,包括版本号、发布日期和一些链接。例如,第一行表示主线版本 6.5-rc1,发布日期为 2023-07-09

  • 点击 tarball 链接下载该版本的源代码压缩包;
  • 点击 pgp 链接下载相应的 PGP 签名文件,可以用 PGP 工具或相应的软件验证下载的源代码压缩包的真实性和完整性;
  • 点击 patch 链接下载该版本相对于上一个版本的补丁;
  • 点击 view diff 链接查看该版本相对于上一个版本的差异;
  • 点击 browse 链接在线浏览该版本的源代码;
  • 点击 changelog 连接查看该版本相对于上一个版本的变更日志。