Windows内核和Linux内核比较

我是荔园微风,作为一名在IT界整整25年的老兵,最近受邀给年轻人讲了一场Windows内核和Linux内核相关的讲座。大家听得非常认真。

计算机操作系统的功能角色:作为用户和计算机硬件资源之间的交互,管理调度硬件资源,为应用软件提供运行环境。操作系统属于基础软件,是系统级程序的汇集,为用户屏蔽底层硬件复杂度, 并提供编程接口和操作入口。操作系统控制处理器(CPU)调度系统资源,控制应用程序执行的时机, 决定各个程序分配的处理器时间。操作系统需要兼容底层硬件和应用软件,才能实现计算机的功能。

内核是操作系统中应用连接硬件设备的桥梁。对于一个现代的操作系统来说,它的内核至少应该提供以下 4 种基本能力:

管理进程、线程(决定哪个进程、线程使用 CPU)

管理内存(决定内存用来做什么)

接硬件设备(为进程、和设备间提供通信能力)

提供系统调用(接收进程发送来的系统调用)

从上面 4 种能力来看操作系统和内核之间的关系,通常可以把操作系统分成 3 层,最底层的硬件设备抽象、中间的内核和最上层的应用。

那么,内核和进程又是如何配合工作的?这个问题之前也困绕着我,后来,论坛里有一位高手指点我们,他说:进程和内核的关系,初初一看类似于浏览器请求服务端服务,但仔细一研究,又不是这样。这个比喻打得很贴切,让我们突然觉得这个问题不再那么让人疑惑了。内核权限非常高,它可以管理进程、可以直接访问所有的内存,因此确实需要和进程之间有一定的隔离。这个隔离用类似请求/响应的模型,非常符合常理。

但不同的是,在浏览器、服务端模型中,浏览器和服务端是用不同的机器在执行,因此不需要共享一个CPU。但是在进程调用内核的过程中,这里是存在资源共享的。比如,一个机器有 4 个 CPU,不可能让内核用一个CPU,其他进程用剩下的 CPU。这样太浪费资源了。再比如,进程向内核请求 1000MB 的内存,内核把 1000MB 的数据传回去。这个模型不可行,因为传输太慢了。所以,多数操作系统的设计都遵循一个原则:进程向内核发起一个请求,然后将 CPU 执行权限让出给内核。内核接手 CPU 执行权限,然后完成请求,再转让出 CPU 执行权限给调用进程。

下面我把我讲座中的一些PPT放上来和大家分享。做得一般,请大家将就着看。

Windows内核(右)和Linux内核(左)在体系结构上的比较,一个是混合内核结构,一个是宏内核结构,各有千秋,不分伯仲。

Windows 系统的访问分为 User mode(用户模式)和 Kernel mode(内核模式)。用户级的应用程序在用户模式中运行,而系统级的程序在内核模式中运行。内核模式允许访问所有的系统内存和 CPU 指令。Windows 系统从最早期的 16 位、32 位到现在流行的 64 位,不断持续更新。

开源社区是 Linux 系统的创新源泉和主要的开发场所。Linux 操作系统发行版分为社区版本和商业版本。社区版本数量较多,其开发和维护的主体是开源社区。少数的商业版本(比如红帽企业版) 则是在社区版本的基础上,进一步优化而来。整体来看,无论是否涉及商业活动,开源社区是 Linux 发行版的创新来源和主要的开发场所。而成熟的开源社区通常由相应的开源基金会(或者项目委员会)进行管理。开源基金会为开发社区制定了规则,进行资源管理,负责可能的商务对接,以及保护社区的健康运转。社区的开源基金会(委员会)一般由开源贡献方进行赞助和决策支持。

许多开源社区背后都有一个主导企业,为社区提供资金和研究支撑,甚至直接委派员工参与开源项目。例如,Fedora 社区的核心开发者中 1/3 是红帽的正式雇员。通过资助和维护开源社区的方式,企业可以发挥研究力量的“杠杆”作用,通过向社区输入自有的研究资源,吸引更多的外部贡 献者参与进来,扩大创意来源;另一方面,开源社区版本也成为企业扩大技术影响力的重要途径。

