文章目录
- 前言
- 1. QNX简介
- 1.1 什么是QNX
- 1.2 QNX的应用场景
- 1.3 QNX的优点
- 1.4 QNX的发展史
- 1.5 QNX的商业模式
- 2. QNX的技术特点
- 3. QNX和其它操作系统的比较
- 3.1 QNX VS LINUX
- 3.2 QNX VS FreeRTOS
- 3.3 QNX VS 鸿蒙操作系统
- 4. 我的疑问
- 4.1 微内核看起来又稳定又容易调试,为什么LINUX还是采用了宏内核呢?
- 4.2 QNX为什么在汽车领域应用如此广泛
- 4.3 QNX的分布式处理具体是什么?怎么实现的
- 5. 参考链接
前言
今天在看工作机会时,看到很多ROS相关的岗位中会提到,要对QNX/LINUX/ROS熟悉,然后ROS和LINUX都已经知道了,但是对于QNX自己还是很蒙的,于是抽了点时间整理了下,给自己科普下。
由于属于自我科普记录所以不会很深入的探讨,如果大家想要深入了解,可去参考资料链接中寻找对应的资源。
1. QNX简介
1.1 什么是QNX
QNX原名叫做Quick UNIX,是Gordon Bell和Dan Dodge在1980年成立了Quantum Software Systems公司后,根据大学时代的一些设想写出来的。直到AT&T发律师函过来才把名字改成QNX。
(另外说明一下AT&T是美国电话电报公司,也就是发明电话的那个贝尔大神创建的公司,然后在电话的专利过期后,市面上出现了很多的不同电话公司和AT&T产生了竞争,为了保持技术上的领先优势,他们创建了一个实验室,就是后面的科技圣地贝尔实验室。UNIX就是出自贝尔实验室。)
QNX是一种商用的类Unix微内核实时操作系统,遵从POSⅨ规范,其核心仅提供4种服务:进程调度、进程间通信、底层网络通信和中断处理,其进程在独立的地址空间运行。QNX核心非常小巧(QNX4.x大约为12Kb)而且运行速度极快。
其调度策略为:抢占式的、基于优先级的正文切换;
1.2 QNX的应用场景
-
汽车领域
2010年QNX被RIM(黑莓手机母公司)并购的消息传出,才让这个在中国的认知度并不高的“默默无闻”的操作系统厂商被大家所熟知。但在汽车领域,QNX早已是最大的操作系统供应商。据不完全资料显示,QNX在车用市场占有率达到75%,目前全球有超过230种车型使用QNX系统,现在随着汽车上Linux使用的越来越广泛,QNX和LINUX之间达成了一种平衡,QNX利用其精简、安全、稳定的优势在关键领域如汽车仪表上应用的比较广泛。Linux则在影音系统,娱乐等方面应用的比较广泛
-
其它领域
除汽车领域之外,QNX的最大客户订单来源于思科系统,其中高端路由设备几乎全部采用QNX操作系统,因此,网络通信也成为了QNX第二大应用领域。
1.3 QNX的优点
-
容易移植到UNIX/LINUX操作系统上
虽然QNX本身并不属于UNIX,但由于其提供了POSIX的支持,使得多数传统UNIX程序在微量修改(甚至不需修改)后即可在QNX上面编译与运行。 -
微内核结构
内核独立自处于一个被保护的地址空间:驱动程序、网络协议和应用程序处于程序空间中,既做到了安全,又做到了调试驱动程序时无需编译内核,简化的调试。驱动程序、网络协议、文件系统等操作系统模块和内核相互独立,任何模块的故障都不会导致内核的崩溃
-
漏洞极少
由于其代码量少,且没有开源,因此更加安全(由于没有开源,外界接触不到其核心代码的实现就很难找到攻击切入点) -
市场占有率高
据说在2019年时,全球前十大汽车公司中有9家正在使用QNX技术,不过看这个图,我怎么感觉Linux才是以后的主流啊。很明显Linux把其它的操作系统和Wince的份额给占据了。
QNX没怎么变化,有可能QNX这部分是存量的汽车正在使用。
1.4 QNX的发展史
1980年:QNX正式诞生
2004年:被音响设备制造商哈曼公司收购
2010年:被黑莓手机制造商RIM收购,以获取QNX软件公司的车载无线链接技术。此时QNX主要开发汽车、通讯设备所使用的操作系统,并占据的汽车操作系统的半壁江山还要多
1.5 QNX的商业模式
-
授权许可:
QNX 可能通过授权许可的方式,允许其他公司在其产品中使用 QNX 的技术和知识产权。
-
产品销售:
QNX 向客户销售其操作系统和相关软件产品,客户可以根据自己的需求选择不同的版本和功能。
2. QNX的技术特点
微内核架构
在微内核架构中,大部分操作系统服务(如设备驱动,协议栈,文件系统等)都是在用户模式下作为独立的进程运行,而不是在内核模式下运行。运行在用户模式下的进程比内核模式下的进程更有弹性,在用户模式下出现问题的服务可以在不影响其他服务的情况下重新启动,因此,这极大提高了系统整体的稳定性。
实时性
实时操作系统的核心概念就是在特定时间内保证对输入事件做出反应。来自各个高优先级任务的实时请求必须能够在预定的时间内得到满足。这使得QNX非常适合于那些需要实时反馈的、严格时间要求的系统或设备,例如各种实时控制系统,医疗设备,交通运输,航天设备等。
分布式处理
QNX透明网络计算模型的特性允许进程在网络上的任何节点上进行通信,它使得开发人员可以像在一台机器上编程一样进行编程,而不用关心进程具体运行在哪个物理机器上。这种特性为开发复杂的分布式系统、多机器合作的机器人系统、集群系统等提供了极大的便利。
高可靠性
QNX的微内核架构使得系统级的服务成为独立的进程在用户空间中运行,因此,即使一个服务发生故障,也不会导致其他服务甚至整个系统崩溃,这样就极大地提高了系统的可用性和可靠性,使QNX在那些不能容忍系统故障的大规模关键任务中得以广泛应用。
POSIX兼容性
POSIX是一种针对UNIX类操作系统的应用程序接口(API)标准。QNX对POSIX有着很好的支持,这意味着在其他POSIX系统(如Linux或UNIX)上运行的软件,通过一定的移植工作就可在QNX系统上运行,大大简化了软件的开发和移植工作。
多处理器支持
QNX具有对称多处理(SMP)和异构多处理(AMP)的支持,通过这两种方式,QNX可以在多个处理器上均衡地运行程序,提高系统的并发处理能力,使系统性能进一步提升。
支持多种文件系统
QNX支持多种常见的文件系统,包括自身的Power-safe, FAT, NFS, Ext2/3,ISO-9660 等,这使得QNX无论是在内部存储还是网络共享存储的应用上,都有很好的兼容性。
3. QNX和其它操作系统的比较
3.1 QNX VS LINUX
设计哲学:
QNX是一种实时操作系统(RTOS)。它旨在保证精确和确定的延迟响应。它使用微内核架构,这种架构将操作系统的大部分功能(比如设备驱动,文件系统等)作为单独的进程在用户空间运行。Linux则是一种通用的操作系统,广泛应用于服务器,桌面和移动设备等领域。它使用单体内核架构,这种架构将操作系统的各项功能直接内置在内核内部运行。
实时性:
QNX的RTOS设计使得它有更好的实时性,较低的中断延迟和更可预测的任务切换延迟。这使得QNX在需要实时响应的应用,比如工业控制,医疗设备和车辆系统等领域,有更好的表现。虽然Linux也提供了实时内核(RT Linux)以增加实时处理能力,但它的实时性能通常不如专为实时性能设计的QNX。
稳定性和可靠性:
QNX的微内核设计使得系统更加稳定和可靠。因为微内核设计将大部分系统功能运行在用户空间,如果某个功能(如设备驱动)出现问题,它的崩溃不会导致整个系统的崩溃。Linux的单体内核设计虽然在性能上有优势,但是如果内核中的某个部分失败,可能会导致整个系统崩溃。
社区支持和可用软件:
Linux拥有大量的用户、开发者社区和大量的开源软件,它的软件生态系统更丰富。QNX的使用更多的集中在特定的行业领域和嵌入式系统,其用户社区和可用软件资源相对较少。
许可和费用:
Linux是开源的,并使用GPL许可证,企业和个人可以免费使用。QNX并非完全开源,虽然有免费的非商业版本,但是商业使用通常需要付费取得许可
3.2 QNX VS FreeRTOS
设计哲学:
QNX使用的是微内核设计,这种设计将系统的服务和驱动等功能模块化,运行在用户空间上,增强了系统的稳定性。FreeRTOS采用了小内核设计,主要提供了实时任务调度、信号量、队列、时钟、固件升级等基础功能, 是一款轻型的操作系统。
内存管理:
QNX有完整的内存管理支持,包括虚拟内存和物理内存的管理。FreeRTOS往往在资源受限的系统使用,它没有完整的内存管理机制。它使用静态分配和循环缓冲区管理内存。
硬件支持:
QNX支持多种处理器架构,包括ARM,PowerPC,x86以及MIPS等。FreeRTOS主要支持面向微处理器的单片机和微控制器平台, 包括ARM Cortex-M,Microchip PIC,Atmel AVR,Renesas RX等。
性能和实时性:
QNX的优化性能和实时性能适用于复杂应用,如汽车系统,医疗设备和工业自动化。FreeRTOS适合内存受限,对实时性要求不是特别高的简单应用或者嵌入式系统。
商业模式和社区:
QNX并非完全开源,其商业版本需要付费。FreeRTOS是开源的,并使用MIT许可证,可以免费使用。
中断处理:
QNX允许中断处理程序是非实时的,并且在非实时环境中运行。FreeRTOS的中断处理必须是实时的,并且在具有严格时间限制的实时环境中执
3.3 QNX VS 鸿蒙操作系统
QNX 和 鸿蒙操作系统 (HarmonyOS) 都是微内核操作系统(RTOS),它们有着各自的特点和优势。以下是这两种系统的比较:
架构设计:
QNX 是一个成熟的微内核的实时操作系统。微内核设计将操作系统的大部分功能(例如设备驱动程序、文件系统)作为用户模式操作的进程进行处理,提高了系统的稳定性和安全性。此外,由于其高度模块化的特点,增加或删除功能也更为方便。鸿蒙 OS 也是采用微内核设计,并且它还有分布式操作系统的特性。鸿蒙操作系统的微内核设计针对全场景软硬一体的需求,可以用于各种设备,比如手机、车载系统、家电等,而且可以进行跨设备部署。
对开发者的友好度:
QNX 是商业授权的操作系统,除非是大规模的商业性部署,否则入门门槛就是费用,且大多数关于QNX的资料并不容易获取,增加了开发者的学习成本。鸿蒙 OS 从一开始就宣布开源,并且提供了详细的文档和开发者社区的支持,对开发者较为友好。
生态系统:
QNX 生态系统成熟,特别是在汽车行业,很多知名车企的汽车信息娱乐系统(车载infotainment系统)都在使用QNX。与此同时,QNX的安全性和稳定性也让它在医疗、能源等需求严苛的行业中得到了广泛应用。鸿蒙 OS 的生态系统正在建立中,尽管已经有很多华为的设备开始使用鸿蒙操作系统,但在与Android和iOS系统的竞争中,鸿蒙在应用程序的数量与质量上还需要时间去丰富和优化。
4. 我的疑问
4.1 微内核看起来又稳定又容易调试,为什么LINUX还是采用了宏内核呢?
效能:
微内核的设计中,很多系统功能(如设备驱动、文件系统)被转移到用户空间执行,这种设计导致了大量的系统调用和消息传递。这种频繁的上下文切换和消息通信会引发大量的性能开销。而宏内核把大部分的系统服务都放在内核空间执行,效率更高。
复杂性:
用微内核设计的操作系统,需要系统服务在用户空间以进程的形式运行。为了管理这些用户空间的进程,操作系统需要一个复杂的进程通讯和同步机制,这增加了设计和实现的复杂性。
成熟度与适应性:
Linux在90年代初期发布,当时微内核技术还远远没有现在成熟,而宏内核更为成熟并且被广泛使用。此外,Linux作为一个开源操作系统,它的目标是尽可能低成本和快速地支持尽可能多的硬件平台,从这一角度来看,宏内核设计更为适合。
历史问题:
Linux内核的设计者Linus Torvalds在内核设计问题上,对微内核有着明显的偏见。他曾经公开表示,他认为微内核的性能损失无法接受,而且他认为微内核会带来过多的复杂性。
4.2 QNX为什么在汽车领域应用如此广泛
虽然不开源,但是确实是很安全稳定。
4.3 QNX的分布式处理具体是什么?怎么实现的
微内核架构:
QNX Neutrino RTOS基于微内核架构。在这种架构下,内核功能被最小化,大多数服务都像常规进程一样运行。这使得系统更加模块化,便于维护和升级。此外,微内核也使得各个服务可以在不同的处理器上运行,因此非常适合构建分布式系统。
消息传递机制:
QNX系统中的各个进程之间通过发送和接收消息进行通信。这种机制是位置无关的,也就是说,相同的代码可以用来在本地或远程传递消息。当一个进程想要发送消息到另一个进程时,它不需要知道接收进程在哪个处理器上运行,因此代码可以在没有任何修改的情况下在分布式系统中运行。
透明的网络分布式处理(TNDP):
TNDP是QNX系统中的一种特性,它允许一个进程将消息发送到另一个进程,无论这个进程是否在本地系统上运行。TNDP使得分布式处理变得透明,也就是说,开发者可以将这个系统看作是一个单一的整体,而不必关心消息是如何在系统中传递的。
这个TNDP是QNX的商业机密,找不到怎么实现的
支持多协议和多硬件:
QNX支持多种网络协议和硬件平台,从而使得分布式处理可以在广泛的硬件和网络环境中实现。
5. 参考链接
百度百科 QNX
QNX官网
QNX的开源代码
QNX的框架文档
开源时代,QNX凭什么与Linux抗衡?
漫谈QNX架构