可以把一个计算机系统简单地分为三层:底层硬件、中间层操作系统、上层应用程序。操作系统位于中间,管理底层的硬件,为上层应用程序提供服务。
 
    
 
 
 
 
 
 几乎所有桌面电脑、嵌入设备都是这种三层模式。但在一些特殊场景,工程师会直接使用裸机(就是没有安装操作系统的计算机),这种往往是对计算机性能要求极其苛刻的场景,苛刻到甚至嫌弃操作系统拖慢了性能,于是干脆不用操作系统自己写代码直接控制硬件。
 
    
 
 一个标准的计算机,主要的硬件资源有:CPU、内存、持久存储如硬盘、其他设备,那么一个标准的操作系统要管理这些硬件资源,就会有这些功能:
 
 (1)任务调度,进程和线程,管CPU;
 
 (3)存储管理,文件系统,管持久存储;
 
 (4)设备驱动,字节设备、块设备、网络设备,管各种设备。
 
  
 操作系统有很多,大家比较熟悉的有:Windows、Linux、Mac OS、iOS、Android等。我们可以从不同的角度来划分这些操作系统,例如:
 
 1、阵营
 
 两大阵营:Windows阵营、类Unix阵营。
 
 Windows阵营的操作系统都是微软公司的,其系统一般是封闭的,主要有Windows 2000、Windows XP、Windows 7、Windows 10等;
 
 而类Unix阵营的操作系统所属公司有谷歌、苹果等,系统很多是开源的,主要有Unix、Linux、Mac OS、iOS、Android等。
 
 2、设备
 
 两大类:桌面电脑、智能设备。安装在桌面电脑上的操作系统,称为通用操作系统,如Windows、Linux、Mac OS等;安装在手机和其他各种电子设备上的操作系统,称为嵌入式操作系统,如iOS、Android、QNX、uC/OS、VxWorks等。
 
 3、响应时间
 
 两种:实时操作系统(RTOS)和非实时操作系统。所谓实时,是指系统接收到一个输入后,必须在一个很短的时间内(毫秒甚至微秒量级)处理完毕,然后返回一个响应。能严格保证对输入进行实时处理的操作系统,就是实时操作系统;做不到的就是非实时操作系统。
 
 我们熟知的Windows、Linux、Mac OS、iOS、Android这些,都不是实时操作系统;而QNX、uC/OS、VxWorks这些大家没怎么听说的则是实时操作系统。
 
 
 
         汽车上的操作系统,属于嵌入式操作系统和实时操作系统。这两个概念人们往往容易混淆,因为大部分嵌入式操作系统通常也都是实时操作系统,但实际上它们是从两个不同的维度来划分的。iOS、Android就是典型的反例,它们属于嵌入式操作系统,却不是实时操作系统。
 
 
 
  
 
 
  
  汽车的发展过程,可以说是一个“从机械设备逐步向电子设备转变”的过程,原来是机械装置控制的部件,慢慢都变成由智能电子装置来控制了。 
  在现代汽车里,有很多智能电子装置(数以百计),这些电子装置上都会装有操作系统,因此,现代汽车上会有很多个操作系统。 
  
  
  这些操作系统,都属于嵌入式操作系统,因为它们是在嵌入式设备里运行。 
  那么,它们是不是都是实时操作系统呢? 
  不一定: 
  ECU中的必须是实时操作系统,IVI中的可以是非实时操作系统。下面给大家分别介绍。 
  
 
 
  
  
  很多智能电子装置,操控着汽车的关键部件,如发动机、变速箱、转向系统等,统称为电子控制单元ECU。 
  它们是车辆运动和安全防护的控制“大脑”,通过直接向执行机构(如电子阀门、继电器开关、执行马达等)发送指令以控制车辆关键部件的协同工作。 
  常见的ECU包括:EMS发动机电控系统、ABS制动防抱死控制、变速箱控制系统TCU、电子稳定控制ESC、电子动力转向EPS,新能源汽车整车控制VCU、电池管理系统BMS等。 
  
 
 
  
 
 
  
  上图是EMS发动机控制模块的基本示意图,主要由输入回路、模数转换器、微处理器和输出回路组成。 
  其他ECU也类似,不同的只是输入、输出和程序代码。 
  
  
  
  ECU控制车辆的关键部件,不能出现响应不及时的情况,一旦出现延误,会造成严重的后果。 
  因此ECU中的操作系统必须是实时性的嵌入式操作系统。 
  
 
 
  
  鉴于ECU在汽车中的重要性,2003年全球相关厂商联合成立了一个标准联盟组织AUTOSAR(Automotive Open System Architecture),制定了汽车电子软件的标准架构,示意图如下: 
  
 
 
  
 
 
  
  
  (1)硬件之上的Basic software层(BSW); 
  
  
  (2)BSW层之上的Runtime environment层(RTE); 
  
  
 
 
  
  
  
 
 
  
 
 
  
  嵌入式设备通常做的很小,里面也没有大容量的硬盘和内存,因此其操作系统代码一般都比较小、比较简单(与通用操作系统Windows、Linux等相比)。 
  而为了保证实时性,其任务必须是分优先级的(重要的任务优先级高,优先级高的任务先执行),其任务调度必须是可抢占的(已经有低优先级的任务在执行,高优先级的任务可以抢占CPU)。 
  
  
  AUTOSAR中的操作系统是怎样的呢? 
  非常简单: 
  
  
  (1)任务调度,没有进程和线程,只有Task和中断; 
  
  
  (2)内存管理,几乎没有,操作系统中只有内存访问保护功能, 
  没有虚拟地址概念。只有一个物理地址空间,划分成若干个区域,在编译的时候由编译器将代码、数据、堆栈、变量和常量、寄存器、I/O端口等映射到不同区域; 
  
  
  (3)存储管理,不属于操作系统。 
  没有文件系统,只有对片内、片外的EEPROM和FLASH的管理; 
  
  
 
 
  
  
  还有一类智能电子装置,如仪表、娱乐音响、导航系统、抬头显示、车载通信、无线上网等,这类装置不直接参与汽车行驶的控制决策,不会对行驶性能和安全产生影响,一般统称为车载娱乐信息系统IVI。 
  
  
  IVI上的操作系统,显然对实时性要求没那么高,可以使用Android、Linux等非实时操作系统,也可以使用QNX、VxWorks等实时操作系统。 
  
 
 
  
 
 
  
  智能网联汽车的特点是增加更多的传感器(高清摄像头、激光雷达、毫米波雷达等),需要采集、处理、共享海量数据,这样就带来两个挑战: 
  1、控制器芯片的处理能力; 
  2、信息安全。 
  
  
  针对这些挑战,人们对汽车电子电气架构做了改进,提出域控制器DCU的概念,将整车划分为动力总成、车辆安全、车身电子、智能座舱和智能驾驶等几个域,利用处理能力更强的多核CPU/GPU芯片相对集中地控制每个域。 
  
  
  这样做能简化汽车电子网络拓扑结构,但是也带来新问题: 
  DCU会将一些属于不同汽车安全等级(ASIL)的系统融合在一起处理,而从安全角度应该将它们进行物理上的隔离。 
  为了解决这个问题,人们又引入了IT技术中常用的虚拟机概念,通过虚拟机技术在一块控制器芯片里可以装上多个操作系统,每个操作系统负责控制自己的功能模块,互不干涉。 
  这样既能充分发挥芯片的处理能力,又能保证符合安全要求。 
  
 
 
  
 
 
  
  上图左边是虚拟机技术的示意图,右边是容器技术的示意图。 
  实际上,在IT行业,容器技术现在使用得更广泛,原因在于容器技术少了一层Guest OS,成本更低,性能更好。 
  
  
  但是汽车行业为什么不使用容器技术而使用虚拟机技术呢? 
  原因可能有两点: 
  
  
  1、容器技术隔离性差些,上层的不同应用共享底层的同一个操作系统内核,还是存在互相干扰的可能; 
  
  
  2、容器技术的隔离,主要依赖底层操作系统提供的相关功能来实现的,Linux操作系统自带这种隔离功能,因此基于Linux的容器技术在IT行业被广泛应用; 
  而用于汽车ECU、DCU芯片上的实时操作系统还不具备这种能力。 
  
  
  采用虚拟机技术,不用对底层操作系统做改造,只需要再开发出一个虚拟机引擎,虚拟出ECU/DCU上的各种硬件资源即可。 
   
  
 
 