Linux 操作系统由 4 部分组成:kernel、shell、文件系统、应用程序。Kernel(内核)是操作系统的核心,不同于 windows 的内核,Linux 的内核不仅实现了进程调度、内存管理、中断处理、异常陷阱处理,而且还实现了进程管理、进程通信机制、虚拟内存管理、文件系统驱动和 USB、网络、声 音等各类设备驱动子系统,决定了整个系统的性能和稳定性。而 shell 是系统的用户界面,提供用 户与内核交互的接口,接收用户输入的命令并送入内核去执行。

Windows内核(右)和Linux内核(左)在进程线程上的比较,生成子进程方式有较大不同,大家可查询相关资料仔细研究。

Linux 操作系统在服务器领域的普及,主要由于 3 个方面:

(1)全球开发者对 Linux 内核保持了持续的更新,提供了充足的创新动力。据分析结果,截至 2018 年 9 月,已有超过 19000 名开发者为 Linux 内核贡献了代码, 这些开发者遍布全球范围超过1500个组织/企业。广泛分布的开发者,从不同视角不同方面对Linux 内核的补充,使得 Linux 系统得以快速适应服务器领域的变化。

(2)系统代码可以修改和自定义,用户可调用计算机资源的自由度极高。Linux 操作系统的使用者 可以轻松查看系统代码,可以自由修改代码来修补常见的问题,也可以开发自己的程序并添加入 Linux 操作系统中。相比 Windows 等闭源系统,Linux 支持了使用者对于计算机资源极大的使用自由度,支持专业用户去构建和自定义服务器,由此获得了互联网公司、云计算公司的青睐。

(3)运行效率高,运维成本低。Linux 系统在服务器上面的运行效率较高,相对比较轻量化,除非硬件资源分配出现问题,不易出现系统卡死状况。而且 Linux 系统天然地支持虚拟化。因此,在服务 器集群上,Linux 系统的运维成本较低。

(4)Linux 从发展根源上就是针对多用户系统设计的,系统管理员和 root 用户具有系统管理权限。Linux 面向全球开发者开源,系统文件都是文档,在全球开发者多次的筛查和更新中,基本排除了“后门植入”的可能。实际应用中,普通不成熟的 Linux 操作系统确实可能存在安全问题, 也是和系统的文档属性有关。例如,用户 root 权限和 sudo 指令可在有意或无意间修改 Linux 系 统文档,可能会对其他用户或整个系统造成不利影响。因此,成熟的 Linux 操作系统解决方案,有 必要对这类属性进行设计方面的防范,去进行适当的权限屏蔽。而这些安全属性的设计,本质上并 不存在难以解决的障碍。

Linux内核链表数据结构(Linux内核四大数据结构之一)

说到 Linux 内核设计,主要存在以下一些特色:

Multitask and SMP(Symmetric multiprocessing)

Linux 支持并发,但这里的MultiTask 指多任务,就是多个任务可以同时执行,这里的“同时”并不是要求并发,而是在一段时间内可以执行多个任务。SMP 指对称多处理,其实是说 Linux 下每个处理器的地位是相等的,内存对多个处理器来说是共享的,每个处理器都可以访问完整的内存和硬件资源。这个特点决定了在 Linux 上不会存在一个特定的处理器处理用户程序或者内核程序,它们可以被分配到任何一个处理器上执行。

ELF(Executable and Linkable Format)

ELF 翻译过来叫作“可执行文件链接格式”。这是一种从 Unix 继承而来的可执行文件的存储格式,ELF 中把文件分成了一个个分段(Segment),每个段都有自己的作用。

Monolithic Kernel

翻译过来就是“宏内核”,宏内核说明 Linux 的内核是一个完整的可执行程序,且内核用最高权限来运行。宏内核的特点就是有很多程序会打包在内核中,比如,文件系统、驱动、内存管理等。当然这并不是说,每次安装驱动都需要重新编译内核,现在 Linux 也可以动态加载内核模块。所以哪些模块在内核层,哪些模块在用户层,这是一种系统层的拆分,并不是很强的物理隔离。微内核只保留最基本的能力,比如进程调度、虚拟内存、中断。多数应用,甚至包括驱动程序、文件系统,是在用户空间管理的。

Linux内核队列数据结构(Linux内核四大数据结构之一)

