硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3941|回复: 5
收起左侧

[ThreadX全家桶] 八卦点有意思的,Nucleus和ThreadX的作者是一个人,都是William E. Lamie

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107128
QQ
发表于 2020-6-1 10:51:44 | 显示全部楼层 |阅读模式
https://www.embedded.com/bill-lamie-story-of-a-man-and-his-real-time-operating-systems/

一个男人的故事及其实时操作系统

    在设计会议上的展位中拜访实时操作系统(RTOS)供应商时,很容易假设所有RTOS都具有相同的基本功能:分配处理器时间,欺骗应用程序以使其相信可以在多个处理器上进行活动,并将应用程序分成多个部分以加快开发速度。

    但是,尽管RTOS解决方案之间有许多明显的相似之处,但在功能上仍存在明显的差异,有些细微的差异和一些重大的差异,反映了多种因素,例如上市时间和投资回报率。造成这些差异的原因是什么:由于对市场影响的响应而导致的随机或进化变化;具体的目标应用要求;RTOS设计师的动机,教育和经验;或所有这些的某种组合?

    作为在嵌入式系统行业成长,生活和呼吸并设计RTOS的人,William“ Bill” Lamie可以很好地为这个问题提供一些有价值的见解。

    自1990年以来,Bill亲自设计,开发和发布了三款成功的商业RTOS产品:Nucleus RTX,Nucleus PLUS和ThreadX,后两种仍活跃在当今市场上。

    现在,他的RTOS在超过25亿个嵌入式设备中运行,包括市场领先的消费类产品,例如Apple iPhone和惠普的喷墨打印机。Bill还发明并实施了抢占阈值,这是一种在管理关键部分时消除不必要的上下文切换的新方法。

    在这个故事中,具有讽刺意味的是,Bill并非一开始就打算建立RTOS。实际上,他甚至没有打算进入计算机科学领域。他的父亲是计算机科学博士学位。兼大学教授,曾在比尔还在读高中时就试图让儿子对计算机产生兴趣,但无济于事。比尔主要对体育感兴趣,并且拒绝了所有使他对计算机迷感兴趣的尝试。他说,当他在圣地亚哥州立大学上大学时,他选修了一门计算机科学课程,以“让我父亲永远摆脱困境”。  

    但是在上这门课程的一周后,比尔爱上了计算机科学,尽管钥匙打孔卡和UNIVAC系统很脏,这在当时是技术最好的。三年级时,他报名参加了一个小型计算机实验室,在那里他使用C编译器在基于Unix的系统上构建程序,然后将S记录下载到Motorola 68000。 Bill获得了一份工作,以帮助开发用于军事应用程序的操作系统。

    几年后,Bill与一家公司签约,后者为AMD29k处理器的RTOS支付了高昂的费用,但是RTOS很好。“可笑的是,这个RTOS甚至在不起作用,负担版税且不包含源代码的情况下确实非常昂贵。” 比尔确信他会做得更好。当然,他不能做得更糟。

    因此,Bill整夜都在尝试修复无法正常运行的RTOS。我通过在运行时将修补程序插入其指令区域来修复操作系统。由于没有源代码,因此我们必须将其复制到RAM并在此处修补计算机代码。一旦让客户的RTOS工作,我就设计并编写了最终成为Nucleus RTX的产品,其主要目标是使其变得简单易用–与我正在使用的现有RTOS形成直接对比。功能上的问题,有一个糟糕的API。

    当他在1990年设计Nucleus RTX时,Bill的意图是为开发人员提供所需的基本功能。他还希望提供源代码,以便他的客户可以扩展RTOS功能,并且因为他不喜欢自己一直在使用的黑盒非源代码RTOS。Bill很大程度上受到他在AMD29k上实现客户端实现的经验的影响,Bill使Nucleus RTX的事情变得简单。在仅满足基线需求时,他避免了诸如动态对象创建,可变长度消息和优先级继承之类的复杂性。开发人员只能在静态定义的C数组中创建所有线程。一旦系统运行,就无法再创建线程。

    当Nucleus RTX准备好供客户使用时,Bill和合伙人Neil Henderson创立了Accelerated Technology,并开始向嵌入式系统市场销售RTOS。Bill最终意识到,他对更广泛的市场需求的无知使他在实时控制的一些基本原理上失去了烙印。处理器的数量和功能不断增长,它们能够解决更大,更复杂的控制问题。摩托罗拉扩展了68K产品线,并推出了ColdFire和PowerPC。日立,富士通,MIPS和德州仪器(TI)等其他公司也推出了新的32位RISC处理器。市场已经发展到需要更大实时控制和端口的设计,这些端口需要利用这些处理器的卓越功能。开发人员希望RTOS具有更多的勇气-能够克服这些日益复杂的挑战。

    为了应对不断变化的市场和对更先进技术的需求,Bill推出了他的下一个实时操作系统,最终命名为Nucleus PLUS。“在Nucleus PLUS中,我包括了动态对象的创建,以及发送可变长度队列消息,固定长度队列消息以及队列消息上各种不同选项的方法。”

    Bill将他的第一个和第二个RTOS解决方案进行了对比,“从功能角度来看,原始的Nucleus RTX更适合于我的老客户无法使用的操作系统以及其应用程序的需求。当我开始研究Nucleus PLUS时,我首先要研究当时公开发布的每个RTOS。”

    通过使用每个RTOS的所有功能列表,Bill提出了一个功能集,试图解决所有问题:“有了Nucleus PLUS,我与RTX完全相反,并在阳光下提供了所有功能。该API涉及数百种服务,而不是原始Nucleus的20-30。虽然我第一次没有真正了解嵌入式市场的各种需求,但现在我在Nucleus RTX上已有几年的经验,我当然知道所有其他产品都有什么。

    “功课得到了回报。1993年发布的Nucleus PLUS证明了比其前身Nucleus RTX更成功的RTOS。我相信Mentor Graphics仍在销售Nucleus,其功能与我1995年离开Accelerated时Nucleus PLUS几乎具有相同的功能。也许只添加了少数API。它已经持续了15年以上,并且已经在许多系统中找到了应用。”

    但是这次比尔已经纠正了。在Nucleus PLUS发行后,他意识到这种方法过大了。所有这些额外的功能不仅导致处理边缘用例的额外开销,而且代码更复杂,更大,更难维护。“发布Nucleus PLUS之后不久,我有两个主要的遗憾。我创建的复杂性与API的数量以及为解决中断延迟而创建的中断体系结构一样。”  

    为了解决API的复杂性,Bill意识到他应该简化设计。比尔没有提供许多处理消息的方法,例如,比尔意识到固定长度的消息本来可以,并且任何可变长度的消息都可以简单地通过指针传递。

    同样,Nucleus PLUS使用分段中断体系结构,将某些ISR处理推迟到线程级别。虽然Bill的第一个RTOS可以从ISR调用线程服务,但它将导致线程级别的中断锁定,从而锁定整个API。为了在Nucleus PLUS中更正此错误,Bill决定他希望使中断保持更长的时间。为此,他对中断处理进行了分段,以便如果ISR与线程级别正在执行的操作发生冲突,则它可能会停止运行。

    在发布Nucleus PLUS之后,Bill意识到了这种方法的缺点:“不幸的是,我的解决方案需要各种开销,并且每个中断都要进行完整的上下文保存和恢复,还需要安排在线程上运行的ISR的一部分。水平。” 尽管Nucleus PLUS是一款非常成功的产品,但Bill意识到了它的缺点并将其归因于人为错误:“我陷入了过度设计的陷阱。我遇到了一个问题,并且对此问题进行了弥补,然后我发现我在另一个方向上走得太远了,但是只有在我们将其推向市场后,我才意识到这一点。”

    多年后的1995年,比尔提出了业务合作伙伴的收购要约,比尔决定出售自己在Accelerated Technology中的股份。这样,Bill为几乎没有开发人员获得机会提供了机会:他可以从头开始,并纠正他早期设计的弱点。在履行了自己与Accelerated Technology之间的竞争协议之后,Bill设定了创建比他的前两个操作系统更好的RTOS的目标,这一次他没有兼容性问题。

    Bill的第三次迷人的经历是 Bill的新公司Express Logic在1997年发布的第三个RTOS ThreadX,用他的话来说,代表了“ Nucleus RTX过于简单和Nucleus PLUS过于复杂的设计之间的平衡点。” Bill总结了他在ThreadX中的三个主要改进,它们减少了API的数量和复杂性,针对90%的用例进行了优化,而不是尝试涵盖所有可能性,并显着更改了中断体系结构以提高效率。Bill感到“这种简化导致了更低的开销,更少的处理器周期以及更易于阅读,易于维护且尺寸更小的代码。”

    处理队列消息的多种方式以及在ISR和线程级别之间划分的中断体系结构已经一去不复返了。Bill的新中断结构依赖于非常短的时间,并且禁用了中断。“在ThreadX中,我意识到我可以在禁用中断的情况下在较小的区域内减少中断等待时间,并且当对内核的ISR调用与中断调用冲突时,可以放弃一些工作。它涉及其中,但最终结果是编写ISR容易得多,开销也大大减少,并且您可以进行优化,这是分段操作系统无法做到的。”

