QNX简述
文章目录
- 前言
- 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架构
相关文章:

QNX简述
文章目录 前言1. QNX简介1.1 什么是QNX1.2 QNX的应用场景1.3 QNX的优点1.4 QNX的发展史1.5 QNX的商业模式 2. QNX的技术特点3. QNX和其它操作系统的比较3.1 QNX VS LINUX3.2 QNX VS FreeRTOS3.3 QNX VS 鸿蒙操作系统 4. 我的疑问4.1 微内核看起来又稳定又容易调试,为…...

[Llama3] ReAct Prompt 测试实验
ReAct 是一种 LLM 提示和结果处理方法,结合了推理、行动计划和知识源整合,使 LLM 超越其语言模型,并在预测中使用来自现实世界的信息。 ReAct 是推理和行动的结合。 介绍 ReAct 的论文表明它比思维链提示更好。与后者不同的是,Re…...

nodejs 某音douyin网页端搜索接口及x_bogus、a_bogus(包含完整源码)(2024-06-13)
前言 x_bogus或a_bogus算法大概是对数据、ua、时间戳、浏览器的几个指纹进行计算,拿到一个110位大数组,然后转字符,在头部再添加十二位随机字符,再进行魔改的base64加密。 问:抖音的x_bogus、a_bogus值有什么用&#x…...

继承深度剖析
前言 从继承开始就开始C进阶了, 这一块需要好好学习,这块知识很重要, 坑有点多,所以是面试笔试的常客。 基本概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段, 它允许程序员在保持原有…...

使用 Vue 和 Ant Design 实现抽屉效果的模块折叠功能
功能描述: 有两个模块,点击上面模块的收起按钮时,上面的模块可以折叠,下面的模块随之扩展 代码实现: 我们在 Vue 组件中定义两个模块的布局和状态管理: const scrollTableY ref(560); // 表格初始高度…...

Springboot整合SpringCache+redis简化缓存开发
使用步骤: 1.引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId> </dependency><dependency><groupId>org.springframework.boot</groupI…...

关于EOF标识符
EOF的概念 EOF是C语言中表示文件结束的标志符号,通常被定义为-1,它用于指示已到达文件的末尾或输入流的末尾。 EOF的使用 在输入操作中,EOF常常用于判断是否到达了文件末尾或输入流末尾,以便终止读取操作。例如,在使…...

家用洗地机排行榜前十名:2024十大王牌机型精准种草
最近很多人都在问我洗地机相关的问题,不愧是改善家庭生活品质的“三神器”之一。洗地机依靠其清洁力和清洁效率吸引了越来越多的平时需要做家务人群的兴趣,为了解答大家关于洗地机的各种疑问,我把市面上目前非常火爆的洗地机型号和参数都进行…...

【Chrome插件】如何在Chrome插件开发中处理复杂数据结构的存储
最近俺在接触 Chrome 插件开发,需要把一个数据存放到浏览器的存储中。这个数据结构有点复杂,它包含一个 Map 和一个数组。我使用 chrome.storage.local API来存储这个数据,然后在另一个地方获取数据。保存数据的代码并没有报错,但…...

MySQL 保姆级教程(二):使用 MySQL 检索数据
使用 MySQL 3.2 选择数据库 使用数据库: 输入: USE 数据库名;输出: Database changed分析: 不返回任何结果,显示某种形式的通知 例如: 使用 crashcourse 数据库 use crashcourse; 3.3 了解数据库和表 列出所有的数据库: 输入: SHOW DATABASES;输出: --------…...

Sui Bridge在测试网上线并推出10万SUI激励计划
是一种为Sui设计的原生桥接协议,专门用于在Sui与其他网络之间桥接资产和数据。今天,Sui Bridge宣布在测试网上线。作为一种原生协议,Sui Bridge能够在Ethereum和Sui之间轻松且安全地转移ETH、wBTC、USDC和USDT,使其成为Sui基础设施…...

Spring系统学习 - Bean的作用域
bean作用域介绍 Spring框架提供了不同的作用域来管理Bean的生命周期和可见性,这对于控制不同类型的组件和处理并发请求尤其重要。 singleton(默认): 每个Spring IoC容器只有一个bean实例。当容器创建bean后,它会被缓存…...

贪吃蛇双人模式设计(2)
敲上瘾-CSDN博客控制台程序设置_c语言控制程序窗口大小-CSDN博客贪吃蛇小游戏_贪吃蛇小游戏csdn-CSDN博客 一、功能实现: 玩家1使用↓ → ← ↑按键来操作蛇的方向,使用右Shift键加速,右Ctrl键减速玩家2使用W A S D按键来操作蛇的方向&am…...

mysql什么时候不需要建立索引
WHERE 条件,GROUP BY,ORDER BY 里用不到的字段,索引的价值是快速定位,如果起不到定位的字段通常是不需要创建索引的,因为索引是会占用物理空间的。字段中存在大量重复数据,不需要创建索引,比如性…...

热门开源项目推荐:技术与地址概览
随着开源项目的不断兴起,越来越多的优秀项目涌现出来,为开发者们提供了丰富的资源和灵感。在此,我将为大家推荐几个热门的开源项目,并附上它们的开源地址,以供大家参考和了解。 1. TensorFlow 项目简介: …...