Windows 也有内核,它的内核是 C/C++ 写的。我们今天用的 Windows 7, Windows 10 的内核叫作 Windows NT。Windows 同样支持 Multitask 和 SMP(对称多处理)。Windows 的内核设计属于混合类型,你可以看到内核中有一个 Microkernel 模块。而整个内核实现又像宏内核一样,含有的能力非常多,是一个完整的整体。Windows 下也有自己的可执行文件格式,这个格式叫作 Portable Executable(PE),也就是可移植执行文件,扩展名通常是 .exe、.dll、.sys 等。

PE 文件的结构和 ELF 结构有很多相通的地方,如上图。

Linux内核映射表数据结构(Linux内核四大数据结构之一)

但是windows的软件是不可以直接在linux上安装的。虽然相对的软件几乎都在linux上有替代品。如果非要在linux上运行windows软件的话,可以通过名为wine的适配层,但这玩意儿比较复杂,也不是所有东西都可以wine。其次因为activeX是微软的私有技术,所以用到activex的地方,比如国内的大多数银行,都不可以在linux下使用。但不是所有的网银都不能用。90%在windows下创建的文件都可以在linux下打开,反之亦然。但不是全部,因为虽然我没遇见过,但据说还是有类似的个案。

Linux内核红黑树数据结构(Linux内核四大数据结构之一)

课后有同学提问,Linux内核是怎么一步一步发展到今天的。我的PPT上其实有相关的内容,但是十分粗浅,如下:

以下是内核在5.0及以后所发生的变化。

5.0 2019.3.3

此版本包括对energy-aware调度的支持,该调度将任务唤醒到phone中更节能的CPU;它还包括对低功耗设备的adiantum文件系统加密;它增加了对amdgpu驱动程序中AMD Freesync(可变刷新率)的支持;它增加了对UDP中接收卸载和MSG_ZEROCOPY支持的支持;它增加了对ARM指针认证的支持;它增加了对cgroupv2中的cpuset资源控制器(它可以约束任务的CPU和内存节点位置)的支持;它增加了对binderfs的命名空间支持,它允许运行多个android实例;它增加了对btrfs中交换文件的支持;它还增加了许多新的驱动因素和其他改进。

5.1 2019.5.5

此版本包括用于异步I/O的高性能接口io_uring;它还增加了fanotify的改进,以提供在大型文件系统上监视更改的可伸缩方式;它增加了一种方法,允许在PID重用的情况下安全地传递信号;持久内存现在可以用作热插拔RAM;Zstd压缩级别可以在Btrfs中配置;它还添加了一个新的cpuidle调控器,比菜单调控器做出更好的电源管理决策;所有32位体系结构都添加了处理y2038问题所需的系统调用;现在可以在没有initramfs的情况下引导到设备映射器设备;而实时补丁增加了对创建累积补丁的支持。一如既往,还有许多其他新的驱动因素和改进。

5.2 2019.7.7

此版本包括Sound Open Firmware,这是一个将开源固件引入到DSP音频设备的项目;还包括许多英特尔产品的开放固件。此版本还改进了Pressure Stall Information资源监控,使其可供Android使用;通过新的系统调用重新设计了mount API;BFQ I/O调度程序获得了一些性能改进;新的CLONEPIDFD标志允许CLONE(2)返回PIDFDsend_signal(2)可用的pidfs;Ext4已经获得了对不区分大小写的名称查找的支持;还有一个新的设备映射器目标,它模拟有失败扇区和/或读取失败的设备;已经添加了ARM Mali t4xx和更新的6xx/7xx的开源驱动程序。一如既往,有最新的CPU错误(MDS)和许多其他新的驱动程序和改进。

5.3 2019.9.15

此版本包括对AMD Navi gpu的支持;对umwait x86指令的支持,该指令允许进程在短时间内等待而无需spinning loops;一种“利用率限制”机制,用于增强手机中使用的功率不对称cpu的交互性;一个新的PIDFDXOPEN(2)系统调用,完成了让用户处理PID重用问题的工作;在0.0.0.0/8范围内提供了16百万个新的IPv4地址;支持Zaxin x86 CPU;支持英特尔速度选择,以便在Xeon服务器中更容易地进行电源选择;以及支持轻量级管理程序ACRN,这是为嵌入式物联网设备构建的。一如既往,还有许多其他新的驱动和改进。

5.4 2019.11.24

