正文
维也纳——20年后,实时Linux(PREEMPT_RT)终于——终于——进入了主流内核。Linus Torvalds在欧洲开源峰会上为代码祈福。为什么这是一件大事?让我们从解释实时操作系统(RTOS)是什么以及它有什么好处开始。
1. 什么是RTOS?
RTOS是一种专门的操作系统,旨在精确可靠地处理时间关键任务。与Windows或macOS等通用操作系统不同,RTOS的构建是为了在严格的时间限制内响应事件和处理数据,通常以毫秒或微秒为单位。正如著名的实时Linux开发人员和谷歌工程师Steven Rosedt所说,“实时是最快的最坏情况(Real-time is the fastest worst-case scenario.)。”
他的意思是RTOS的本质特征是它的确定性行为。RTOS保证关键任务将在指定的截止日期内完成。许多人认为RTOS是用于快速流程的。他们不是。速度不是RTOS的重点,可靠性才是。这种可预测性在计时至关重要的应用中至关重要,如工业控制系统、医疗设备和航空航天设备。
目前使用的实时操作系统的一个例子是VxWorks,它被用于美国国家航空航天局的火星探测车,以引导它们,并被用于波音787梦想飞机,以控制航空电子系统,确保飞行控制的实时响应性。另一个例子是QNX Neutrino,它广泛应用于汽车的信息娱乐和高级驾驶员辅助系统,如防抱死制动器。
2. 实时Linux的历史
从即将推出的 Linux 6.12 内核开始,所有发行版都将包含实时 Linux 代码。这意味着 Linux 将很快开始运行在更多的任务关键设备和工业硬件上。这标志着它经历了很长时间的发展才走到今天这一步。
实时Linux的故事始于20世纪90年代末,当时对Linux支持实时应用程序的需求日益增长。最初的工作重点是创建与Linux内核一起运行的独立实时内核。这包括堪萨斯大学的KURT等学术项目;来自米兰大学RTAI;以及新墨西哥矿业与技术学院的RTLinux。
Linux内核高级开发人员Ingo Molnar于2004年开始收集和重塑这些技术,为实时抢占补丁集PREEMPT_RT奠定基础。
这种方法与早期的实时Linux解决方案不同,因为它修改了现有的Linux内核,而不是创建一个单独的实时内核。到2006年,它已经获得了足够的吸引力,Linus Torvalds观察到,“用Linux控制激光器是疯狂的,但这个房间里的每个人都以自己的方式疯狂。所以如果你想用Linux来控制工业焊接激光器,我不反对你使用PREEMPT_RT。”
到2009年,包括Thomas Gleixner、Peter Ziljstra和Rosedt在内的一个内核开发小组已经完成了将之前的原型开发整合到一个单独的树外补丁集中的工作。就在那时,许多公司开始使用这个补丁集来构建需要毫秒精度的硬实时特性的工业系统。
随着项目的推进,它的许多元素都转移到了内核中。Rosedt告诉我,在某种程度上,说实时性现在才出现在Linux中是错误的。多年来,它的许多功能已被引入主流Linux。事实上,其中一些对于你每天使用的Linux来说是必不可少的。
例如,您可能从未听说过“NO_HZ”,它可以降低空闲系统的功耗。NO_HZ使Linux能够在具有数千个CPU的机器上高效运行。Rostedt强调:“你没有意识到Linux因为实时补丁而得到了多大的改进。”。“Linux今天在数据中心运行的唯一原因是我们所做的工作。”
因此,如果没有NO_HZ,Linux就不会在所有的数据中心中运行。这反过来解释了为什么Linux运行云端。我不知道如果没有这种实时贡献,世界会是什么样子,但它肯定不会像今天这样。
实时Linux也以一开始无人想到的方式被证明是有用的。Rostedt回忆道:“早在2005年,我收到了一个实时bug报告,我发送了一个补丁并说,‘嘿,这是修复程序。你能应用它吗?” 那家伙说,‘我不知道我在做什么。’我回答说,‘等等,你不是内核开发者吗?’他回答说:‘我是个吉他手。’“
原来他使用的是早期的实时补丁,因为他使用的是JACK,一种用于低延迟音频连接的声音服务器。他使用它是因为,像大多数音乐家一样,他太穷了,买不起高端设备,所以,Rostedt继续说,“他买了一台便宜的笔记本电脑,装了Linux和JACK,因为有了实时补丁,它就能很好地录音,而不是在写入硬盘时跳过。”
事实证明,许多音乐家都是早期的实时Linux用户,因为它可以让他们以低廉的价格制作高质量的录音。谁知道呢?这些年来进入主流内核的其他实时Linux特性包括:
1. 互斥锁的引入
2. Ftrace,可以说是最重要的Linux调试工具
3. 用户空间应用程序的优先级继承
3. 为什么实时Linux花了这么长时间?
那么,为什么实时Linux现在只在内核中得到完全的支持呢?Rostedt解释说:”事实上,除非我们认为它已经准备好了,否则我们不会把它推上去。“”几乎所有内容在进入主流之前都要重写至少三次,因为我们对内容的要求太高了。“
此外,通往主线的道路不仅仅是技术挑战。政治和认知也发挥了作用。Rostedt回忆道:“一开始,我们甚至不能提到实时。”。“每个人都说,‘哦,我们不在乎实时性。’”
另一个问题是钱。多年来,实时Linux的资金一直不稳定。2015年,Linux基金会建立了实时Linux (RTL)协作项目,以协调围绕PREEMPT_RT主线的工作。
完全集成的最后一个障碍是重新编写内核的print_k函数,这是一个可以追溯到1991年的关键调试工具。Torvalds 特别保护 printk ——他编写了原始代码,并仍将其用于调试。然而,每当调用 printk时,它也会在 Linux 程序中产生硬延迟。这种减速在实时系统中是不可接受的。
Rosedt 解释说:“printk 有一千种技巧来处理一千种不同的情况。每当我们修改 printk 时,它都会破坏其中一种情况。printk 调试的好处在于,你可以精确地知道进程崩溃时的位置。当我非常努力地测试系统时,延迟通常在 30 微秒左右,然后突然增加到 5 毫秒。”这种延迟正是 printk 消息造成的。
经过大量的工作、多次激烈的讨论和几项被拒绝的提案,今年早些时候终于达成了妥协。Torvalds 很高兴,实时 Linux 开发人员也很高兴,printk 用户同样感到满意。最终,实时 Linux 成为了现实。
经过二十年的发展,Linux 实时补丁终于被合并到主流内核中。这一里程碑标志着内核开发人员多年来为 Linux 带来确定性、低延迟性能的工作达到了顶峰。
有了这一补丁,Linux 内核实现了完全可抢占,这使它能够在微秒内对事件做出响应。这种能力对于需要精确计时的应用至关重要,例如工业控制系统、机器人和音频制作。
随着实时补丁的合并,Linux 现在有望成为实时操作系统(RTOS)领域的重要参与者。这不仅是实时制造商的胜利,也是所有 Linux 用户的胜利。
声明:本文转自网络,直接来源于 操作系统与C语言程序设计
版权归原作者所有,进作为学术讨论与研究,如涉及作品版权问题,请及时与我们联系,谢谢!
最后
好了,今天就跟大家分享这么多了,如果你觉得有所收获,一定记得点个赞~
bug菌唯一、永久、免费分享嵌入式技术知识平台~
推荐专辑 点击蓝色字体即可跳转
☞ MCU进阶专辑
☞ 专辑|手撕C语言
☞ 专辑|经验分享