Golang的channel
目录 基本使用 channel 数据结构 阻塞的协程队列 协程节点 构建 channel 写流程 读流程 非阻塞与阻塞 closechan(关闭) 基本使用 创建无缓存 channel c : make(chan int) //创建无缓冲的通道 cc : make(chan int,0) //创建无缓冲的通道 c 创建有缓存 channel c : m…...

DIYGW可视化开发工具:微信小程序与多端应用开发的利器
一、引言 随着移动互联网的飞速发展,微信小程序以其轻便、易用和跨平台的特点受到了广泛关注。然而,微信小程序的开发相较于传统的H5网页开发,在UI搭建和交互设计上存在一定的挑战。为了应对这些挑战,开发者们一直在寻找更加高效…...

docker——基础知识
简介 一、什么是虚拟化和容器化 实体计算机叫做物理机,有时也称为寄主机; 虚拟化:将一台计算机虚拟化为多台逻辑计算机; 容器化:一种虚拟化技术,操作系统的虚拟化;将用户空间软件实…...

SAP MMRV/MMPV 物料账期月结月底月初开关
公告:周一至周五每日一更,周六日存稿,请您点“关注”和“在看”,后续推送的时候不至于看不到每日更新内容,感谢。 这是一条刮刮乐,按住全部选中:点关注的人最帅最美,欢迎࿱…...

五分钟看懂如何解决FP独立站的广告投放问题
在数字化时代的浪潮中,跨境电商的独立站成为了商家们的新宠。与传统的电商平台相比,独立站在品牌建设、市场定位以及客户体验上提供了更多的自由度和创新空间。然而,这些独立站尤其是销售FP产品的站点,在广告投放上遇到了重重障碍…...

学习分享-FutureTask
前言 今天再改简历的时候回顾了之前实习用到的FutureTask,借此来回顾一下相关知识。 FutureTask 介绍 FutureTask 是 Java 并发包(java.util.concurrent)中的一个类,用于封装异步任务。它实现了 RunnableFuture 接口࿰…...

Javaweb02-XML概述
第一章 XML概述 1.XML基本概念 什么是xml? **a.**引入的原因:为了解决不同不同语言之间的数据传输的格式不同 **b.**概念:XML是一种可扩展标记语言,适用于不同数据之间的数据交换 **c.**XML文档:通过元素的嵌套&a…...

Linux shell编程基础
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问 Linux 内核的服务。 Shell 脚本&#x…...

2024.6.12 作业 xyt
今日课堂练习:vector构造函数 #include <iostream> #include <vector> using namespace std;void printVector(vector<int> &v) {vector<int>::iterator iter;for(iterv.begin(); iter ! v.end(); iter){cout << *iter <<…...

QTTabBar在重置Internet Explorer后失效
网上常见的办法是: 打开IE浏览器>>设置>>Internet选项>>高级。勾选启用第三方浏览器扩展,重启后生效。 打开IE浏览器-设置–管理加载项,启用QTTabBar。 实际在Win10上使用的时候会遇到点开IE自动跳转到Edge的问题。这时…...

Django之云存储(一)
一、介绍 用户上传的文件以及项目中使用的静态文件,除了保存在本地服务器,还在可以保存在云服务中,比如: 阿里云七牛云(课程选用)亚马逊云等1.1、使用方式 注册账号 七牛云开发者平台 实名认证 创建空间...

推挽与开漏输出
一般来说,微控制器的引脚都会有一个驱动电路,可以配置不同类型的数字和模拟电路接口。输出模式一般会有推挽与开漏输出。 推挽输出 推挽输出(Push-Pull Output),故名思意能输出两种电平,一种是推…...

Sora和快手可灵背后的核心技术 | 3DVAE:通过小批量特征交换实现身体和面部的三维形状变分自动编码器
【摘要】学习3D脸部和身体生成模型中一个解开的、可解释的和结构化的潜在表示仍然是一个开放的问题。当需要控制身份特征时,这个问题尤其突出。在本文中,论文提出了一种直观而有效的自监督方法来训练一个3D形状变分自动编码器(VAE),以鼓励身份特征的解开潜在表示。通过交换不同…...

ArcGIS Pro SDK (三)Addin控件 2 窗格界面类
ArcGIS Pro SDK (三)Addin控件 2 窗格界面类 目录 ArcGIS Pro SDK (三)Addin控件 2 窗格界面类15 ArcGIS Pro 后台选项卡15.1 添加控件15.2 Code15.2.1 选项卡按钮15.2.2 选项卡页 16 ArcGIS Pro 窗体16.1 添加控件16.2 Code 17 A…...

Ubuntu 20.04.6 LTS系统使用命令编辑静态IP地址【笔记】
rootubuntu-machine:/home# cat /etc/issue Ubuntu 20.04.6 LTS \n \l1、切换到root身份 sudo su2、编辑静态IP地址,示例以01-network-manager-all.yaml,个别系统可能是00-network-manager-all.yaml,以安装系统生成的文件为准。 vim /etc/n…...