此版本包括kernel lockdown mode,旨在加强UID 0和内核之间的边界;virtio fs,一个高性能virtio驱动程序,它允许一个虚拟化的客户机去装载已导出到主机上的目录;fs-verity,用于检测文件篡改,如dm-verity,但是可以在文件上工作,而不是在块设备上工作;dm-clone允许对dm目标进行实时克隆;两个新的madvise()标志用于改进Android上的应用程序内存管理,支持新的Intel/AMD gpu,支持exfat文件系统,并删除EROFS文件系统的实验状态;一个新的haltpoll cpuidle驱动程序和调控器,大大提高了虚拟化客户机在空闲循环中进行客户机端轮询的性能;blk-iocost,一个I/O cgroup控制器,试图更准确地计算I/O的成本。另外有其他新的驱动和改进。

5.10 2021.1.6

Linux 5.10.5从Linux帧缓冲控制台(FBCON)中删除加速滚动,因为它充满了Bug,而且并没有得到广泛使用。是一个长期维护支持的版本,它支持Ext4中的快速提交模式,提供更快的fsync(); 支持进程间更安全的io_uring共享环;为其他进程提供 madvise(2) 提示的新系统调用,代码补丁以允许使用直接调用而不是间接调用以提高 repotline 性能,支持 AMD 虚拟化客户机中的寄存器加密; 更快更精简的 virtio-fs 性能; 支持 ARM 内存标记扩展,可防止许多安全问题; 和代码修补以允许使用直接调用而不是间接调用。 与往常一样,还有许多其他新驱动程序和改进。Ext4文件系统优化方面:许多应用程序使用 fsync(2) 来确保数据已完成磁盘的存储。 此类操作尝试将比预期多一些的元数据同步到磁盘。 在这个版本中,Ext4 将使用一种新颖的日志技术,日志中只包含最少所需的信息,通过这些信息,崩溃恢复操作可以恢复通过 fsync 操作修改的元数据。 这加快了 fsync() 和元数据繁重的操作。 此功能需要在 mkfs 时启用。也就是想要使用该功能,大伙需要重新格式化磁盘,所以想要体验新功能的朋友们记得备份好数据。io_uring修订方面:5.1内核引入io_uring以来,其关注度和使用率可谓不容小阙,个版本的更新优化也是可谓积极。该版本同样做了一波动作:支持对io_uring的使用限制,实现环的安全共享;此版本 API 稍作了修改,这些修改添加了一些限制,并使宿主应用可以授予对其某些文件描述符的访问权限,并允许不受信任的应用程序或访客安全地使用 io_uring。其他进程的Memory Hints方面:Linux 中的进程可以使用 madvise() 系统调用来通知内核,告知他们的行为以获得更好的性能。 但是,在某些平台(例如 Android)中,做出提示决定所需要的信息对该过程来说是未知的。相反,集中式用户空间守护进程(例如 ActivityManagerService)是感知的,并且该守护进程必须能够在没有任何应用程序参与的情况下自行启动内存回收。 为了解决这个问题,这个补丁引入了新的系统调用 - process_madvise(2)。 基本上,它与 madvise(2) 系统调用相同,除了它需要目标进程的 pidfd,而且现在它支持一组更有限的possible memory hints。virtio-fs性能优化方面:virtio-fs 是在 Linux 5.4 中引入的,作为以高性能、API 兼容的方式与访客VM 共享部分主机文件系统的解决方案。在这个版本中,virtio-fs 添加了对 DAX 的支持,它允许绕过访客页面缓存并允许直接在访客地址空间映射主机页面缓存。 在许多情况下,这可以大大加快速度。 此外,这可以节省大量内存,因为文件数据不必在访客中复制,并且可以从主机页面缓存直接访问。可兼虚拟机的共享文件夹体验将得到一波改善。AMD 支持对虚拟访客中的注册进行加密方面:Linux 从 Linux 4.15 开始支持 SEV。 SEV 是 AMD 的一项功能,它对虚拟化访客的内存进行加密,以便主机无法在未加密的情况下访问它。 此版本还通过加密访客寄存器状态来增强它,通过在world switches上对寄存器进行加密/解密,使管理程序无法访问寄存器。 因此,它为 Linux 客户机增加了额外的保护,以防止渗漏、控制流和回滚攻击。 使用 SEV-ES,访客可以完全控制管理程序可以访问的寄存器。post-Spectre性能优化方面:5.10内核通过静态调用来优化post-Spectre性能,静态调用是全局函数指针的替代品,使用代码补丁来允许使用直接调用而不是间接调用,提供了函数指针的灵活性,但具有性能的一定幅度提高。有了post-Spectre可以摆脱retpolines的压榨,retpolines对性能的影响是真的不小。新的 API 用于 x86 perf 代码,函数指针的重度用户,其中静态调用将 PMU 处理程序的速度提高了 4.2%。支持ARM Memory Tagging Extension方面:Memory Tagging Extension(ARMv8.5 扩展的一部分,在Intel服务器定级的处理器都会有内存RAS特性,也会支持Memory Tagging)提供了一种机制来检测可能容易被利用的内存相关错误的来源,包括边界违规、释放后使用、返回后使用、使用结束 of-scope 并在初始化错误之前使用。常规更新方面:新增nosymfollow挂载选项,禁用指定挂载中的符号链接解析;支持非阻塞 pidfds。 暂不支持将非阻塞 pidfd 传递给 waitid();Casefolding/Encryption引入的预更新;io_uring优化更新;为用户内存访问添加故障注入;lockdep:支持递归读锁的死锁检测;kcsan:添加了对启用复合读写检测的支持;printk:用完全无锁的ringbuffer 替换实现;RCU、rseq/membarrier、seqlock、rcutorture、lockdep的其它小修小补;任务调度器:提高 cfs 任务之间的公平性;tools/bootconfig目录,添加引导时跟踪脚本;builddeb:优化debian包打包;ubsan:为 Clang 引入 CONFIG_UBSAN_LOCAL_BOUNDS配置;为 OLED 显示添加6x8字体;添加 backtrace_idle 参数以强制对空闲 CPU 进行回溯kunit:允许在 JSON 中生成测试结果。文件系统方面:BTRFS fsync 和rename/link 性能优化、将 Direct IO 实现切换到 iomap 基础架构将数据预留转换为元数据使用的ticketing infrastructure;计划从custom tree locks切换到标准的wsem,做了些预修订;sysfs: export 支持发送stream version;XFS 将 inode btree 计数存储在 AGI 中以加快每个 AG 块预留操作的特定挂载时间并添加更多元数据冗余;加打时间戳宽度可以解决2038的问题;弃用 V4 格式;删除不推荐使用的 sysctl 和挂载选项;其它 F2FS、EXT4、NFS、OVERLAYFS、QUOTA 、CEPH、ZONEFS有小修订。

