Linux 内核发展史(一):站在巨人的肩膀上

阅读数:1 2020 年 2 月 15 日 16:51

Linux内核发展史(一):站在巨人的肩膀上

openEuler 是基于 Linux 内核的企业级 Linux 服务器操作系统平台的开源社区发行版。openEuler 支持鲲鹏架构,可运行在 TaiShan 服务器上。本技术连载将会从理论基础、源码分析和实操方法三个方面来比较全面地介绍内核编程与应用编程的基础知识,到 2020 年 8 月之前主要介绍内核编程部分。通过本连载的介绍,您将对 openEuler 内核编程和应用编程的理论和实践知识有一个基本的了解。本小节将从 Linux 内核发展史出发,带您走进 openEuler 的世界,一起学习操作系统的基础知识和 openEuler 内核的技术细节。

一、Linux 内核发展简史

1991 年,刚刚过完 21 岁生日的芬兰赫尔辛基大学计算机系单身狗 Linus 负债 DIY 了一台性能彪悍的计算机。他准备用这台计算机运行在操作系统课上学会的 Minix 操作系统并黑进学校性能更加强大的计算机系统来上网或者看新闻 [1]。然而,Minix 系统的价格让 Linus 望而却步,且当时 Minix 系统的协议只支持教学用途,于是这个小伙子决定开发一套自己的操作系统 [2]。有三分之一的国土在北极圈内的芬兰冬季严寒而漫长,这给了 Linus 充分的时间构建自己的系统。在独自开发操作系统的漫长的日子里,只有学校每周三晚上的 party 给 Linus 的生活带来一点亮色,但他很快因为没有女伴而放弃了 party 并沉迷 OS 无法自拔。1991 年 9 月 17 日,Linux 内核(当时叫 Freax)的 0.01 版被上传至 FTP 服务器,从此拉开了一个传奇的序幕……

从 0.01 版的内核开始,Linux 内核经过不断迭代成熟,从最初的一万行左右的代码成长至今天千万行级的巨无霸。第一个版本只是一个内核。为了有一个工作系统,还需要一个 shell、编译器、库等等。这些全部来自其他 GNU 软件。一年后的 1992 年,第一个 Linux 发行版诞生了。到今天为止,著名的发行版包括 Debian、Ubuntu、RedHat Enterprise Linux 和 Fedora 等。下表简要列出了迄今为止各版本内核的一些更新情况和发行日期 [4]:

