当前位置: 首页 > 科技观察

Linux内核的五大创新

时间:2023-03-11 23:30:17 科技观察

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