5.15 2021.11

Linux 5.15 版本增加对英特尔 DG2 独显的初步支持,并采用新 NTFS 文件系统驱动,还为 AMD Zen 3 APU 带来温度监控支持。

处理器方面:AMD PDTDMA 驱动在开发了两年后被合并,用于 AMD EPYC 服务器处理器。为 RISC-V 扩展了堆栈随机化,并为 RISC-V 连接了其他功能。在 TCC 驱动中支持了 Alder Lake。一个重要的 AMD 笔记本电脑暂停/恢复修复,包含各种型号。KVM 现在默认为新的 x86 TDP MMU,并增加了 AMD SVM 5 级分页。AMD Zen 3 APU 温度监控支持。Yellow Carp APU 温度监控支持。合并了 AMD SB-RMI 驱动,以利于服务器的使用情况,如基于 Linux 的 OpenBMC 软件栈。优化了 AMD CPU 的 C3 入口处理。一些 IRQ 内核代码的改进,使 Intel 486 时代的硬件受益。一个 AVX2 优化的 SM4 密码实现。图形方面:许多新的 RDNA2 PCI ID,可能用于 RDNA2 显卡更新。AMD Cyan Skillfish 显卡支持。对英特尔 XeHP 和 DG2/Alchemist 独立显卡的初步支持。移除英特尔 Gen10 / Cannon Lake 图形显卡支持。在 DRM/KMS 驱动中还有许多其他图形改进。存储/文件系统方面:合并了新的 NTFS 驱动,这是对现有 NTFS 驱动的一大改进。这个新驱动程序是由 Paragon 软件公司创建的 "NTFS3" 驱动程序。三星的 KSMBD 被合并为内核内 SMB3 文件服务器。OverlayFS 具有更好的性能,并复制了更多的属性。FUSE 现在允许挂载一个活动设备。对 F2FS 进行了性能优化。通过 NFS 客户端代码在多个 NIC 上共享连接。针对 EXT4 的新优化。对 XFS 的大量改进。对 Btrfs 的降级 RAID 模式支持和性能改进。Btrfs 支持 IDMAPPED 挂载和 Btrfs FS-VERITY 支持。Linux 5.15 I/O 可以达到每核~3.5M IOPS。应 systemd 开发者要求,支持全局县/磁盘事件的序列号。删除了 LightNVM 子系统。修复了 Linux 的软盘驱动代码。其他块子系统的改动。