抢占阈值
    Bill知道,几乎每个RTOS都可以在线程级上不运行任何其他程序时关闭调度程序。通常,通过执行一个API调用来停止所有线程调度,直到您再次进行另一个允许调度的API调用为止。

    在实现ThreadX时,Bill意识到“将它做得更有选择性是一种很好的选择”。根据他的经验,应仅阻止运行某类线程或优先级。通过抢占阈值,开发人员可以选择关闭调度的优先级范围,同时仍然允许较高优先级的线程在进行此关键部分的同时中断和抢占。” Bill喜欢它为程序员提供的控件:“与ThreadX开发期间我刚想到的其他操作系统相比,它是一种更精细的关键节机制。事实证明,这是许多嵌入式系统开发人员现在使用的一个很好的好处。”

    当被问到他已经写了Nucleus RTX和Nucleus PLUS对ThreadX的创建有多重要时,Bill说这两者都非常重要。实际上,他又向前迈进了一步,“如果我没有响应圣地亚哥州公告板上3×5索引卡上的广告来帮助编写用于军事应用的操作系统,那我就没有了最初的操作系统经验,甚至从未想过自己编写操作系统。” 这种经验为Nucleus RTX铺平了道路,而后者又导致了Nucleus PLUS。ThreadX代表所有这些经验的总和。

