Linux Kernel是最新版本的Linux内核,支持Intel、Alpha、PPC、Sparc、IA-64 、ARM、MIPS、Amiga、Atari和IBM s/390等,还支持32位大文件系统。而在Intel平台上,物理内存最大支持可以达到64GB。加强对IDE和SCSI硬件系统的支持,并增强了对USB设备和3D加速卡的支持。虽然并不像人们期望的那样有很大更新,但也好的多了。如果你还在使用旧版本的linux kernel,赶快更新吧,绝对不会让你失望。
目前官方已经发布了linux kernel v6.0.2,能够支持 NVMe 带内认证,支持 OpenRISC 和 LoongArch 架构的 PCI 总线,使用 XFS 和 io_uring 时的异步缓冲写入,以及 io_uring 零拷贝网络传输支持。新版本还带来了对 RISC-V 硬件架构的“Zicbom”扩展的支持,用于管理具有非缓存一致性 DMA 的设备,还有新的运行时验证子系统,允许内核状态监控,支持生成新的 CXL 内存区域,支持在 OverlayFS 文件系统上正确实现 POSIX 访问控制列表,以及实现第二代 Btrfs“发送”协议,支持发送大型数据和原始压缩扩展。
最上面是用户(或应用程序)空间。这是用户应用程序执行的地方。用户空间之下是内核空间,Linux 内核正是位于这里。
GNU C Library (glibc)也在这里。它提供了连接内核的系统调用接口,还提供了在用户空间应用程序和内核之间进行转换的机制。这点非常重要,因为内核和用户空间的应用程序使用的是不同的保护地址空间。每个用户空间的进程都使用自己的虚拟地址空间,而内核则占用单独的地址空间。
Linux 内核可以进一步划分成 3 层。最上面是系统调用接口,它实现了一些基本的功能,例如 read 和 write。系统调用接口之下是内核代码,可以更精确地定义为独立于体系结构的内核代码。这些代码是 Linux 所支持的所有处理器体系结构所通用的。在这些代码之下是依赖于体系结构的代码,构成了通常称为 BSP(Board Support Package)的部分。这些代码用作给定体系结构的处理器和特定于平台的代码。
一、系统调用接口
SCI 层提供了某些机制执行从用户空间到内核的函数调用。正如前面讨论的一样,这个接口依赖于体系结构,甚至在相同的处理器家族内也是如此。SCI 实际上是一个非常有用的函数调用多路复用和多路分解服务。在 ./linux/kernel 中您可以找到 SCI 的实现,并在 ./linux/arch 中找到依赖于体系结构的部分。
二、进程管理
进程管理的重点是进程的执行。在内核中,这些进程称为线程,代表了单独的处理器虚拟化(线程代码、数据、堆栈和 CPU 寄存器)。在用户空间,通常使用进程 这个术语,不过 Linux 实现并没有区分这两个概念(进程和线程)。内核通过 SCI 提供了一个应用程序编程接口(API)来创建一个新进程(fork、exec 或 Portable Operating System Interface [POSIX] 函数),停止进程(kill、exit),并在它们之间进行通信和同步。
进程管理还包括处理活动进程之间共享 CPU 的需求。内核实现了一种新型的调度算法,不管有多少个线程在竞争 CPU,这种算法都可以在固定时间内进行操作。这种算法就称为 O(1) 调度程序,这个名字就表示它调度多个线程所使用的时间和调度一个线程所使用的时间是相同的。 O(1) 调度程序也可以支持多处理器(称为对称多处理器或 SMP)。您可以在 ./linux/kernel 中找到进程管理的源代码,在 ./linux/arch 中可以找到依赖于体系结构的源代码。
三、内存管理
内核所管理的另外一个重要资源是内存。为了提高效率,如果由硬件管理虚拟内存,内存是按照所谓的内存页 方式进行管理的(对于大部分体系结构来说都是 4KB)。Linux 包括了管理可用内存的方式,以及物理和虚拟映射所使用的硬件机制。
不过内存管理要管理的可不止 4KB 缓冲区。Linux 提供了对 4KB 缓冲区的抽象,例如 slab 分配器。这种内存管理模式使用 4KB 缓冲区为基数,然后从中分配结构,并跟踪内存页使用情况,比如哪些内存页是满的,哪些页面没有完全使用,哪些页面为空。这样就允许该模式根据系统需要来动态调整内存使用。
为了支持多个用户使用内存,有时会出现可用内存被消耗光的情况。由于这个原因,页面可以移出内存并放入磁盘中。这个过程称为交换,因为页面会被从内存交换到硬盘上。内存管理的源代码可以在 ./linux/mm 中找到。
四、虚拟文件系统
虚拟文件系统(VFS)是 Linux 内核中非常有用的一个方面,因为它为文件系统提供了一个通用的接口抽象。VFS 在 SCI 和内核所支持的文件系统之间提供了一个交换层(请参看图 4)。
在 VFS 上面,是对诸如 open、close、read 和 write 之类的函数的一个通用 API 抽象。在 VFS 下面是文件系统抽象,它定义了上层函数的实现方式。它们是给定文件系统(超过 50 个)的插件。文件系统的源代码可以在 ./linux/fs 中找到。
文件系统层之下是缓冲区缓存,它为文件系统层提供了一个通用函数集(与具体文件系统无关)。这个缓存层通过将数据保留一段时间(或者随即预先读取数据以便在需要是就可用)优化了对物理设备的访问。缓冲区缓存之下是设备驱动程序,它实现了特定物理设备的接口。
五、网络堆栈
网络堆栈在设计上遵循模拟协议本身的分层体系结构。回想一下,Internet Protocol (IP) 是传输协议(通常称为传输控制协议或 TCP)下面的核心网络层协议。TCP 上面是 socket 层,它是通过 SCI 进行调用的。
socket 层是网络子系统的标准 API,它为各种网络协议提供了一个用户接口。从原始帧访问到 IP 协议数据单元(PDU),再到 TCP 和 User Datagram Protocol (UDP),socket 层提供了一种标准化的方法来管理连接,并在各个终点之间移动数据。内核中网络源代码可以在 ./linux/net 中找到。
六、设备驱动程序
Linux 内核中有大量代码都在设备驱动程序中,它们能够运转特定的硬件设备。Linux 源码树提供了一个驱动程序子目录,这个目录又进一步划分为各种支持设备,例如 Bluetooth、I2C、serial 等。设备驱动程序的代码可以在 ./linux/drivers 中找到。
七、依赖体系结构的代码
尽管 Linux 很大程度上独立于所运行的体系结构,但是有些元素则必须考虑体系结构才能正常操作并实现更高效率。./linux/arch 子目录定义了内核源代码中依赖于体系结构的部分,其中包含了各种特定于体系结构的子目录(共同组成了 BSP)。对于一个典型的桌面系统来说,使用的是 i386 目录。每个体系结构子目录都包含了很多其他子目录,每个子目录都关注内核中的一个特定方面,例如引导、内核、内存管理等。这些依赖体系结构的代码可以在 ./linux/arch 中找到。
二、linux kernel 6.0 还包括许多更新和新的驱动程序,以便更好地支持硬件。除此之外,它还增加了许多错误 Bug 修复和调整,以提供比以前的内核更好的性能,这里最值得注意的是对大型系统上的任务安排的调整,对内核内 TLS 实现的性能改进,以及新的 IORING_RECV_MULTISHOT flag,以使 recv () 调用能够进行多镜头操作。
三、安全方面,Linux 内核 6.0 实现了从 bootloader 的设置数据中获取随机数 seeds 到 x86 和 m68k 内核,支持 SafeSetID 安全模块来控制 setgroups () 的变化,支持 ARIA 加密算法,以及支持钩子连接到控制组或单一目标进程到 BPF 安全模块。
四、其他硬件等特性支持如下:
- 像 A750 和 A770 这样的英特尔 Arc 独立 GPU 可以在 Linux 6.0 内核的 i915 DRM 内核驱动上运行,但目前仍然是实验性的,所以需要“force_probe”选项来启用。但至少在 Linux 6.0 中,现在可以使用这些新的英特尔桌面独显与更新的 Mesa 堆栈配对。
- 更多的 AMD RDNA3 的启用,希望能够与即将推出的 Radeon RX 7000 系列显卡一起工作。
- 高通骁龙 8xc Gen 3 支持和对联想 ThinkPad X13s Arm 笔记本电脑早期支持。这项工作在主线上仍处于早期形式,但至少已经可以使用,并开辟了 Arm Linux 笔记本电脑选项。
- 各种调度器的变化,包括一些针对 AMD Zen 的 NUMA 平衡增强,以及 AMD CPU 现在倾向于 MWAIT 而不是 HALT。
- 英特尔 Raptor Lake 的各种补充,如 TCC 冷却驱动、RAPL 驱动中的 Raptor Lake P、Raptor Lake USB4 / Thunderbolt,以及其他缺失的 Raptor Lake ID。还有一些初步的 Meteor Lake 支持,比如音频代码和其他地方。
- 对 AMD Ryzen 7000“Raphael”平台的音频驱动支持。
- 支持 IO_uring 用户空间块驱动,各种 IO_uring 优化,以及其他有希望的 I / O 相关工作,如 Btrfs Send Protocol v2。
- 对英特尔 Habana Labs Gaudi 2 的初步支持。
- H.265 / HEVC media user-space API 现在已经宣布稳定。
- 安全关键系统的运行时间验证。
收起介绍展开介绍
目前官方已经发布了linux kernel v6.0.2,能够支持 NVMe 带内认证,支持 OpenRISC 和 LoongArch 架构的 PCI 总线,使用 XFS 和 io_uring 时的异步缓冲写入,以及 io_uring 零拷贝网络传输支持。新版本还带来了对 RISC-V 硬件架构的“Zicbom”扩展的支持,用于管理具有非缓存一致性 DMA 的设备,还有新的运行时验证子系统,允许内核状态监控,支持生成新的 CXL 内存区域,支持在 OverlayFS 文件系统上正确实现 POSIX 访问控制列表,以及实现第二代 Btrfs“发送”协议,支持发送大型数据和原始压缩扩展。
Linux内核简介
现在让我们从一个比较高的高度来审视一下 GNU/Linux 操作系统的体系结构。您可以从两个层次上来考虑操作系统,如图 2 所示。最上面是用户(或应用程序)空间。这是用户应用程序执行的地方。用户空间之下是内核空间,Linux 内核正是位于这里。
GNU C Library (glibc)也在这里。它提供了连接内核的系统调用接口,还提供了在用户空间应用程序和内核之间进行转换的机制。这点非常重要,因为内核和用户空间的应用程序使用的是不同的保护地址空间。每个用户空间的进程都使用自己的虚拟地址空间,而内核则占用单独的地址空间。
Linux 内核可以进一步划分成 3 层。最上面是系统调用接口,它实现了一些基本的功能,例如 read 和 write。系统调用接口之下是内核代码,可以更精确地定义为独立于体系结构的内核代码。这些代码是 Linux 所支持的所有处理器体系结构所通用的。在这些代码之下是依赖于体系结构的代码,构成了通常称为 BSP(Board Support Package)的部分。这些代码用作给定体系结构的处理器和特定于平台的代码。
linux kernel主要子系统
现在使用图 3 中的分类说明 Linux 内核的主要组件。一、系统调用接口
SCI 层提供了某些机制执行从用户空间到内核的函数调用。正如前面讨论的一样,这个接口依赖于体系结构,甚至在相同的处理器家族内也是如此。SCI 实际上是一个非常有用的函数调用多路复用和多路分解服务。在 ./linux/kernel 中您可以找到 SCI 的实现,并在 ./linux/arch 中找到依赖于体系结构的部分。
二、进程管理
进程管理的重点是进程的执行。在内核中,这些进程称为线程,代表了单独的处理器虚拟化(线程代码、数据、堆栈和 CPU 寄存器)。在用户空间,通常使用进程 这个术语,不过 Linux 实现并没有区分这两个概念(进程和线程)。内核通过 SCI 提供了一个应用程序编程接口(API)来创建一个新进程(fork、exec 或 Portable Operating System Interface [POSIX] 函数),停止进程(kill、exit),并在它们之间进行通信和同步。
进程管理还包括处理活动进程之间共享 CPU 的需求。内核实现了一种新型的调度算法,不管有多少个线程在竞争 CPU,这种算法都可以在固定时间内进行操作。这种算法就称为 O(1) 调度程序,这个名字就表示它调度多个线程所使用的时间和调度一个线程所使用的时间是相同的。 O(1) 调度程序也可以支持多处理器(称为对称多处理器或 SMP)。您可以在 ./linux/kernel 中找到进程管理的源代码,在 ./linux/arch 中可以找到依赖于体系结构的源代码。
三、内存管理
内核所管理的另外一个重要资源是内存。为了提高效率,如果由硬件管理虚拟内存,内存是按照所谓的内存页 方式进行管理的(对于大部分体系结构来说都是 4KB)。Linux 包括了管理可用内存的方式,以及物理和虚拟映射所使用的硬件机制。
不过内存管理要管理的可不止 4KB 缓冲区。Linux 提供了对 4KB 缓冲区的抽象,例如 slab 分配器。这种内存管理模式使用 4KB 缓冲区为基数,然后从中分配结构,并跟踪内存页使用情况,比如哪些内存页是满的,哪些页面没有完全使用,哪些页面为空。这样就允许该模式根据系统需要来动态调整内存使用。
为了支持多个用户使用内存,有时会出现可用内存被消耗光的情况。由于这个原因,页面可以移出内存并放入磁盘中。这个过程称为交换,因为页面会被从内存交换到硬盘上。内存管理的源代码可以在 ./linux/mm 中找到。
四、虚拟文件系统
虚拟文件系统(VFS)是 Linux 内核中非常有用的一个方面,因为它为文件系统提供了一个通用的接口抽象。VFS 在 SCI 和内核所支持的文件系统之间提供了一个交换层(请参看图 4)。
在 VFS 上面,是对诸如 open、close、read 和 write 之类的函数的一个通用 API 抽象。在 VFS 下面是文件系统抽象,它定义了上层函数的实现方式。它们是给定文件系统(超过 50 个)的插件。文件系统的源代码可以在 ./linux/fs 中找到。
文件系统层之下是缓冲区缓存,它为文件系统层提供了一个通用函数集(与具体文件系统无关)。这个缓存层通过将数据保留一段时间(或者随即预先读取数据以便在需要是就可用)优化了对物理设备的访问。缓冲区缓存之下是设备驱动程序,它实现了特定物理设备的接口。
五、网络堆栈
网络堆栈在设计上遵循模拟协议本身的分层体系结构。回想一下,Internet Protocol (IP) 是传输协议(通常称为传输控制协议或 TCP)下面的核心网络层协议。TCP 上面是 socket 层,它是通过 SCI 进行调用的。
socket 层是网络子系统的标准 API,它为各种网络协议提供了一个用户接口。从原始帧访问到 IP 协议数据单元(PDU),再到 TCP 和 User Datagram Protocol (UDP),socket 层提供了一种标准化的方法来管理连接,并在各个终点之间移动数据。内核中网络源代码可以在 ./linux/net 中找到。
六、设备驱动程序
Linux 内核中有大量代码都在设备驱动程序中,它们能够运转特定的硬件设备。Linux 源码树提供了一个驱动程序子目录,这个目录又进一步划分为各种支持设备,例如 Bluetooth、I2C、serial 等。设备驱动程序的代码可以在 ./linux/drivers 中找到。
七、依赖体系结构的代码
尽管 Linux 很大程度上独立于所运行的体系结构,但是有些元素则必须考虑体系结构才能正常操作并实现更高效率。./linux/arch 子目录定义了内核源代码中依赖于体系结构的部分,其中包含了各种特定于体系结构的子目录(共同组成了 BSP)。对于一个典型的桌面系统来说,使用的是 i386 目录。每个体系结构子目录都包含了很多其他子目录,每个子目录都关注内核中的一个特定方面,例如引导、内核、内存管理等。这些依赖体系结构的代码可以在 ./linux/arch 中找到。
linux kernel 6新功能
一、在虚拟化方面也有好消息,Linux 内核 6.0 引入了新的伪设备,叫做“guest vCPU stall detector”,可以作为“看门狗”,告诉主机虚拟机是否停滞。在 Linux 6.0 中还有新的 debugfs 接口,新的 BPF 迭代器,一组新的 BPF kfuncs,用于生成和检查 SYN cookies 的新 BPF 助手,以及新的基于 io_uring 的用户空间块驱动器。二、linux kernel 6.0 还包括许多更新和新的驱动程序,以便更好地支持硬件。除此之外,它还增加了许多错误 Bug 修复和调整,以提供比以前的内核更好的性能,这里最值得注意的是对大型系统上的任务安排的调整,对内核内 TLS 实现的性能改进,以及新的 IORING_RECV_MULTISHOT flag,以使 recv () 调用能够进行多镜头操作。
三、安全方面,Linux 内核 6.0 实现了从 bootloader 的设置数据中获取随机数 seeds 到 x86 和 m68k 内核,支持 SafeSetID 安全模块来控制 setgroups () 的变化,支持 ARIA 加密算法,以及支持钩子连接到控制组或单一目标进程到 BPF 安全模块。
四、其他硬件等特性支持如下:
- 像 A750 和 A770 这样的英特尔 Arc 独立 GPU 可以在 Linux 6.0 内核的 i915 DRM 内核驱动上运行,但目前仍然是实验性的,所以需要“force_probe”选项来启用。但至少在 Linux 6.0 中,现在可以使用这些新的英特尔桌面独显与更新的 Mesa 堆栈配对。
- 更多的 AMD RDNA3 的启用,希望能够与即将推出的 Radeon RX 7000 系列显卡一起工作。
- 高通骁龙 8xc Gen 3 支持和对联想 ThinkPad X13s Arm 笔记本电脑早期支持。这项工作在主线上仍处于早期形式,但至少已经可以使用,并开辟了 Arm Linux 笔记本电脑选项。
- 各种调度器的变化,包括一些针对 AMD Zen 的 NUMA 平衡增强,以及 AMD CPU 现在倾向于 MWAIT 而不是 HALT。
- 英特尔 Raptor Lake 的各种补充,如 TCC 冷却驱动、RAPL 驱动中的 Raptor Lake P、Raptor Lake USB4 / Thunderbolt,以及其他缺失的 Raptor Lake ID。还有一些初步的 Meteor Lake 支持,比如音频代码和其他地方。
- 对 AMD Ryzen 7000“Raphael”平台的音频驱动支持。
- 支持 IO_uring 用户空间块驱动,各种 IO_uring 优化,以及其他有希望的 I / O 相关工作,如 Btrfs Send Protocol v2。
- 对英特尔 Habana Labs Gaudi 2 的初步支持。
- H.265 / HEVC media user-space API 现在已经宣布稳定。
- 安全关键系统的运行时间验证。
发表评论
0条评论软件排行榜
热门推荐
- windows virtual pc官方版 v6.1.7600 32&64位58.12M / 简体中文
- tiny core linux官方版 v15.0285.7M / 英文
- startos系统(原Ylmf OS) v6.01019.26M / 简体中文
- redhat enterprise linux(红帽子Linux) 9.4中文版10.32G / 简体中文
- remix os pc版32位64位 v3.0.207官方版1.02G / 简体中文
- OpenBSD系统 v7.6官方版696.47M / 英文
- 凤凰系统x86u盘版(phoenix os) v2.0.0官方版371M / 简体中文