6.0 2022.10.3

Linux 6.0 正式版作为主要的内核系列,它带来了新的功能,改进了硬件支持,以及错误 Bug 和安全修复。

支持 NVMe 带内认证,支持 OpenRISC 和 LoongArch 架构的 PCI 总线,使用 XFS 和 io_uring 时的异步缓冲写入,以及 io_uring 零拷贝网络传输支持。Linux 内核 6.0 还带来了对 RISC-V 硬件架构的“Zicbom”扩展的支持,用于管理具有非缓存一致性 DMA 的设备,还有新的运行时验证子系统,允许内核状态监控,支持生成新的 CXL 内存区域,支持在 OverlayFS 文件系统上正确实现 POSIX 访问控制列表,以及实现第二代 Btrfs“发送”协议,支持发送大型数据和原始压缩扩展。其他值得注意的变化包括 DAMON 机制中新的用户空间内存管理功能,支持将 NFSv4 服务器限制在 1GB 内存的 1024 活跃客户端,支持 EXT4 文件系统获取和设置存储在文件系统超级块中的 UUID,支持 fsnotify 子系统以更好地控制被忽略的事件,支持连接到 uprobes 的可睡眠 BPF 程序,以及对 perf 工具的锁争夺追踪点和内核内聚合 BPF 的新报告。在虚拟化方面也有好消息,Linux 内核 6.0 引入了新的伪设备,叫做“guest vCPU stall detector”,可以作为“看门狗”,告诉主机虚拟机是否停滞。在 Linux 6.0 中还有新的 debugfs 接口,新的 BPF 迭代器,一组新的 BPF kfuncs,用于生成和检查 SYN cookies 的新 BPF 助手,以及新的基于 io_uring 的用户空间块驱动器。当然,Linux 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 现在已经宣布稳定。安全关键系统的运行时间验证。

6.1 2022.12

Linus Torvalds 发布了最新的 Linux 6.1 内核稳定版,从此开启了 Linux 6.2 合并窗口。据介绍,Linux 6.1 内核系列集成了改进的页面回收代码的多代 LRU (MGLRU) 、初始的 Rust 语言支持(仍在构建中)、新的 AMD 平台管理框架、各种开源图形驱动程序改进、Btrfs 性能优化、Kernel Memory Sanitizer、Maple Tree 数据结构的引入以及许多其他硬件驱动程序工作。