内核版本号 时间 内核发展情况
0.00 1991.2 4
0.01 1991.9 第一个正式向外公布的 Linux 内核版本
0.02 1991.10.5 LinusTorvalds 将当时最初的 0.02 内核版本发布到了 Minix 新闻组,很快就得到了反应。LinusTorvalds 在这种简单的任务切换机制上进行扩展,并在很多热心支持者的帮助下开发和推出了 Linux 的第一个稳定的工作版本。
0.03 1991.10.5
0.10 1991.10 Linux0.10 版本内核发布,0.11 版本随后在 1991 年 12 月推出,当时它被发布在 Internet 上,供人们免费使用。
0.11 1991.12.8 基本可以正常运行的内核版本
0.12 1992.1.15 主要加入对数学协处理器的软件模拟程序
0.95(0.13) 1992.3.8 开始加入虚拟文件系统思想的内核版本
0.96 1992.5.12 开始加入网络支持和虚拟文件系统
0.97 1992.8.1
0.98 1992.9.29
0.99 1992.12.13
1.0 1994.3.14 Linux1.0 版本内核发布,使用它的用户越来越多,而且 Linux 系统的核心开发队伍也建起来了。
1.2 1995.3.7
2.0 1996.2.9
2.2 1999.1.26
2.4 2001.1.4 Linux 2.4.0 版本内核发布。
2.6 2003.12.17 Linux 2.6 版本内核发布,与 2.4 内核版本相比,它在很多方面进行了改进,如支持多处理器配置和 64 位计算,它还支持实现高效率线和处理的本机 POSIX 线程库 (NPTL)。实际上,性能、安全性和驱动程序的改进是整个 2.6.x 内核的关键。
2.6.15 2006 Linux 2.6.15 版本内核发布。它对 IPv6 的支持在这个内核中有了很大的改进。
2.6.30 2009.6 改善了文件系统、加入了完整性检验补丁、TOMOYOLinux 安全模块、可靠的数据报套接字(datagramsocket)协议支持、对象存储设备支持、FS
2.6.32 2009.12 增添了虚拟化内存 de
2.6.34 2010.5 添加了 Ceph 和 LogFS 两个新的文件系统,其中前者为分布式的文件系统,后者是适用于 Flash 设备的文件系统。Linux Kernel 2.6.34 的其他特性包括新的 Vhostnet、改进了 Btrfs 文件系统、对 Kprobesjump 进行了优化、新的 perf 功能、RCUlockdep、GeneralizedTTLSecurityMechanism(RFC5082) 及 privateVLANproxyarp(RFC3069) 支持、asynchronous 挂起恢复等等。
2.6.36 2010.10 Tilera 处理器架构支持、新的文件通知接口 fanotify、Intel 显卡上实现 KMS 和 KDB 的整合、并行管理工作队列、Inteli3/5 平台上内置显卡和 CPU 的智能电源管理、CIFS 文件系统本地缓存、改善虚拟内存的层级结构,提升桌面操作响应速度、改善虚拟内存溢出终结器的算法、整合了 AppArmor 安全模型(注:与 SELinux 基于文件的标注不同,AppArmor 是基于路径的)。
2.6.37 2011.1.4 Linux2.6.37 包含了对 Ext4 和 XFS 的几个 SMP 可伸缩性改进,一个在禁用大内核锁的情况下编译内核的选项,对每个 cgroup IO 限制的支持,一个基于 Ceph 集群文件系统的网络设备,几个 Btrfs 改进,更有效的静态探测,对探测模块的性能支持和可访问列表本地和全局变量、使用 LZO 压缩的图像休眠、IPv4 支持的 PPP、一些网络微优化和许多其他小的更改、改进和新的驱动程序。
2.6.38 2011.3.14 此版本增加了对自动进程分组(在新闻中称为“wonder patch”)的支持、VFS 的显著可扩展性改进、Btrfs LZO 压缩和只读快照、对 B.a.T.M.a.N.mesh 协议(有助于在发生自然灾害、军事冲突或互联网审查时提供网络连接,)、透明的大页面支持(不使用 hugetblfs)、在多个 cpu 上自动传播即将到来的网络流量、支持 AMD Fusion apu、许多驱动程序和其他更改。
2.6.39 2011.5.18 EXT4 SMP 的可伸缩性改进,初始 TCP 拥塞窗口的增加,一种称为 Unicore
3.0 2011.7.21 除了一个新的版本编号方案,Linux3.0 还有几个新的特性:Btrfs 数据清理和自动碎片整理,XenDOM0 支持,ECHO 中没有特权的 ICMP,WakeonWLAN,Berkeley 包过滤器 JIT 过滤,一个类似 memcached 的页面缓存系统,一个对 sendmsg()调用和 setns()进行批处理的 sendmsg()系统调用,一个系统调用允许更好地处理轻量级虚拟化系统,如容器。增加了新的硬件支持:例如,Microsoft Kinect、AMD Llano Fusion APU、Intel iwlwifi 105 和 135、Intel C600 串行连接 scsi 控制器、Ralink RT5370 USB、多个 Realtek RTL81xx 设备或 Apple iSight 网络摄像头。增加了许多其他驱动和小的改进。
3.1 2011.10.24 支持 OpenRISC 开源 CPU,对写回限制的性能改进,slab 分配器中的一些加速,新的 iSCSI 实现,支持用于移动支付的近场通信芯片,通用软件 RAID 层中的坏块管理,一个新的用于电源管理的“cpupowerutils”用户空间实用程序、默认情况下在 ext3 中启用的文件系统屏障、Wii 遥控器支持和新的驱动程序以及许多小的改进。
3.2 2012.1.4 此版本包括对大于 4KB 和小于 1MB 的 ext4 块的支持,这将提高大文件的性能;btrfs 已更新为更快的清理、关键文件系统元数据的自动备份和用于手动检查文件系统的工具;进程调度器添加了对设置 CPU 时间上限的支持;在大量写操作的情况下,桌面的响应能力得到了改进,TCP 被更新为包括一个算法,该算法可以在丢失数据包后加快连接的恢复;分析工具“perf
3.3 2012.3.18 这个版本最重要的特点是合并了 Android 项目的内核代码。但是,它还包括对新体系结构(TI C6X)的支持、大大改进的平衡和 Btrfs 中不同 RAID 配置文件之间的重排能力,以及一些网络改进:为虚拟化场景设计的虚拟交换机实现(Open vSwitch),一种比“绑定”驱动程序更快、更可扩展的替代方案,对网络设备的传输队列进行可配置的限制,以抵抗缓冲区膨胀,网络优先级控制组和每个 cgroup 的 TCP 缓冲区限制。也有许多小功能和新的驱动程序和修复程序也可用。
3.4 2012.5.20 此版本包括几个 Btrfs 更新:支持大于 4KB 的元数据块,大大提高了元数据性能,更好的错误处理和更好的恢复工具;还有一个新的 X32 ABI,它允许在 64 位模式下运行带有 32 位指针的程序;对 GPU 驱动程序的几项更新:Nvidia GeForce 600“开普勒”的早期模式设置,AMD Radeon 7xxx 和 AMD Trinity APU 系列的支持,以及 Intel Medfield graphics 的支持;还支持 x86 CPU 驱动程序自动 robing,一个设备映射器目标,它存储块的加密散列以检查入侵,另一个目标是使用外部只读设备作为精简配置的 LVM 卷的源,一些性能改进,如 GTK2 报表 GUI 和新的“Yama”安全模块。也有许多小功能和新的驱动程序和修复程序也可用。
3.5 2012.7.21 此版本包括对 Ext4 中的元数据校验和的支持,使用诸如 StaseTAP 或 PERP 之类的工具进行性能分析的用户空间探针,沙盘机制允许过滤 SysCurts,设计了一种新的网络队列管理算法,用于打击 Buffer
3.6 2012.9.30 这个 Linux 版本在 Btrfs 中包含了一些新特性:子卷配额、配额组和快照差异(也称为“发送 / 接收”)。它还包括支持同时挂起到磁盘和内存、TCP“快速打开”模式、“TCP 小队列”功能以防止缓冲区膨胀;支持通过 NFS/NBD 进行安全交换、更好的 Ext4 配额支持、支持 PCIe D3cold 电源状态;以及 VFIO,允许从客户机驱动程序安全访问裸机主机设备。许多小功能和新的驱动程序和修复程序也可用。
3.7 2012.12.10 此 Linux 版本包括对 ARM 64 位体系结构的支持,ARM 支持使用同一内核引导到不同系统,签名的内核模块,Btrfs 支持使用 chattr 和 faster fsync()在每个文件的基础上禁用写时拷贝,这是一个模仿 strace 的新“perf trace”工具,支持服务器端的 TCP 快速打开功能、实验性的 SMBv2 协议支持、稳定的 NFS4.1 和并行的 NFS 支持、允许通过 UDP 传输第 2 层以太网数据包的新隧道协议,以及支持 Intel“管理器模式访问保护”(SMAP)安全功能。许多小功能和新的驱动程序和修复程序也可用。
3.8 2013.2.18 这个 Linux 版本在 Ext4 中支持在 inode 中嵌入非常小的文件,这大大提高了这些文件的性能并节省了一些磁盘空间。还有一个新的 Btrfs 特性,允许快速替换磁盘,一个为 ssd 优化的新文件系统 F2FS,支持文件系统挂载,UTS,IPC,PIDs,以及为没有特权的用户提供的网络堆栈名称空间,内存资源控制器中的内核内存,XFS 中的日志校验和,改进的 NUMA 策略重新设计和取消了对 386 处理器的支持。许多小功能和新的驱动程序和修复程序也可用。
3.9 2013.4.28 这个 Linux 版本包括对实验性 RAID5/6 模式的支持,以及对 Btrfs 中快照共享的文件进行更好的碎片整理;对 Android SDK 使用的“金鱼”模拟器的支持,能够将固态硬盘存储作为缓存设备;两个新的架构端口:Synopsys ARC 700 和 Meta Imagination 处理器;ARM 中的 KVM 虚拟化支持体系结构,一个 Intel 驱动程序,它“注入”空闲状态以提高每瓦特的性能,支持 Chrome OS 笔记本电脑,一个新的挂起电源状态,并删除过时的配置实验配置选项。许多小功能和新的驱动程序和修复程序也可用。
3.10 2013.6.30 此版本增加了对 bcache 的支持,它允许使用 SSD 设备缓存来自其他块设备的数据;Btrfs 格式的改进,使专用于存储数据块信息的树小 30
3.11 2013.9.2 此版本增加了对一个新的 O_TMPFILE open(2)标志的支持,该标志允许轻松创建安全的临时文件,自 r600 以来所有 Radeon GPU 的实验性动态电源管理,对 NFS4.2 和标记为 NFS 的 SELinux 的初步支持,对 Lustre 分布式文件系统的实验性支持,对程序写入的页的详细跟踪,ARM 对 ARM64 的巨大页面支持和 KVM/Xen 支持,SYSV IPC 消息队列可伸缩性改进,低延迟网络轮询机制,压缩交换缓存,新驱动程序和许多小改进。
3.12 2013.11.2 此版本增加了对 Btrfs 中离线重复数据消除的支持,双 GPU 笔记本电脑中的自动 GPU 切换,对 AMD Radeon 图形的性能提升,更好的 RAID
3.13 2014.1.19 此版本包括 nftables,iptables 的后续产品,为高性能固态硬盘设计的块层的改进,英特尔 RAPL 设备功耗上限框架,改进的 squashfs 性能,默认启用的 AMD Radeon 电源管理和自动 Radeon GPU 交换,改进的 NUMA 性能,改进的性能与庞大的网页工作负载,TCP 快速开放默认启用,支持 NFC 支付,支持高可用性无缝冗余协议,新的驱动程序和许多其他小的改进。
3.14 2014.5.30 此版本包括实时任务的截止时间任务调度策略、内存压缩机制现在被认为是稳定的、锁定验证器到用户空间的端口、存储属性(如 Btrfs 中每个 inode 的压缩)的能力、对跟踪事件的触发器支持、对用户空间探测的改进,内核地址空间随机化,TCP 自动合并某些类型的连接,一个新的网络包调度程序来对抗缓冲区膨胀,新的驱动程序和许多其他小的改进。
3.15 2014.6.8 这个版本在有硬盘的系统中恢复得更快,它增加了对原子交叉重命名两个文件的支持,它增加了新的 fallocate(2)模式,允许删除一个文件的范围或将其设置为零,它增加了一个新的文件锁定 API,内存管理更好地适应工作集大小的变化,它提高了 FUSE 写性能,它还增加了支持 zram 中的 LZ4 算法,允许从 32 位 EFI 固件加载 64 位内核,增加了对即将加入英特尔 CPU 的 AVX
3.16 2014.8.3 此版本通过支持动态切换 Nvidia 卡上的时钟频率来提高性能,它还支持将用户空间内存映射到 Intel 设备上的 GPU,XFS 有一个免费的 inode btree 用于更快的 inode 分配,ARM64 内核可以用作 EFI 存根,IPv6 支持 TCP Fast Open,一些 radeon 设备有更好的性能得益于改进的电源管理支持,支持 Intel Cherryview 图形,控制组获得了可选的统一层次结构模式,还添加了新的驱动程序和许多其他小的改进。
3.17 2014.10.5 此版本增加了对 IP 上 USB 设备共享的支持,对 Xbox One 控制器的支持,对 Apple 的 thunderbolt 的支持,一个新的 sealing API,它限制了对共享内存文件描述符的操作,使开发人员可以更容易地进行共享内存编程,支持 perf trace 中的页面故障跟踪,在 kexec 中只支持使用有符号的内核、getrandom()系统调用以生成更安全的随机数以及图形“渲染节点”不再是实验性的。也有新的驱动和许多其他小的改进。
3.18 2014.12.7 此版本增加了对 overlayfs 的支持,它允许在单个装载点组合两个文件系统;支持将用户空间内存映射到 Radeon 设备上的 GPU,一个 bpf()系统调用,它允许上载可附加到事件的类似 bpf 的程序;一个为数据中心优化的 TCP 拥塞算法;Geneve 虚拟化封装,支持在 UDP 上嵌入 IP 协议,通过批处理套接字缓冲区提高网络性能,以及可选的多队列 SCSI 支持。也有新的驱动和许多其他小的改进。
3.19 2015.2.8 此版本增加了对 Btrfs 清理和用 RAID 5 和 6 快速替换设备的支持,对帮助阻止缓冲区溢出的 Intel 内存保护扩展的支持,对 AMD HSA 体系结构的支持,对调试 ARM Coresight 子系统的支持,对 Altera Nios II CPU 体系结构的支持,用于路由和交换卸载的网络基础设施、有助于支持 Beaglebone 或 Raspberry Pi 等消费者开发板上的扩展总线的设备树覆盖、NFSv4.2 中对穿孔和预分配的支持,以及 Android 活页夹已从暂存区移到稳定区。也有新的驱动和许多其他小的改进。
4.0 2015.4.12 此版本增加了对内核代码进行实况补丁的支持,主要目的是在不重启的情况下修复安全更新;DAX,当文件系统在具有持久内存存储的系统上运行时,避免使用内核缓存的方法;KASAN,一种动态内存错误检测器,允许在空闲和越界 bug 之后找到使用;lazytime,relatime 的一种替代方法,它只会在缓存中进行访问、修改和更改时间更新,并有机会写入磁盘;允许 overlayfs 具有多个较低层,支持并行 NFS 服务器体系结构;以及 dm
4.1 2015.6.21 此版本增加了对 Ext4 加密的支持,对管理群集 raid 阵列的实验性支持,一个记录所有对设备的写入并允许重放它们的新设备映射器目标,一个在块设备中打开持久性内存系统中的内存的驱动程序,对禁用多用户支持的支持,支持基于路径标签而不是长网络地址路由数据包的多协议标签交换,允许将 BPF 程序附加到 kprobes 以进行更好的探测,ACPI 支持 ARM64 体系结构,以及允许改进软件 rasterizer 的虚拟 GEM 驱动程序。也有新的驱动和许多其他小的改进。
4.2 2015.8.30 此版本为现代 AMD Radeon 硬件添加了一个新的 amdgpu 驱动程序,一个使用客户机内部主机 GPU 功能的 virtio GPU 驱动程序,新的原子模式设置图形 API 已声明稳定,支持堆叠安全模块,更快和更可扩展的自旋锁实现,cgroup 写回支持,以及重新引入 H8/300 架构。也有新的驱动程序和许多其他小的改进。
4.3 2015.11.1 此版本删除 ext3 文件系统,并保留 Ext4 作为主 Ext 文件系统,Ext4 还可以挂载 ext3 文件系统;它还添加了 userfaultfd(),一个用于处理用户空间中的页面错误的系统调用;membarrier(),一个用于在一组线程上发出内存屏障的系统调用;一个用于限制 cgroup 中的 PID 数量的 PID 控制器,更易于使用的“环境”功能;空闲页跟踪,更精确地跟踪应用程序使用的内存;支持 IPv6 标识符定位器寻址;网络轻量级通道、虚拟路由和转发精简版支持,以及许多其他改进和新驱动程序。
4.4 2016.1.10 此版本增加了对虚拟 GPU 驱动程序中 3D 支持的支持,该驱动程序允许虚拟化客户机中的 3D 硬件加速图形;对直接 I/O 和异步 I/O 的循环设备支持,该支持节省内存并提高性能;对开放通道 ssd 的支持,该设备共享 Flash 转换层的职责在操作系统中,TCP 侦听器处理是完全无锁的,允许更快和更可扩展的 TCP 服务器;MD 层中的日志 RAID5 修复了 RAID 写入漏洞;eBPF 程序现在可以由没有特权的用户运行,它们可以被持久化,perf 还增加了对 eBPF 程序的支持;一个新的 mlock2()系统调用,允许用户请求在页面错误时锁定内存;并阻止轮询支持,以提高高端存储设备的性能。也有新的驱动和许多其他小的改进。
4.5 2016.3.13 此版本添加了一个新的 copy_file_range(2)系统调用,允许在不通过用户空间传输数据的情况下复制文件;现代 Radeon GPU 的实验性 Powerplay 电源管理;Btrfs 可用空间处理的可扩展性改进;支持 GCC 的未定义行为 Sanitizer(
4.6 2016.5.15 此版本增加了对 USB 3.1 SuperSpeedPlus(10 Gbps)的支持、新的分布式文件系统 OrangeFS、更可靠的内存不足处理、对 Intel 内存保护密钥的支持、使应用层协议实现更简单和更快的功能、对 802.1AE MAC 级加密(MACsec)的支持、对 V 版的支持 BATMAN 协议的一个 OCFS2 在线 inode 检查器,支持 cgroup 名称空间,支持 pNFS SCSI 布局,以及许多其他改进和新的驱动程序。
4.7 2016.7.24 此版本增加了对最近 RADON RX 480 GPU 的支持,支持同一目录中的并行路径名查找,一个新的实验“SeeDuuls’频率调速器,它应该比现有的管理者更快和更精确,支持 EFI 'Capsule’升级固件的机制,支持 USB/IP 中的虚拟 USB 设备,使模拟的手机像真正的 USB 设备一样工作;新的安全模块“LoadPin”,确保所有内核模块都从同一个文件系统加载;在 ftrace 接口中创建事件直方图的接口;支持将 BPF 程序附加到内核跟踪点;支持调用链 perf trace 实用程序中的事件,对 Android 的 sync_ 文件围栏机制的稳定支持,以及许多其他改进和新的驱动程序。
4.8 2016.10.2 此版本增加了对在页面缓存中使用透明的大页面的支持,对 eXpress Data Path 的支持,这是一个高性能、可编程的网络数据路径;对 XFS 反向映射的支持,它是几个即将推出的功能的构建块;使用强化的 usercopy 对内存副本进行更严格的检查;支持 IPv6 安全标签(CALIPSO,RFC 5570);GCC 插件支持;virtio vsocks,以方便客户 / 主机通信;新的 Vegas TCP 拥塞控制算法;文档已移动到 reStructuredText 格式,以及许多其他改进和新驱动程序。
4.9 2016.12.11 这个版本增加了对共享扩展数据块(cp——reflink 支持)和 XFS 上的写时拷贝支持;虚拟映射的内核栈使内核更加可靠和安全;一个更高效的 BPF 分析器,使 Linux 部分地支持 Dtrace;基于带宽测量而非数据包丢失的新的可选 BBR
4.10 2017.2.19 此版本增加了对虚拟化 GPU 的支持,一个用于 NUMA 系统中缓存行冲突分析的新“perf c2c”工具,一个用于任务调度详细历史记录的新“perf sched timehist”命令,改进的写回管理应该使系统在重写负载下更具响应性,一个新的混合块轮询方法使用更少 CPU 比纯轮询,支持 ARM 设备,如 Nexus5&6 或 Allwinner A64,允许将 eBPF 程序附加到 cGroup 的功能,一个实验性的 MD RAID5 写回缓存,支持 Intel 缓存分配技术,以及许多其他改进和新驱动程序。
4.11 2017.4.30 此版本增加了对多队列块层中可插入 IO 调度程序框架的支持,在关闭 write hole 的 MD RAID5 实现中的日志支持,对在 SSD 中放置的交换进行更可扩展的交换实现,一个新的 STATx()系统调用,解决了 stat()的缺陷,作为 ftrace 接口前端的新 perf ftrace 工具,对实现 OPAL 存储规范的驱动器的支持,对 RFC7609 中定义的共享内存通信 RDMA 协议的支持,所有 VGA 控制台的持久滚动缓冲区,以及许多新的驱动程序和其他改进。
4.12 2017.7.2 此版本包括一个新的 BFQ I/O 调度程序,它提供了更好的交互体验;它还包括对 Radeon RX Vega 图形卡的初步支持和对 USB Type
4.13 2017.9.3 这个版本增加了 Ext4 对大量目录项的支持,Ext4 对 64k 以下扩展属性的支持,异步 I/O 的改进,后台写入的错误处理的改进,块层的错误处理的改进,内核 TLS 加速,以及许多其他改进。
4.14 2017.11.12 此版本包括支持 x86 硬件中更大的内存限制(128PiB 虚拟地址空间,4PiB 物理地址空间);支持 AMD 安全内存加密;提供更好内核跟踪和更小内核大小的新放卷机;一种 cgroup“线程模式”,允许在一组进程的线程之间分配资源;对 zstd 压缩算法的支持已添加到 Btrfs 和 Squashfs 中;支持从用户内存到套接字的数据零拷贝;更好的异步缓冲 I/O 支持;支持未来 GPU 所需的异构内存管理;在某些情况下更好的 cpufreq 行为;使用 PCID CPU 特性的更长生命周期的 TLB 条目;异步非阻塞缓冲读取;以及许多新的驱动程序和其他改进。
4.15 2018.1.28 除了处理 Meltdown/Spectre 的最新代码外,此版本还包括 amdgpu 驱动程序的模式设置和高级显示功能;改进了对具有 SATA 积极链路电源管理的系统的电源管理支持;开放 RISC
4.16 2018.4.1 除了处理 CPU 安全漏洞的最新代码外,此版本还宣布反向映射和 reflink 功能稳定,membarrier(2)添加了快速支持,SMB3 Direct(RDMA)支持,添加了 x86 jailhouse hypervisor,它能够静态地将多核系统划分为多个所谓的单元,支持 PowerPC 内存保护密钥、AMD 安全加密虚拟化的管理程序部分,以及许多新的驱动程序和其他改进。
4.17 2018.6.3 此版本增加了对 AMD Radeon Vega 12 的支持,并在支持的 AMD Radeon GPU 中默认启用“显示代码”;还添加了内核 TLS 接收路径;更有效的空闲循环,防止 CPU 在 shallow idle states 下花费太多时间;删除了八个未维护的体系结构,另一个,添加了 Andes NDS32 体系结构;XFS 获得了 lazytime 支持;修改了 CPU 负载估计;支持 Intel Cannonlake gpu 并添加了内核内存一致性模型;以及许多新的驱动程序和其他改进。
4.18 2018.8.12 此版本包括新的“可重新启动序列”系统调用,它使编写可扩展的用户空间代码变得更容易;对未授权的装载的支持;旨在使用 BPF 提供 netfilter 功能的 bpfilter 项目的开始;零拷贝 TCP 接收 API;对高性能网络的新 AF
4.19 2018.10.22 此版本还增加了:CAKE network queue management 用于对抗 bufferbloat,其设计初衷是为了从最慢的 ISP 链路和路由器中挤出最大的带宽和延迟;支持保证 cGroup 的最小 I/O 延迟目标;对未来 Wi
4.20 2018.12.23 此版本包括对测量系统负载的新方法的支持;它增加了对未来 AMD Radeon Picasso 和 Raven2 的支持,并启用了对 Radeon Vega20 的非实验性支持;它增加了对 C
5.0 2019.3.3 此版本包括对 energy
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 调度程序获得了一些性能改进;新的 CLONE_PI_DFD 标志允许 CLONE(2)返回 _PIDFD_send_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

由此可见 Linux 内核不断支持新的功能,不断变得更加的复杂。

二、openEuler 特性

华为服务器操作系统内部代号为 EulerOS,有近 10 年的技术积累,已广泛用于华为内部产品配套。同时,华为基于对鲲鹏处理器的深刻理解,在性能、可靠性、安全性等方面 对 EulerOS 进行了深度优化。为促进多样性计算产业发展及生态建设,华为将把服务器领域的技术积累进行开源。2019 年 1 月 7 日华为正式推出了鲲鹏 920 处理器,并开始着力构建鲲鹏生态。华为开发了基于鲲鹏处理器的 TaiShan 服务器,并开源了其内部代号为 EulerOS 的服务器操作系统 [8],社区开源版被命名为“openEuler”。openEuler 是一款开源操作系统。当前 openEuler 内核源于 Linux,支持鲲鹏及其它多种处理器,能够充分释放计算芯片的潜能,是由全球开源贡献者构建的高效、稳定、安全的开源操作系统,适用于数据库、大数据、云计算、人工智能等应用场景。

在之后的连载过程中,我们会逐步分析 openEuler 对 ARM 架构的支持、进程机制、内存管理机制、文件系统、网络通信、虚拟化与容器技术、系统安全技术、设备驱动程序以及初始化过程,整个连载预计 192 期,通过本连载的持续学习,您将对 openEuler 的内核有一个较为细致的了解。为了为读者提供一些实践的机会,本连载在每章之后会有一些对本章知识应用方法的介绍,帮助大家能把知识运用于实际。

三、巨人的肩膀

其实,除了之前提到的 Minix 系统外,Linux 系统本身也是站在巨人的肩膀上,在它发布之前操作系统就已经经过了长期的发展, 下表展现了 Linux 更深的渊源 [7]:

时间 事件
20 世纪 60 年代 MIT 开发分时操作系统(Compatible TIme
1965 年 Bell 实验室、MIT、GE(通用电气公司)准备开发 Multics 系统,为了同时支持 300 个终端访问主机,但是 1969 年失败了。刚开始并没有鼠标、键盘,输入设备只有卡片机,因此如果要测试某个程序,则需要将读卡纸插入卡片机,如果有错误,还需要重新来过。(Multics:Multiplexed Information and Computing Service)
1969 年 Ken Thompson(C 语言之父)利用汇编语言开发了 FIle Server System(Unics,即 Unix 的原型。因为汇编语言对于硬件的依赖性,因此只能针对特定硬件。这么做只是为了移植一款“太空旅游”的游戏。
1973 年 Dennis Ritchie 和 Ken Thompson 发明了 C 语言,而后写出了 Unix 的内核 。其中 90% 的代码是 C 语言写的,10% 的代码用汇编写的,因此移植时只要修改那 10% 的代码即可。
1977 年 Berkeley 大学的 Bill Joy 针对他的机器修改 Unix 源码,称为 BSD(Berkeley Software Distribution),Bill Joy 是 Sun 公司的创始人。
1979 年 Unix 发布 System V,用于个人计算机。
1984 年 因为 Unix 规定:“不能对学生提供源码”,Tanenbaum 老师自己编写兼容于 Unix 的 Minix,用于教学。
1984 年 Stallman 开始 GNU(GNU’s Not Unix)项目,创办 FSF(Free Software Foundation)基金会。自由软件指用户可以对软件做任何修改,甚至再发行,但是始终要挂着 GPL 的版权。产品:GCC、Emacs、Bash Shell、GLIBC。
1985 年 为了避免 GNU 开发的自由软件被其他人用作专利软件,因此创建 GPL(General Public License)版权声明。
1988 年 MIT 为了开发 GUI,成立了 XFree86 的组织。
1991 年 芬兰赫尔辛基大学的研究生 Linus Torvalds 基于 gcc、bash 开发了针对 386 机器的 Lniux 内核。
1994 年 Torvalds 发布 Linux
1996 年 Torvalds 发布 Linux

在上面这张表中,有两个重要的项目对 Linux 的诞生产生了重要的影响,它们是 Unix 系统和 GNU 项目。在下面两篇连载中,我们将简要介绍 Unix 系统和 GNU 项目。下图展示了与 Linux 有关的操作系统发展史:

Linux内核发展史(一):站在巨人的肩膀上

四、结语

本小节中我们简要回顾了 Linux 内核的发展历史。Linux 的成功不但让 Linus 还清了其 DIY 个人计算机的欠款,而且还让他收获了爱情——一位叫朵芙(Tove)的姑娘向他发来邮件,邀请他去约会。不知道 Linus 赴约的时候是否知道,邀请他的这个女生曾六次获得芬兰空手道冠军。“朵芙是第一个通过互联网方式接近我的女人,而我干脆就把她娶回了家。”多年以后,Linus 回忆这一段经历,十分得意 [1]。最后献上一句 Linus 的话与大家共勉 [2]:“做自己喜欢的、并对其他人也有帮助的事情很重要。”


参考文献

[1] http://tech.sina.com.cn/csj/2019-07-26/doc-ihytcitm4728357.shtml?cre=tianyi&mod=pchp&loc=4&r=0&rfunc=43&tj=none&tr=12

[2] https://www.sohu.com/a/251078953_355140

[3] https://baijiahao.baidu.com/s?id=1611958048582090280&wfr=spider&for=pc

[4] https://blog.csdn.net/xiebingsuccess/article/details/91861871

[5] https://www.oschina.net/news/101070/linux-kernel-4-19-released

[6] https://kernelnewbies.org/Linux_4.19

[7] https://www.cnblogs.com/alantu2018/p/8991158.html

[8] http://baijiahao.baidu.com/s?id=1645207733241546990&wfr=spider&for=pc

评论

发布