在科技行业, 创新这个词几乎和革命一样到处泛滥, 所以很难将那些夸张的东西与真正令人振奋的东西区分开来. Linux 内核被称为创新, 但它又被称为现代计算中最大的奇迹, 一个微观世界中的庞然大物.
撇开营销和模式不谈, Linux 可以说是开源世界中最受欢迎的内核, 它在近 30 年的生命时光当中引入了一些真正的规则改变者.
Cgroups(2.6.24)
早在 2007 年, Paul Menage 和 Rohit Seth 就在内核中添加了深奥的控制组 (cgroups) 功能(cgroups 的当前实现是由 Tejun Heo 重写的). 这种新技术最初被用作一种方法, 从本质上来说, 是为了确保一组特定任务的服务质量.
例如, 你可以为与你的 web 服务相关联的所有任务创建一个控制组定义(cgroup), 为例行备份创建另一个 cgroup , 再为一般操作系统需求创建另一个 cgroup. 然后, 你可以控制每个组的资源百分比, 这样你的操作系统和 Web 服务就可以获得大部分系统资源, 而你的备份进程可以访问剩余的资源.
然而, cgroups 如今变得这么著名是因其作为驱动云技术的角色: 容器. 事实上, cgroups 最初被命名为进程容器. 当它们被 LXC,CoreOS 和 Docker 等项目采用时, 这并不奇怪.
就像闸门打开后一样,"容器" 一词就像成为了 Linux 的同义词一样, 微服务风格的基于云的 "应用" 概念很快成为了规范. 如今, 已经很难摆脱 cgroups 了, 它们是如此普遍. 每一个大规模的基础设施 (如果你运行 Linux 的话, 可能还有你的笔记本电脑) 都以一种合理的方式使用了 cgroups, 这使得你的计算体验比以往任何时候都更加易于管理和灵活.
例如, 你可能已经在电脑上安装了 Flathub 或 Flatpak, 或者你已经在工作中使用 Kubernetes 和 / 或 OpenShift. 不管怎样, 如果 "容器" 这个术语对你来说仍然模糊不清, 则可以 通过 Linux 容器从背后获得对容器的实际理解.
LKMM(4.17)
2018 年, Jade Alglave,Alan Stern,Andrea Parri,Luc Maranget,Paul McKenney 以及其他几个人的辛勤工作的成果被合并到主线 Linux 内核中, 以提供正式的内存模型. Linux 内核内存 [一致性] 模型 (LKMM) 子系统是一套描述 Linux 内存一致性模型的工具, 同时也产生用于测试的用例(特别命名为 klitmus).
随着系统在物理设计上变得越来越复杂(增加了更多的中央处理器内核, 高速缓存和内存增长, 等等), 它们就越难知道哪个中央处理器需要哪个地址空间, 以及何时需要. 例如, 如果 CPU0 需要将数据写入内存中的共享变量, 并且 CPU1 需要读取该值, 那么 CPU0 必须在 CPU1 尝试读取之前写入. 类似地, 如果值是以一种顺序方式写入内存的, 那么期望它们也以同样的顺序被读取, 而不管哪个或哪些 CPU 正在读取.
即使在单个处理器上, 内存管理也需要特定的任务顺序. 像 x = y 这样的简单操作需要处理器从内存中加载 y 的值, 然后将该值存储在 x 中. 在处理器从内存中读取值之前, 是不能将存储在 y 中的值放入 x 变量的. 此外还有地址依赖: x[n] = 6 要求在处理器能够存储值 6 之前加载 n.
LKMM 可以帮助识别和跟踪代码中的这些内存模式. 它部分是通过一个名为 herd 的工具来实现的, 该工具 (以逻辑公式的形式) 定义了内存模型施加的约束, 然后列举了与这些约束一致性的所有可能的结果.
低延迟补丁(2.6.38)
很久以前, 在 2011 年之前, 如果你想在 Linux 上进行多媒体工作, 你必须得有一个低延迟内核. 这主要适用于录音时添加了许多实时效果(如对着麦克风唱歌和添加混音, 以及在耳机中无延迟地听到你的声音). 有些发行版, 如 Ubuntu Studio, 可靠地提供了这样一个内核, 所以实际上这没有什么障碍, 这只不过是当艺术家选择发行版时的一个重要提醒.
然而, 如果你没有使用 Ubuntu Studio, 或者你需要在你的发行版提供之前更新你的内核, 你必须跳转到 rt-patches 网页, 下载内核补丁, 将它们应用到你的内核源代码, 编译, 然后手动安装.
后来, 随着内核版本 2.6.38 的发布, 这个过程结束了. Linux 内核突然像变魔术一样默认内置了低延迟代码(根据基准测试, 延迟至少降低了 10 倍). 不再需要下载补丁, 不用编译. 一切都很顺利, 这都是因为 Mike Galbraith 编写了一个 200 行的小补丁.
对于全世界的开源多媒体艺术家来说, 这是一个规则改变者. 从 2011 年开始事情变得如此美好, 到 2016 年我自己做了一个挑战, 在树莓派 v1(型号 B)上建造一个数字音频工作站(DAW), 结果发现它运行得出奇地好.
RCU(2.5)
RCU, 即读 - 拷贝 - 更新 Read-Copy-Update, 是计算机科学中定义的一个系统, 它允许多个处理器线程从共享内存中读取数据. 它通过延迟更新但也将它们标记为已更新来做到这一点, 以确保数据读取为最新内容. 实际上, 这意味着读取与更新同时发生.
典型的 RCU 循环有点像这样:
1. 删除指向数据的指针, 以防止其他读操作引用它.
2. 等待读操作完成它们的关键处理.
3. 回收内存空间.
将更新阶段划分为删除和回收阶段意味着更新程序会立即执行删除, 同时推迟回收直到所有活动读取完成(通过阻止它们或注册一个回调以便在完成时调用).
虽然 RCU 的概念不是为 Linux 内核发明的, 但它在 Linux 中的实现是该技术的一个定义性的例子.
合作(0.01)
对于 Linux 内核创新的问题的最终答案永远是协作. 你可以说这是一个好时机, 也可以称之为技术优势, 称之为黑客能力, 或者仅仅称之为开源, 但 Linux 内核及其支持的许多项目是协作与合作的光辉范例.
它远远超出了内核范畴. 各行各业的人都对开源做出了贡献, 可以说都是因为 Linux 内核. Linux 曾经是, 现在仍然是自由软件的主要力量, 激励人们把他们的代码, 艺术, 想法或者仅仅是他们自己带到一个全球化的, 有生产力的, 多样化的人类社区中.
来源: http://os.51cto.com/art/201909/603499.htm