在科技职业,立异这个词简直和革新相同处处众多,所以很难将那些夸大的东西与真实令人振奋的东西区别开来。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 曾经是,现在依然是自由软件的首要力气,鼓励人们把他们的代码、艺术、主意或许只是是他们自己带到一个全球化的、有生产力的、多样化的人类社区中。