当今对中间件和工具的需求
    尽管Bill指出,自1990年创建Nucleus RTX以来,RTOS的基本定义一直没有改变,但是硬件的变化和市场需求改变了对RTOS技术的期望。

    虽然Bill的所有RTOS都设计为可移植并提供快速的实时性能,但这些目标的影响在1990年之后发生了巨大变化。处理器和工具的数量显着增长,并且客户排队购买现成的端口。而且,由于几年前微处理器比台式机具有更多的功能,因此实时性变得更加严格。电池供电的小工具需要在现场保存电源,这绝对需要过去闻所未闻的节能水平。

    但是1990年比尔(Bill)撰写他的第一个实时操作系统(RTOS)与现在的最大区别是连通性。“当我设计RTX时,实际上必须互相交谈的嵌入式小工具的数量确实很少,” Bill回忆说。“那么90%的客户只需要一个小型的实时操作系统调度程序即可。我什至没有考虑为RTX创建网络堆栈。” Bill认为现在大多数嵌入式设备都需要连接。

    对连接的需求和更短的上市时间为RTOS供应商带​​来了许多变化。根据Bill的说法,当今的RTOS提供者不能仅提供内核。当今的开发人员需要中间件,并可以帮助分析调试器无法提供的实时应用程序。

布丁中的证明在

    空中抛硬币,您会认为自己总是头或尾。事实并非如此。有时,这些令人毛骨悚然的东西会从您的手中掉下来,然后飞来飞去,直到它靠在椅子的腿上。

    事实证明,RTOS技术也是如此。自从Bill从1985年开始实施RTOS以来,发生了一些变化,这肯定可以追溯到古老的智慧。比尔是第一个承认他的三个实时操作系统的人,这肯定代表了从太简单到太复杂的所有人类摆法,最终使他们陷入了中间的“正当”位置。

    市场变化和新客户需求显然会带来一些变化。以前未经考虑的网络堆栈,处理器速度和上市时间之苦使当前的RTOS供应商陷入了前所未有的困境。

    但是,边缘因素是什么?那些个人签名线会在设计师曾经创建的每个软件上留下自己的印记?对于比尔来说,优势来自于KISS原则(保持简单,愚蠢)。他绝对致力于提供核心功能,这是世界上最容易使用的功能。

    “我总是从首先编写用户手册开始。我想从一开始就从用户的角度看问题。我发现,如果我无法向用户解释API的工作方式,那就太复杂了。而且,由于我要描述的是将要发生的事情与已写的内容,因此很容易更改。当您首先编写文档时,可以花大力气使软件易于使用。”

    当然,比尔承认,“轻松”在开发人员眼中。当谈到量化时,Bill承认这实际上只是样式问题。API是否一致?名字好吗?您仅看代码就能知道它的作用吗?API是否很好地表示了基本服务?移植有多容易?“我尽量不要使我的代码过于复杂。”  

    对简单性的关注扩展到业务。Bill认为开发人员应该通过其RTOS来获取源代码,他们不应该支付专利使用费,不需要许可证密钥或软件加密狗,并且需要一个半页的许可协议。

    对于Bill来说,最重要的是一直在开发他想使用的RTOS。他成功了吗?似乎在2.11B设备中使用Mentor Graphic的Nucleus的开发人员以及在7.5亿个设备中使用Express Logic的ThreadX的开发人员都这么认为。
