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架构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/26625.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【讯为Linux驱动开发】6.自旋锁spinlock

【自旋锁】 线程A获取自旋锁后,B假如想获取自旋锁则只能原地等待,仍占用CPU,不会休眠,直到获取自旋锁为止。 【函数】 DEFINE SINLOCK(spinlock t lock) 定义并初始化一个变量int spin lock init(spinlock t*lock) 初始化自…

技术速递|Java on Azure Tooling 5月更新 - Java 对 Azure 容器应用程序的入门指南支持

作者:Jialuo Gan 排版:Alan Wang 大家好,欢迎阅读 Java on Azure 工具 5 月份更新。在本次更新中,我们将介绍 Java 在 Azure 上的容器应用程序的入门指南。希望您喜欢这些更新,并享受使用 Azure 工具包的流畅体验。请下…

《pvz植物大战僵尸杂交版》V2.0.88整合包火爆全网,支持安卓、ios、电脑等!

今天来给大家安利一款让人欲罢不能的游戏——《植物大战僵尸杂交版》2.0.88版。这可不是普通的植物大战僵尸,它可是席卷了B站,火爆全网的存在! 先说说这个版本,它可是网络上现存最全的植物大战僵尸杂交版整合包。里面不仅有修改工…

wms海外仓系统什么价格?中小海外仓怎么选到高性价比wms系统

随着海外仓业务复杂度的逐渐提升,现在中小海外仓对wms海外仓系统的需求也越来越强烈。但是对于预算有限的中小海外仓企业来说,怎么才能选到性价比比较高的wms海外仓系统呢? 今天我们就来聊一下这个问题,希望对有类似需求的海外仓…

Git基础指令(图文详解)

目录 Git概述Git基础指令Linux系统操作指令 Git软件指令1.配置信息2.名称和邮箱3.初始化版本库4.向版本库中添加文件5.修改版本库文件6. 查看版本库文件历史 7.删除文件8.恢复历史文件 Git概述 Git基础指令 Linux系统操作指令 Git是一款免费、开源的分布式版本控制系统&…

github ssh key的SHA256是什么

github ssh key的SHA256是什么 怎么知道github上自己的公钥指纹和本地的公钥是否一致? 计算方法如下: cat .ssh/id_rsa.pub |awk { print $2 } | # Only the actual key data without prefix or commentsbase64 -d | # decode as base64s…

【课程总结】Day8(下):计算机视觉基础入门

前言 数据结构 在人工智能领域,机器可以处理的数据类型如上图,大约可以分为以上类别。其中较为常用的数据类别有: 表格类数据 数据特点: 成行成列:一行一个样本,一列一个特征特征之间相互独立&#xff0…

kotlin 中的数字

以下均来自官方文档: 一、整数类型 1、kotlin中内置的整数类型,有四种不同大小的类型: 类型存储大小(比特数)最小值最大值Byte8-128127Short16-3276832767Int32-2,147,483,648 (-231)2,147,483,647 (231 - 1)Long64…

现货黄金交易多少克一手?国内外情况大不同

如果大家想参与国际市场上的现货黄金交易,就应该从它交易细则的入手,先彻底认识这个品种,因为它是来自欧美市场的投资方式,所以无论是从合约的计的单位,计价的货币,交易的具体时间,以及买卖过程…

【Python/Pytorch - 网络模型】-- 手把手搭建3D VGG感知损失模型

文章目录 文章目录 00 写在前面01 基于Pytorch版本的3D VGG代码02 论文下载 00 写在前面 感知损失:对于提升图片的肉眼可见细节,效果十分明显;对于一些指标如(SSIM、PSNR)这些,效果不明显。 在01中&…

springboot集成swagger、knife4j

1. 集成swagger2 1.1 引入依赖 <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</vers…

【Three.js】知识梳理十九:线性雾(Fog)、指数雾(FogExp2)和范围雾(RangeFog)

雾是3D图形中创建深度和氛围的重要工具。Three.js提供了多种类型的雾&#xff1a;线性雾&#xff08;THREE.Fog&#xff09;&#xff0c;指数雾&#xff08;THREE.FogExp2&#xff09;和范围雾&#xff08;RangeFog&#xff09;。本文将探讨这三种类型的雾&#xff0c;通过代码…

【大数据】Spark使用大全:下载安装、RDD操作、JAVA编程、SQL

目录 前言 1.下载安装 2.RDD操作 3.JAVA编程示例 4.Spark SQL 前言 本文是作者大数据系列中的一文&#xff0c;专栏地址&#xff1a; https://blog.csdn.net/joker_zjn/category_12631789.html?spm1001.2014.3001.5482 该系列会成体系的聊一聊整个大数据的技术栈&…

stable-diffusion 3 体验部署流程(ComfyUI)

环境准备 下载及简介 git clone https://huggingface.co/stabilityai/stable-diffusion-3-medium SD3 checkpoints&#xff1a; sd3_medium_incl_clips.safetensors (5.5GB)sd3_medium_incl_clips_t5xxlfp8.safetensors (10.1GB)sd3_medium.safetensors (4.3GB) 前两个可以…

SAP OB52 财务账期月结月底月初开关

公告&#xff1a;周一至周五每日一更&#xff0c;周六日存稿&#xff0c;请您点“关注”和“在看”&#xff0c;后续推送的时候不至于看不到每日更新内容&#xff0c;感谢。 这是一条刮刮乐&#xff0c;按住全部选中&#xff1a;点关注的人最帅最美&#xff0c;欢迎&#xff1…

vuInhub靶场实战系列--Kioptrix Level #4

免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关。 目录 免责声明前言一、环境配置1.1 靶场信息1.2 靶场配置 二、信息收集2.1 主机发现2.1.1 netdiscover2.1.2 arp-scan主机扫描 2.2 端口扫描2.3 指纹识别2.4 目…

nodejs——原型链污染

一、引用类型皆为对象 原型和原型链都是来源于对象而服务于对象的概念&#xff0c;所以我们要先明确一点&#xff1a; JavaScript中一切引用类型都是对象&#xff0c;对象就是属性的集合。 Array类型、Function类型、Object类型、Date类型、RegExp类型等都是引用类型。 也就…

Vue22-v-model收集表单数据

一、效果图 二、代码 2-1、HTML代码 2-2、vue代码 1、v-model单选框的收集信息 v-model&#xff1a;默认收集的就是元素中的value值。 单选框添加默认值&#xff1a; 2、v-model多选框的收集信息 ①、多个选择的多选 注意&#xff1a; 此处的hobby要是数组&#xff01;&…

【深度学习基础】激活函数:Tanh、Sigmoid 和 Softmax

激活函数是深度学习模型中不可或缺的一部分&#xff0c;它们赋予神经网络强大的非线性变换能力&#xff0c;使其能够拟合复杂的函数关系。在这篇博文中&#xff0c;我们将探讨三种常见的激活函数&#xff1a;Tanh、Sigmoid 和 Softmax&#xff0c;并提供一些记忆它们的技巧。 1…

C++基础知识(八:STL标准库 deque )

deque在C的STL(Standard Template Library)中是一个非常强大的容器&#xff0c;它的全称是“Double-Ended Queue”&#xff0c;即双端队列。deque结合了数组和链表的优点&#xff0c;提供了在两端进行高效插入和删除操作的能力&#xff0c;同时保持了随机访问的特性。 双端队列…