目录
1.情况概述
系统名称及版本 :NIO OS 2.0
技术栈:QNX+Android
2.业内主流技术选型对比
车载OS的主流系统如图所示:
从主流车企对车载OS的选择上来看,当前QNX、Linux(包含Android)仍是底层操作系统的核心玩家,无论是智能驾驶OS还是智能座舱OS基本都会采用QNX+Linux或者是QNX+Android的组合方式。
车载OS自上个世纪90年代逐渐兴起,尤其在软件定义汽车的大趋势下,车载OS已成为各家企业的必争之地。当前市场参与者众多,其中不乏传统国内外老牌OEM、新势力科技巨头及实力强劲的供应商。
目前,车载OS系统尚未有统一的国际标准,市场主要掌握在几家国外软件企业手中,包括黑莓的QNX、诸多基于Linux的定制操作系统以及基于Android开源项目的操作系统(其本身也基于Linux),而由微软发布的WinCE,随着Linux和Android的冲击,将逐步退出汽车操作系统市场。
当前车载OS市场大概包含着三种产品形式:一是系统厂商原有的基础型车载OS;二是深度修改内核的定制型车载OS;三是OEM基于供应商及自身定制化ROM型车载OS。而新玩家通常以定制型系统和ROM型系统以及超级APP等方式切入车载OS市场。
3. QNX技术概论
QNX
是一个分布式、可扩展、遵从POSIX
规范的类Unix
硬实时操作系统。QNX
为微内核的架构,微内核只提供进程调度、进程间通信、底层网络通信和中断处理四种服务。驱动程序、协议栈、文件系统、应用程序等都在微内核之外内存受保护的安全的用户空间内运行,组件之间能避免相互影响,在遇到故障时也能重启
QNX Neutrino通过两个基本的原则,达到了独一无二的有效性、模块化和简洁性:
- 微内核架构
- 基于消息的进程间通信
优点为启动速度快,且安全性稳定性大大提高。
QNX构架的微内核,和基于消息的进程通信机制保证了即使有一个进程出错,也不会影响内核。
各个服务进程以及应用进程之间通过内部进程通信IPC的方式进行沟通,如下图:
其他安全特性:
1.AP(Adaptive Partitioning)
有时候我们会遇到这样一种问题,某进程里有个bug,调试的时候发现该进程一起来整个一个核的CPU都满了,我们猜测系统内可能是出现了死循环。
自适应分区是QNX的重要特性之一,也是一个在开发调试阶段很好用的一个工具。在软件集成在QNX系统之后,开始优化整个系统之前,为了保护不同的应用群组/应用,独立运行而不被其他应用破坏或干扰,操作系统采用“虚拟墙(virtual walls)”将系统的共享资源(CPU执行时间/内存/存储空间等)以一定的比例划分,以确保每个分区都有一组经过工程设计的资源,每个分区内可以运行一个或多个线程。
分区能够提供:
- 内存保护:提供内存保护,即每个分区是离散的,由内存管理单元控制(MMU);
- 过载保护:提供过载保护,即根据系统设计人员的指定,每个分区都有一段执行时间。
自适应的含义是:在运行时可以改变配置。例如,空闲时间被重新分配给其他调度程序分区,系统会使用一种机制,使得CPU可以在一个时间分区之间临时移动线程。
2. HAM(High Availability Manager)
我们设计的软件系统,在很大的概率上是存在很多漏洞的,那么一旦发送故障,有没有什么办法能快速的使整个软件系统尽快恢复正常状态呢?
(上电重启不是一个系统持续运行的好办法)
QNX提供了一套高可靠性的软件框架,当系统内的部分进行或线程失效时,通过这一套框架来进行系统的处理。这一套框架被称为HAM。其基本思想是:
- 系统隔离:隔离系统中的问题区域,确保系统组件的独立,每个组件(进程)享有完全基于MMU的内存保护;
- 多级恢复:HAM在系统出现问题是可以执行多级恢复,按特定的顺序执行多个操作(这在系统的各个进程间存在各种严格依赖关系的时候非常有效,这样系统就可以把自己恢复到bug前的状态)