回复

使用道具 举报

6

主题

122

回帖

140

积分

初级会员

积分
140
发表于 2020-6-1 10:59:41 | 显示全部楼层
真是个牛人!
ThreadX没有了解过。
也是在贵论坛了解了还有这么厉害的RTOS。
ThreadX是百分百C写的吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107128
QQ
 楼主| 发表于 2020-6-1 13:14:16 | 显示全部楼层
dy84082666 发表于 2020-6-1 10:59
真是个牛人!
ThreadX没有了解过。
也是在贵论坛了解了还有这么厉害的RTOS。

是的。除了那个port文件
回复

使用道具 举报

74

主题

1202

回帖

1424

积分

至尊会员

积分
1424
发表于 2020-6-1 17:26:55 | 显示全部楼层
《Real-Time Embedded Multithreading Using ThreadX and ARM》(有中文版)
《Real-Time Embedded Multithreading Using ThreadX 2e》
《Real-Time Embedded Multithreading Using ThreadX and MIPS》
据说有这三本书/。。
回复

使用道具 举报

74

主题

1202

回帖

1424

积分

至尊会员

积分
1424
发表于 2020-6-1 17:30:37 | 显示全部楼层
dy84082666 发表于 2020-6-1 10:59
真是个牛人!
ThreadX没有了解过。
也是在贵论坛了解了还有这么厉害的RTOS。

以前都是传说。。。
回复

使用道具 举报

0

主题

68

回帖

68

积分

初级会员

积分
68
发表于 2023-1-29 09:06:02 | 显示全部楼层
NB,看了你这期周报,才发现这个牛人
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-19 22:33 , Processed in 0.181534 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表