可以把一个计算机系统简单地分为三层:底层硬件、中间层操作系统、上层应用程序。操作系统位于中间,管理底层的硬件,为上层应用程序提供服务。
几乎所有桌面电脑、嵌入设备都是这种三层模式。但在一些特殊场景,工程师会直接使用裸机(就是没有安装操作系统的计算机),这种往往是对计算机性能要求极其苛刻的场景,苛刻到甚至嫌弃操作系统拖慢了性能,于是干脆不用操作系统自己写代码直接控制硬件。
一个标准的计算机,主要的硬件资源有: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上的各种硬件资源即可。