Linux 6.1 的一个主要升级在于对 Rust 的主线 (实验性) 支持。Rust 是一种“多范式、通用编程语言”,在开源领域呈现出滚雪球般的势头不断壮大。此外,Linux 内核 6.1 的另一个新增功能是 Multi-Generational Least-Recently-Used 功能(MG-LRU),不过它默认情况下不会启用。据介绍,它可以优化页面回收机制,并在重内存负载情况下提高性能。Linux 6.1 还包含了对 Btrfs 文件系统性能的一系列性能改进,例如额外的 io_uring 集成,调整 sysfs 导出;以及“FIEMAP 速度显著提高”。其他方面,新版本还支持 erofs 文件系统的跨文件系统共享数据,对 EXT4 文件系统进行了一系列的修复、清理和调整。值得一提的是,PinePhone Pro 现在也已经可以运行 Linux 6.1 内核,就像索尼 Xperia 1 IV、三星 Galaxy E5, E7 和 Grand Max 等旧手机。此外,Linux 6.1 现在还提供了一个用于 PinePhone 键盘的输入驱动程序。新版本还完善了任天堂 HID 驱动,以至于“廉价手柄都可以与之兼容”,罗技驱动程序现在支持所有蓝牙设备 HID++,而且还可以自动检测高分辨率滚动能力。Linux 6.1 还将提供一系列新的音频硬件支持,包括对 Apple Silicon 的初步支持,对 AMD Rembrandt 开放固件 (SOF) 的支持,以及对联发科 MT8186 SoC 的支持,预计将会在新的 ChromeBook 中有所应用。新版本还为一些设备带来了来自 XPad 内核输入驱动程序的支持,包括初代 Elite 和 Elite 系列 2 上的 Xbox One Elite 手柄,还有 Hori Fighting Commander ONE 手柄 (包括 Xbox 模式)、8BitDo Pro 2 有线手柄,以及一系列 Wooting 键盘,包括 Wooting ONE、Two, Two HE 和 60HE。除此之外,6.1 版本还包括了下一代 CPU 和 GPU 的基础支持,包括未来 Ryzen 平台管理框架的新驱动程序代码,以及英特尔“Meteor Lake”芯片的管道(plumbing); 并继续努力适配 Intel Arc Graphics DG2 / Alchemist。其他变化主要有:内核地址消毒剂 (KMSAN) 已合并;支持更多龙芯 LoongArch 架构 CPU;内核可以在 EFI 系统上以与体系结构无关的方式解压缩 + 启动;通过 EDAC 驱动程序更快地实现英特尔内存错误解码;枫树数据结构支持;对创建用户命名空间的能力进行新的安全控制;内核会打印出发生分割错误的 CPU 内核。总体而言,Linux 内核 6.1 提供了一系列新功能和改进,同时还增强了基于 Linux 的系统的性能和安全性。这些改进将使得 Linux 成为更完善、更灵活的操作系统,能够满足更多用户的需求。

6.2 2023.2

包括许多由 Intel、AMD、Google 和 Red Hat 等公司贡献的特性。附带了一个名为 RV(运行时验证)的新工具,可以控制运行时验证子系统的运行,一个处理计算加速设备的新框架,支持用户定义的 BPF 对象。以及一个新的 sysctl 旋钮用于控制分裂锁定检测器在 x86 上处于“警告”模式时的工作方式。最重要的是,PowerPC 架构有一个新的 qspinlock 实现,支持 ID 映射挂载和 SquashFS 文件系统的并行解压缩控制,改进的 Btrfs RAID5 和 RAID6 实现,以及启用或禁用软件实现的影子堆栈的能力启动期间在 AArch64 (ARM64) 上。在安全方面,Linux 6.2 改进了 Landlock 安全模块,使其可以控制文件截断操作,更快地缓解对 Intel CPU 的 Retbleed 推测执行攻击,并能够将次数上限设置为 10,000 允许内核在重新启动或恐慌之前发出 oops。值得注意的新增功能包括开箱即用的对 Intel Arc Graphics (DG2/Alchemist) 的稳定支持,以及使用 Nouveau 开源代码对 Nvidia GeForce RTX 30 系列“Ampere”加速图形的初始支持。Linux 6.2 内核还包括更新的驱动程序,这包括对 OneXPlayer 游戏手持设备、Habana Labs 的 Gaudi2 AI 加速器等的支持。Linux 6.2 还增加了对 Apple 键盘上的交换控制和命令键的支持,对带有按钮和摇杆的 Sony DualShock4 USB 控制器的基本支持,以及对橙皮 4G-IoT 中所见的联发科技 MT6370 I2C Sub 电源管理芯片的支持开源单板计算机。除此之外,这个新内核还包括 Call Depth Tracking,以帮助提高旧版英特尔 Skylake 时代 PC 的性能,以及各种文件系统驱动程序增强和安全改进。除了新的硬件支持之外,NTFS3 文件内核驱动程序也得到了改进,并使用新的挂载选项进行了更新。Linux 6.2 内核提供了重要的新硬件支持和功能。

作者简介:荔园微风,1981年生,高级工程师,浙大工学硕士,软件工程项目主管,做过程序员、软件设计师、系统架构师,早期的Windows程序员,Visual Studio忠实用户,C/C++使用者,是一位在计算机界学习、拼搏、奋斗了25年的老将,经历了UNIX时代、桌面WIN32时代、Web应用时代、云计算时代、手机安卓时代、大数据时代、ICT时代、AI深度学习时代、智能机器时代,我不知道未来还会有什么时代,只记得这一路走来,充满着艰辛与收获,愿同大家一起走下去,充满希望的走下去。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值