美国版苹果手机id退出登录苹果美国id无服务怎么回事软件服务收费:自动驾驶+娱乐服务均可收费,娱乐服务收费类似于流媒体会员制服务在汽车行业的的延申,自动驾驶功能普及后将迎来进一步爆发。
自动驾驶+OTA:特斯拉订阅更高级别的自动驾驶功能需要花费5.6万元,具体功能包括自主泊车、自动驾驶辅助变道、自动辅助导航驾驶。即使买车时不购买,也支持交付后购买。
娱乐服务+OTA:随着自动驾驶功能的增加、驾驶性能及续航里程的优化,特斯拉将可能通过OTA从用户中持续收取更新服务费,真正实现通过软件服务变现的商业模式。在2019年下半年特斯拉OTA V10.0更新后,特斯拉开始对部分功能收费,车主需要额外付费来解锁卫星视图导航系统和实时交通数据等功能,新加载的功能如Netflix和youtube等平台和游戏也属于额外付费的内容。
汽车软件市场:预计从2020年340亿美金涨至2030年的840亿美金,未来十年CAGR复合增速达到9%。
ADAS and AD(辅助及自动驾驶软件)2020年全球市场150亿美金,未来十年复合增速11%。
单车软件价值量变化:L1级车提升,L3-L5级单车价值量下降,但市场受益渗透率提高:
L5的车:2025年单车价值量1.82万美金,2030年降至0.23万美金
软件体现汽车之间的差异,预计2030年软件将占汽车内构成本的30% 。智能化是未来品牌差异化的核心要素,主要是通过增加软件功能来实现。如Tesla最近通过OTA升级发布的“哨兵模式”和“狗狗模式”。根据麦肯锡的报告,2017年软件能占到一辆D级车或说一辆大型车全部内构的10%(约1200美元),而这一占比的增速将达到每年11%的复合增长率,在2030年将达到30%(约5200美元)。目前“软件定义汽车”已成为汽车行业共识,未来软件将占汽车创新的90%。
原有Tier1的软件能力释放到了第三方软件服务商。原有中控屏、仪表盘为软硬一体,由Tier1掌握,厂商无法修改代码。软硬解耦后原有Tier1的软件能力被释放,车厂将更多通过第三方软件服务商来控制供应链。
传统合作模式 2:车厂—Tier 1 —软件服务商(外包)—智能座舱;
新合作模式 3:车厂—Tier 1 /第三方软件服务商—智能座舱,如上汽、通用;
新合作模式4:车厂、第三方软件服务商—操作系统— Tier 1 —智能座舱,广汽研究院与中科创达合作
成立智能汽车软件技术联合创新中心,合作研发新一代的智能网联汽车平台,还包括网联信息娱乐系统、智能座舱、智能交互、安全驾驶等。
广汽研究院:广汽集团的技术管理部门和研发体系枢纽,授权范围内相对独立运营,主要负责广汽新产品、新技术的规划和重大研发工作具体实施,重点打造广汽的智驾互联生态系统;
根据Strategy Analytics数据,2015年瑞萨、恩智浦合计占据整个车机芯片市场份额的六成以上,其中瑞萨在驾驶舱、仪表份额达到47%、44%。一方面,创达最熟悉手机芯片厂商所出的芯片,在高通芯片底层的虚拟化全球领先;另一方面,2017年原有软件服务巨头出于惯性,依然更多选择于瑞萨合作,当时,中科创达是少数把高通平台作为核心推广的第三方软件服务商。
2018年Luxoft汽车业务收入为1.59亿美元,同比增长43%,长期维持40%左右的增速。
汽车是GlobalLogic增长最快的垂直领域,2014-2018年收入比例从零增长到15%,2018年达到接近1亿美金,同比增长40%。
Mobica汽车业务收入占比相对较低,在进入智能汽车座舱后,选了联发科作为合作伙伴。
操作系统是硬件资源和软件应用之间的桥梁,对于复杂的底层硬件资源而言,软件开发者必须通过操作系统的指令和接口进行调用。通过操作系统可实现以下几方面的功能。
◆ 合理地组织计算机的工作进程,控制程序的执行并在程序执行的过程中向程序提供各种各样的服务功能;
◆ 用各种各样的方式使得用户能够非常灵活、方便地使用计算机,采用各种各样的技术使整个计算机系统能够高效率地运行。
操作系统管理硬件资源,控制程序运行,改善人机界面,和为应用程序提供支持的系统软件。是为满足用户使用计算机过程中提高资源利用效率、增强计算机系统性能的产物。在不同时代的需求和技术发展与制约下,操作系统呈现出不同形态,可以确认的是,其会一直发在时代需求和技术制约间寻找平衡。
操作系统OS自诞生之初,就是硬件设备向更复杂阶段发展必然产物。早期硬件资源少,产品功能简单,一体裸机也可以实现用户需求。而随着硬件复杂度的提升,和对硬件资源利用效率的提升,操作系统逐渐成为硬件和使用者之间的必需品。实时操作系统RTOS的出现是为了更容易实现实时多任务编程,标准化通用操作系统的出现则是为了多用户动态装载应用。历史经验告诉我们,操作系统不仅仅带来技术上的进步,同时也是产业分工和商业模式的演化,不单单是技术问题。
Linux主要由内核、shell、文件系统和应用程序四部分组成。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。正是受益于Linux内核的开放性和自定义程度高,相比Windows 等闭源系统,开发者使用计算机资源时具有更高自由度,因此在服务器及嵌入式等开发者使用居多的场景下拥有很高的市场占有率。
而根据IDC于2017年公布的数据,全球服务器操作系统(免费+付费)中有约68%采用的是Linux服务器操作系统。而根据2016年的市场调研结果,嵌入式Linux和基于Linux的Android占有嵌入式系统市场的74%。
尽管Linux系统在桌面端远远落后于Windows,但其开源模式却为其他系统生态提供机会。以Linux为内核的安卓系统在移动端大放异彩。由ARM公司主导的硬件开放和由谷歌公司主导的软件开源模式是移动时代Android+ARM联盟建立的成因。相比于联系紧密的Wintel联盟,Android+ARM的结构要松散的多。Android由开源项目AOSP(Android Open-Source Project)和谷歌提供的GMS(Google Mobile Service)服务组成。ARM作为芯片IP授权方,带动了中下游fabless和foundary厂商的繁荣。
早期嵌入式开发中并没有操作系统的概念,而是直接在裸机上写简单的轮询系统或前后台系统。但裸机系统很难保证程序运行的实时性,因此随着硬件水平的提升,MCU的Flash和RAM越来越满足操作系统的占用,所以由嵌入式系统带来的开发模块化工具和实时响应的优势反而简化了在中大型项目开发中的难度,因此嵌入式实时系统逐渐取代裸机系统成为趋势
结构是操作系统的基础,它定义了硬件与软件的界限、内核与操作系统其它组件(文件、网络、GUI等)的组织关系、系统与应用的接口。结构是确保系统可靠性、灵活性、可移植性、可扩展性的关键。目前嵌入式操作系统主要采用分层和模块化相结合的结构以及微内核结构。
嵌入式操作系统最初应用于单片机,以可编程控制器的形式出现。从无操作系统支持的裸机,发展到高度模块化和拓展性的实时操作系统(RTOS)。文件和目录管理、设备管理、多任务、网络、图形用户界面(GUI)等功能,并提供了大量的应用程序接口(API),使得软件开发的难度不断下降,自由度不断上升。作为软硬件资源的控制中心,以尽量合理有效的方式解决多用户共享下的资源。大部分的嵌入式系统都具有软实时性,可移植于多种处理器,并且基于优先级设计。总结而言,嵌入式操作系统具有多种优点,尤其适用于成本较低、计算资源不多、对实时性有要求的场景。
μC/OS-II是一个抢占式实时多任务内核。它是用ANSI标准的C语言编写的,包含一小部分汇编语言代码,使之可以提供给不同架构的微处理器使用。μC/OS应用领域包括:航空业、医疗器械、网络设备以及工业机器人等。μC/OS-II 具有可移植、可固化和可裁剪的优点。μC/OSII内核的主要功能是任务的调度和切换,采用抢占式调度策略,保证任务的实时性,能够管理多达64个任务。
VxWorks 是美国Wind River System 公司(简称WRS,风河公司)于1983年推出的嵌入式实时操作系统,凭借其运行在目标机上的稳定性能、卓越的实时性和商业公司背后专业的支持服务而广泛应用于通信、军事、航空航天等对高精尖技术及对实时性要求极高的领域。在近40年的产品迭代升级中,VxWorks产品已经走过了互联网、多核设备等普及的过程,并正在逐渐向物联网技术转变
QNX是一 款微内核、 嵌入式、 非开源 、安全实时 的操作系统。QNX系统是 系统是 由加拿 由加拿 大 QSSL公司开发 公司开发 ;于 2004年哈曼国际将 年哈曼国际将 年哈曼国际将 QNX系统收入囊中 系统收入囊中 系统收入囊中 ;于 2010年 BlackBerry母公司 RIM又从哈曼国际手中收购 从哈曼国际手中收购 从哈曼国际手中收购 从哈曼国际手中收购 QNX系统 。
其微内核带来的程序运行特点值得一提。微内核将系统分为小的功能模块,只在内核中保留最核心的调度等功能,这也意味着大部分的系统级服务都被拆分到了内核外,以进程间通信( IPC, Inter-Process Communication )形式执行。IPC是微内核系统消耗最大的一部分,存在很大的改进空间,是目前阶段的技术难点所在,尤其是对于规模较大的内核而言。
单一内核结构将内核模块、驱动和用户程序都放到内核空间中,直接通过物料地址来访问内存,具有最快的访问速度和信息传递,缺点是如果用户程序出现溢出或者错误指针,可能会破坏其他程序,导致系统崩溃,代表是vxworks5.5及以前的版本。
宏内核架构将用户程序放在用户空间中,内核和驱动程序以核心形式运行,这种避免了应用程序对于内核的破坏,同时保留了较快的访问速度,Linux,Windows均属于这一类型,在嵌入式系统应用中,芯片结构更加多样化,外围接口更加复杂,驱动程序一般都需要自己开发,在宏内核架构中,如果某个驱动程序出现故障,这可能会导致整个系统崩溃,因此该架构需要reset命令重启操作系统,而在安全性比较高的场合,重启是不允许的,因此,车辆核心安全控制领用一般也不用此架构。
微内核是指为了提高可靠性,将操作系统分成小的模块,只有一个微内核模块在核心态运行,其他功能模块作为服务进程在用户空间运行,由于把设备驱动程序和文件系统也作为普通用户进程运行,当出现故障时,虽然模块本身崩溃,但不会使整个系统死机。微内核系统具有清晰的模块化结构,只要接口符合规范,操作系统可以很方便的添加和删除模块,系统具有很好的灵活性和扩展性。此外,微内核结构的内核非常小,一般只有几十到几百kb,只保留了一些最基本的功能,包括任务管理,任务调度,任务间通信等。
QNX是典型的微内核结构操作系统, 有一个非常小的微内核Neutrino 约为12K。内核提供了中断处理,定时器处理,线程的建立与调度等任务。另外有一个进程process manager来负责进程的建立和地址空间管理的功能, 与内核运行在内核空间。其他功能模块运行在用户空间。QNX对所有的进程均提供了内存保护, 包括文件系统, 资源管理器, 应用程序等。QNX的结构如图2-1。
为了满足不同应用的需要,在多个线程具有相同优先级并处于就绪状态时,QNX提供了三种调度方法:先进先出(First-In First-Out, FIFO) 调度、轮转(RoundRobin, RR) 调度和自适应调度。
(1)先进先出调度在先进先出的调度方式下,一个线程直到它被更高优先级的线程抢占或者运行结束,才会交出控制权。相同优先级的任务不能打断该线程。当线程完成后,内核会去寻找处于就绪状态相同优先级的线程,如果不存在, 则寻找低优先级线程。FIFO调度本身实现了数据的互斥, 在线程运行的时间内其他相同优先级线程无法进行资源抢占。
(2)时间片轮转调度在时间片轮转(RR)调度下,一个线程放弃内核有三种情况:运行结束,被更高级优先级抢占或者消耗完自己的时间片。时间片是线程运行的最小时间单元,由操作系统预先设定。当时间片用完时,该线程自动交出控制权, 之后内核会按照和FIFO相同的方式搜索下一个工作线程。轮转调度可以防止某一个任务连续占用太多的资源,而导致其他线程信息得不到及时处理。缺点是轮转调度会增大由于任务切换而导致的开销。
(3)自适应调度自适应调度是一种可实现自我优先级调整的调度方式。正在运行的线程放弃CPU的情况与轮转调度相同。当线程用完自己的时间片后,如果没有高优先级或者同优先级的任务抢占,其优先级减1,即优先级衰减。当优先级衰减后,即使再次用完时间片,其优先级不会发生变化。当其被更高优先级抢占后,恢复至原来的优先级。自适应调度主要应用在计算量较大的线程中,为避免频繁的数据切换,需要较高的优先级,同时为了避免太长时间占用CPU, 所以采用优先级衰减的方式来保持对其他任务的响应能力。
在QNX系统下, 消息传递的体系结构可以简单的描述为:服务器建立一个接收数据的通道,客户端连接到该通道并发送服务请求,服务器接收到请求后进行数据处理,将数据处理结果返回客户端。
为防止死锁,信息的传递是单向的,按照优先级顺序从低向高发送,两个线程不相互发送。为防止优先级倒置现象的发生,消息传递采用客户驱动优先级机制,当某个客户端向服务器发送服务请求后,服务器优先级与客户端一致,直到服务完成之后,服务器恢复原来的优先级,当更高优先级的线程要求服务时,可以中断该线程而进行高优先级的服务,防止了低优先级线程对资源的占用。
Linux是一款开源、功能更强大的操作系统。Linux具有内核紧凑高效等特点, 可以充分发挥硬件的性能。它与QNX相比最大优势在于开源, 具有很强的定制开发灵活度。我们通常提的基于Linux开发新的操作系统是指基于Linux Kernel进一步集成中间件、桌面环境和部分应用软件。Linux功能较QNX更强大, 组件也更为复杂, 因此Linux常用于支持更多应用和接口的信息娱乐系统中。协会或联盟致力于将开源Linux操作系统推广至汽车领域中, 典型代表如AGL、GENI VI.
AGL开源项目致力于建立一个基于Linux的联网汽车内部使用的开源平台。2014年, Linux基金会发布了开源AGL(Automotive Grade Linux) 规范1.0版本, 它是首个开放式车载信息娱乐(IVI) 软件规范。其中70%的代码(包括操作系统、中间件和应用程序框架)已编写完成,车企可以专注于剩下的30%个性化定制开发,以保证不同品牌的差异化, 而且AGL不收取任何许可费。
随着自动驾驶的发展, AGL已经不只局限于ⅣVI领域, 未来将向仪表盘、座舱域、自动驾驶等领域延伸, 现阶段它仍未通过ISO 26262 标准。从其整车企业成员来看, AGL早期主要为丰田、本田、日产等日系厂商,随着2019年大众、现代汽车的加入, AGL势力规模逐渐壮大。截至2020年3月, 国内已有中国移动、上汽集团、德赛西威、中科创达等公司加入了AGL, 成员总数超过150个。
奥迪之所以选择三星而放弃高通,可能有成本的因素,但最主要还得从软件说起。新一代奥迪座舱系统最大的改动就是从Genivi改为AGL,即汽车级Linux。AGL成立于2016年1月,但是第一版AGL发布是在2014年的6月30日,实际上就是Tizen的修改版,Tizen源自三星,Tizen是三星电子开发的一款基于Linux核心的开放源代码移动操作系统,可适用设备包括智能手机、平板电脑、智能手表、上网本、车载信息娱乐设备(IVI)和智能电视。该项目最初由Linux基金会以及LiMo基金会合力推出,目的在于取代MeeGo与LiMo平台。在Linux基金会中,由技术指导小组(TSG)管理。
目前三星是唯一推出使用 Tizen 设备的业者,也是 Tizen 的最大支持者。至 2017 年末,Tizen 是世界第二大智能手表操作系统,仅次于苹果 watchOS,比基于 Android 的 Wear OS 还要多。2011年9月,三星和英特尔与Linux基金会宣布致力在2012年开发出Tizen,2012年1月1日创建美国苹果id账号名字,LiMo基金会更名为Tizen协会。大概在2015年,Tizen就基本没人支持了,但是AGL开始慢慢起来。这也算是失之东隅,收之桑榆。
现在AGL的白金会员都是日本厂家,分别是电装、瑞萨、马自达、松下、铃木和丰田。黄金会员只有一个,就是本田。白银会员有6家,分别是爱信精机、亚马逊、奔驰、福特、高通和上汽。三星只是青铜会员,但依靠早年Tizen的丰富经验,三星获得了奥迪与大众的青睐,毕竟AGL脱胎自Tizen,而Tizen最熟悉的莫过三星。AGL的青铜会员中中国厂家有中国移动、德赛西威、联发科、东软、中科创达。当然,瑞萨对AGL的支持力度也很大,但瑞萨最顶级的座舱芯片R-CAR H3跟Exynos8890差距不小,奥迪最终选择三星。
Android是发行版本的Linux, 系统复杂, 功能强大。Android是由Google公司和开放手机联盟基于Linux开发的操作系统。Android被称为基于Linux开发的最成功的产品之一, 应用生态最为丰富, 主要应用于移动设备, 因此, 在国内车载IVI系统常基于Android开发。
3) 可移植性强, Android手机上的APP不需要经过大的修改就可以应用在车机上, 有利于国内互联网厂商切入汽车领域, 快速建立起车载软件生态。
Android凭借国内丰富的应用生态切入汽车IVI系统。虽然安全性、稳定性不足,但由于车载信息娱乐系统对安全性要求相对较低, Android仍然凭借其上述优点在国内车载信息娱乐系统领域占据主流地位。尤其是各大互联网巨头、自主品牌、造车新势力纷纷基于Android进行定制化改造, 推出了自己的汽车操作系统, 如阿里Al iOS、百度小度车载OS、比亚迪Di Link、蔚来NIO OS、小鹏X martOS等。
根据上述对QNX操作系统的分析, 对常用嵌入式系统做对比, 操作系统的对比资料见表2-3。
(1)uC/OS-Ⅱ不支持轮转调度,在该系统下,所有的任务被分配了不同的优先级,因此在并行任务较多的情况下,需要进行频繁的任务切换工作,会导致系统的工作效率低下。uC/OS-Ⅱ本身是一个系统内核,仅提供了包括任务调度,时间管理在内的最基本的工作。各类驱动,文件系统,协议栈等均需要开发者完成,导致工作量增大。并且该系统并未提供良好的开发环境。
(2) Linux主要缺点在于内核是非抢占式的, 所以在对硬实时性要求比较高的场合, 需要对其内核进行一些修改。在安全性方面, linux的驱动程序位于核心态,当驱动程序发生故障时,系统会崩溃,而这在对安全性能要求较高的场合是不能接受的,Android采用了Linux的内核,也会出现该问题。
看到这里,QNX这么多好处,那域控制器一芯多屏的方案全部都采用QNX系统那就解决问题了,这里就会涉及中控操作的舒适性以及应用软件的扩展性,比如2013年的卡宴就是同构操作系统,系统稳定性好,升级不方便,而且应用不好扩展,比如中控上增加一些导航、购物、音乐等APP没有安卓系统方便。
车载智能计算平 台自下而上可大致划分为硬件车载智能计算平 台自下而上可大致划分为硬件车载智能计算平 台自下而上可大致划分为硬件车载智能计算平 台自下而上可大致划分为硬件台、系统软件 台、系统软件 (硬件抽象层 (硬件抽象层 (硬件抽象层 +OS内核 +中间件) 、功能软件 、功能软件 、功能软件 (库组件 +中间件) 和应用算 和应用算 法软件等四个部分。
1)硬件平台:基于异构分布式硬件架构包括AI 单元、计算控制单元,应支持芯片选型灵活、可配置拓展、算力可堆砌等优点。
2)系统软件:是针对汽车场景定制的复杂大规模嵌入式系统运行环境,主要包含三层:a)硬件抽象层:包括BSP(板卡支持包)、Hypervisor(硬件虚拟化技术,提供虚拟平台支持多操作系统)等。BSP包括了Bootloader(以基础支持代码来加载操作系统的引导程序)、HAL(硬件抽象层)代码、驱动程序、配置文档等,是内核与硬件之间的接口层,目的是为操作系统提供虚拟硬件平台,使其具有硬件无关性,可以在多平台上移植。b)操作系统内核(Kernel):即为狭义操作系统,如OSEK OS、VxWorks、RT-Linux等。内核提供操作系统最基本的功能,负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。c)中间件:处于应用和操作系统之间的软件,实现异构网络环境下软件互联和互操作等共性问题,提供标准接口、协议,具有较高的移植性,如POSIX/ARA(自适应AutoSAR运行时环境即中间件API接口)和DDS(分布式实时通信中间件)等。
3)功能软件:包含自动驾驶的核心共性功能模块,如相关算法的编程框架(如TensorFlow、Caffe、PaddlePaddle等)。核心共性功能模块包括自动驾驶通用框架、网联、云控等,结合系统软件,共同构成完整的自动驾驶操作系统,支撑自动驾驶技术实现。
1.车狭义的操作系统:专指内核(kernel),其直接与硬件打交道,并提供以下功能:内存管理、文件管理、CPU调度管理、输入输出管理等。目前常见的有:Unix, Linux, WindowsNT,RTOS类等。其中RTOS的内核一般较为简单,基本都是自主编写,将其归为一类。
2.广义的操作系统:也是通常意义上的操作系统,除了内核外,它还包括包管理器(PackageManager)、应用程序框架(Application Framework)、运行时环境(Runtimeenvironment)等。根据内核的类型,其分为Unix家族美国版苹果手机id退出登录、Windows家族、Linux家族、RTOS家族等等。其中较为特殊的是Android和iOS,其分别属于Linux和Unix家族,但都对内核进行不小的改动。
3.操作系统的定制化:其对现有的操作系统进行深度的定制化,通常会包含UI界面与框架的更改,有助于形成品牌宣传及统一化。常见于各大手机厂商对Android系统的定制化。
操作系统(Operating System, OS)是指控制和管理整个计算系统的硬件和软件资源,并合理地组织调度计算机的工作和资源,以提供给用户和其他软件方便的接口和环境的程序集合。智能设备发展到一定程度后一般都需要专门的OS,例如PC机对应的微软Windows系统,智能手机对应的Google Android系统和苹果iOS系统。在软件定义汽车的大趋势下,汽车OS是传统汽车实现智能汽车升级的关键。汽车操作系统是从传统汽车电子基础软件不断演变而来,传统汽车电子产品可分为两类:
1)汽车电子控制装置:通过直接向执行机构(如电子阀门、继电器开关、执行马达等)发送指令,以控制发动机、变速箱、动力电池等协同工作的系统,一般统称为ECU(电子控制单元)。常见的ECU包括发动机电控系统EMS、自动变速箱控制单元TCU、车身电子稳定系统ESP、电池管理系统BMS等。该类系统涉及安全、行驶性能。
2)车载电子设备:如仪表、中控、抬头显示(HUD)、流媒体后视镜等。这类系统常与用户体验相关,不直接参与汽车行驶的控制决策,对车辆行驶性能和安全影响较小。
未来汽车操作系统将主要分为自动驾驶OS和智能座舱OS两大类。不同车企/Tier 1根据自身的规划,对域划分个数不尽相同,如博世分为5个域(动力域、底盘域、座舱域、自动驾驶域、车身域),大众MEB平台车型为3个域(自动驾驶域、智能座舱域、车身控制域),华为同样也为3个域(自动驾驶域、智能座舱域、整车控制域)。虽然有多个域,一般主要分为注重开放、兼容性、生态的智能座舱域操作系统和注重实时、安全、稳定的自动驾驶域操作系统两大类型。
域控制器的底层操作系统竞争格局(QNX 、Linux 平分秋色,微软渐淘汰 )
底层车载操作系统形成 QNX、Linux、Android 三大阵营,WinCE 即将退出市场。
国内企业方面:阿里基于Linux 系统内核开发出 AliOS,上汽荣威所搭载的斑马智行系统即基于 AliOS 打造。此外,鸿蒙系统(Harmony OS)同样 基于Linux系统内核开发。
1.自建技术团队:绝大多数外企车厂、零部件供应商(如奔驰、宝马、博世等)和国内造车新势力 (如小鹏、蔚来等)选择自建技术团队,在底层操作系统基础上进行定制化开发,形成自己独有的车载系统。
2.与互联网公司合作:部分国内主机厂(如上汽荣威)选择和互联网公司合作,开发一定的权限,直接搭载合作伙伴所开发的车载系统。
标准的定制化操作系统,从系统内核到应用程序层级进行深度重构,将硬件资源进行整合优化
ROM方式,基于需求定制化汽车服务及以上层级,下层则基于Android等系统自有架构
超级APP方式,只在应用层调系统已有接口实现相关功能,其余层级则完全沿用已有系统架构。
国内能提供定制专属操作系统的上市企业包括:中科创达、东软集团、诚迈科技、四维图新以及德赛等车机系统 Tier 1 级供应商等。
根据ISO26262标准规定,仪表盘的关键数据和代码与娱乐系统属于不同安全等级。因此,虚拟机(Hypervisor) 管理的概念被引入智能座舱操作系统,虚拟机可以允许符合车规级安全标准的QNX与Linux共同运行。
虚拟机hypervisor,亦称为VMMM(virtual machine monitor),随着座舱处理器的性能越来越强,座舱电子涵盖的功能越来越多,虚拟机已经成为座舱电子不可或缺的软件系统。
在虚拟环境下,物料服务器的CPU、内存和I/O等硬件资源被虚拟化并受hypervisor的调度,多个操作系统在hypervisor的协调下可以共享这些虚拟化的硬件资源,同时每个操作系统又可以保持彼此的独立性。
QNX公认是最成熟安全程度最高的座舱虚拟机操作系统,不过收费比较高,包括入门费、席位费、服务费和授权费(按照屏幕量收费),QNX虚拟机采用虚拟CPU模式。
在ARM存储系统中,使用MMU实现虚拟地址到实际物理地址的映射。为何要实现这种映射?
首先就要从一个嵌入式系统的基本构成和运行方式着手。系统上电时,处理器的程序指针从0x0(或者是由0Xffff_0000处高端启动)处启动,顺序执行程序,在程序指针(PC)启动地址,属于非易失性存储器空间范围,如ROM、FLASH等。然而与上百兆的嵌入式处理器相比,FLASH、ROM等存储器响应速度慢,已成为提高系统性能的一个瓶颈。而SDRAM具有很高的响应速度,为何不使用SDRAM来执行程序呢?
为了提高系统整体速度,可以这样设想,利用FLASH、ROM对系统进行配置,把真正的应用程序下载到SDRAM中运行,这样就可以提高系统的性能。然而这种想法又遇到了另外一个问题,当ARM处理器响应异常事件时,程序指针将要跳转到一个确定的位置,假设发生了IRQ中断,PC将指向0x18(如果为高端启动,则相应指向0vxffff_0018处),而此时0x18处仍为非易失性存储器所占据的位置,则程序的执行还是有一部分要在FLASH或者ROM中来执行的。那么我们可不可以使程序完全都SDRAM中运行那?
答案是肯定的,这就引入了MMU,利用MMU,可把SDRAM的地址完全映射到0x0起始的一片连续地址空间,而把原来占据这片空间的FLASH或者ROM映射到其它不相冲突的存储空间位置。例如,FLASH的地址从0x0000_0000-0x00ff_ffff,而SDRAM的地址范围是0x3000_0000-0x31ff_ffff,则可把SDRAM地址映射为0x0000_0000-0x1fff_ffff而FLASH的地址可以映射到0x9000_0000-0x90ff_ffff(此处地址空间为空闲,未被占用)。映射完成后,如果处理器发生异常,假设依然为IRQ中断,PC指针指向0x18处的地址,而这个时候PC实际上是从位于物理地址的0x3000_0018处读取指令。通过MMU的映射,则可实现程序完全运行在SDRAM之中。
在实际的应用中,可能会把两片不连续的物理地址空间分配给SDRAM。而在操作系统中,习惯于把SDRAM的空间连续起来,方便内存管理,且应用程序申请大块的内存时,操作系统内核也可方便地分配。通过MMU可实现不连续的物理地址空间映射为连续的虚拟地址空间。
操作系统内核或者一些比较关键的代码,一般是不希望被用户应用程序所访问的。通过MMU可以控制地址空间的访问权限,从而保护这些代码不被破坏。
MMU的实现过程,实际上就是一个查表映射的过程。建立页表(translate table)是实现MMU功能不可缺少的一步。页表是位于系统的内存中,页表的每一项对应于一个虚拟地址到物理地址的映射。每一项的长度即是一个字的长度(在ARM中,一个字的长度被定义为4字节)。页表项除完成虚拟地址到物理地址的映射功能之外,还定义了访问权限和缓冲特性等。
MMU通常是CPU的一部分,本身有少量存储空间存放从虚拟地址到物理地址的匹配表。此表称作TLB(转换旁置缓冲区)。所有数据请求都送往MMU,由MMU决定数据是在RAM内还是在大容量存储器设备内。如果数据不在存储空间内,MMU将产生页面错误中断。
①使用DRAM作为大容量存储器时,如果DRAM的物理地址不连续,这将给程序的编写调试造成极大不便,而适当配置MMU可将其转换成虚拟地址连续的空间。
②ARM内核的中断向量表要求放在0地址,对于ROM在0地址的情况,无法调试中断服务程序,所以在调试阶段有必要将可读写的存储器空间映射到0地址。
③系统的某些地址段是不允许被访问的,否则会产生不可预料的后果,为了避免这类错误,可以通过MMU匹配表的设置将这些地址段设为用户不可存取类型。启动程序中生成的匹配表中包含地址映射,存储页大小(1M,64K,或4K)以及是否允许存取等信息。
虚拟化在硬件上有什么具体要求,这并没有明确定义。可以依靠处理器自带的二阶内存管理单元( s2MMU ), 实现软件虚拟机;也可以在内存控制器前放一个硬件防火墙, 对访问内存的地址进行检查和过滤,不做地址重映射;还可以使用系统内存管理单元SMMU实现完整的硬件虚拟化,这是我们要重点介绍的。
如上图黄色框所示,每个主设备和总线之间,都加了一个MMU600。为什么每个主设备后都要加?很简单,如果不加,那必然存在安全漏洞,和软件虚拟化无异。那为何不用防火墙?防火墙的的实现方法,通常是用一个片上内存来存放过滤表项。如果做到4K字节的颗粒度,那4G字节内存就需要1百万项,每项8位,总共1MB的片上内存,这是个不小的成本。另外一个原因是,防火墙方案的物理地址空间对软件是不透明的,采用系统内存管理器SMMU600对上层软件透明,更贴近虚拟化的需求。
当处理器发起一次地址虚实转换请求,内存管理单元会在内部的TLB缓存和Table Walk缓存查找最终页表项和中间表项。如果在内部缓存没找到,那就需要去系统缓存或者内存读取。在最差情况下, 每一阶的4 层中间表可能都是未命中, 4×4+4=20 , 最终会需要20 次内存读取。对于系统内存管理器,情况可能更糟。如上图所示,由于SMMU本身还需引入多级描述符来映射多个页表,最极端情况需要36次的访存才能找到最终页表项。如果所有访问都是这个延迟,显然无法接受。
Arm传统的设计是添加足够大的多级TLB缓存和table walk缓存,然后把两个主设备连到接口,进行地址较为随机的访问。可以看到,主设备的5万次访问,在经过SMMU后,产生了近5 万次未命中。这意味着访问的平均延迟等于访存延迟, 150ns 以上。另一方面, 处理器开了虚拟机后,它的随机访存效率,和未开虚拟机比,却能做到80%以上,这是为什么呢?答案很简单,处理器内部的MMU,会把中间页表的物理地址继续发到二级或者三级缓存,利用缓存来减少平均延迟。而SMMU就没有这么幸运,在Arm先前的手机处理器参考设计中,并没有系统缓存。这种情况下,即使对于延迟不太敏感的主设备,比如图形处理器,打开虚拟化也会造成性能损失,可能高达9%,这不是一个小数目。
怎么解决这个问题?在Arm服务器以及下一代手机芯片参考设计中,会引入网状结构总线,而不是之前的crossbar结构的一致性总线。网状结构总线的好处,主要是提升了频率和带宽,并且,在提供多核一致性的同时,也可以把系统缓存交给各个主设备使用。不需要缓存的主设备还是可以和以前一样发出非缓存的的数据传输,避免额外占用缓存,引起频繁的缓存替换;同时,SMMU可以把页表和中间页表项放在缓存,从而缩短延迟。
Arm 的SMMU600 还做了一点改进, 可以把TLB 缓存贴近各个主设备做布局, 在命中的情况下, 一个时钟周期就可以完成翻译;同时, 把table walk 缓存放到另一个地方, TLB 缓存和table walk 缓存通过内部总线互联。几个主设备可以同时使用一个table walk 缓存, 减少面积,便于布线的同时,又不失效率苹果美国id无服务怎么回事。其结构如下图
如果我们读一下Arm 的SMMU3.x 协议, 会发现它是支持双向页表维护信息广播的, 这意味着除了缓存数据一致性外, 所有的主设备, 只要遵循SMMU3.x 协议, 可以和处理器同时使用一张页表美国版苹果手机id退出登录。在辅助驾驶芯片设计时,如果需要,把重要的加速器加入同一张页表,可以避免软件页表更新操作,进一步提高异构计算的效率。不过就SMU600而言,它仅仅支持单向的广播,接了SMU600的主设备,本身的缓存和页表操作并不能广播到处理器,反过来是可以的。
对于当前的汽车芯片,如果没有系统缓存,那如何减少设备虚拟化延迟呢?办法也是有的。汽车的虚拟机应用较为特殊, 目前8 个虚拟机足够应付所有的分屏和多系统需求, 并且一旦分配,运行阶段无需反复删除和生成。我们完全可以利用这点,把二阶段的SMMU页表变大,比如1GB,固定分配给某个虚拟机。这样,设备在进行二阶段地址映射时,只需少数几项TLB表项,就可以做到一直命中,极大降低延迟。需要注意的是,一旦把二阶映射的物理空间分配给某设备,就不能再收回并分给其他设备。不然,多次回收后,就会出现物理地址离散化,无法找到连续的大物理地址了。
SMMU接受的是从主设备发过来的物理地址,那它是怎么来区分虚拟机呢?靠的是同样从主设备发送过来的vmid/streamid 。如果主设备本身并不支持虚拟化, 那就需要对它进行时分复用, 让软件来写入vmid/streamid 。当然, 这个软件必须运行在hypervisor 或者是securemonitor,不然会有安全漏洞。具体的做法,是在虚拟机切换的时候,hypervisor修改寄存器化的vmid/streamid,提供输入给SMMU即可。如果访问时的id和预设的不符,SMMU会报异常给hypervisor。
如果主设备要实现硬件的方式支持虚拟化,那本身需要根据多组寄存器设置,主动发出不同的vmid/streamid 。为了对软件兼容, 可以把不同组按照4KB 边界分开, 这样在二阶地址映射时,可以让相同的实地址访问不同组的寄存器,而对驱动透明。同时,对于内部的资源也要做区分, 不能让数据互相影响。如果用到缓存, 那缓存还必须对vmid 敏感, 相同地址不同vmid的情况,必须识别为未命中。
前面说到,有些厂商认为虚拟化还不够,有些场景要物理隔离。虚拟化的时候,硬件资源还是共享的,只不过对软件是透明。这样其实并不能完全防止硬件的冲突和保证优先级。请注意,硬件隔离是separation , 而不是分区partition , Partition 是用MPU 来做的。在中控的系统框架图内,我们把采用物理隔离的红色部分单独列出来,如下图
此时的处理器A55和图形处理器G31,独立于作为信息娱乐域的处理器A76/A55和图形处理器G76之外,拥有自己的电源,时钟和电压。作为优化,红色部分可以和其余的处理器用一致性总线连接起来,在不作为仪表盘应用的时候,作为SMP的一部分来使用。而需要隔离的时候,用多路选择连接到NoC或者内存控制器。这样既节省了面积,又实现了隔离。
Hypervisor 允许多个操作系统和应用共享软件。Hypervisor(又称虚拟机监视器) 是一种运行在物理服务器和操作系统之间的中间软件层。由于智能座舱需要同步支持 QNX、Android、Linux 等多操作系统,因此在物理硬件之上需要一个虚拟化平台(Hypervisor)以支持各操作系统的运行。Hypervisors 即可协调着硬件资源的访问,也 可在各个虚拟机(VM)之间施加防护。当服务器启动并执行 Hypervisor 时,它会加载 各虚拟机客户端的操作系统,同时会分配给各虚拟机适量的内存,CPU,网络和磁盘等资源。
宿主型Hypervisor(又称基于操作系统虚拟化) 将虚拟化层安装在传统的操作系统中, 虚拟化软件以应用程序进程形式运行在Windows和Linux等主机操作系统中。典型的宿主型Hypervisor有VMware Workstation和Virtual Box。
这里我们车载上使用最多的QNX的虚拟机,它是裸机型虚拟机。QNX是目前唯一一个能达到Asil-D等级的操作系统(包含Hypervisor)。如果需要实现Asil-D 级别的系统, 必须把现有的软件从Linux 系统移植到QNX 。
所幸的是, QNX 也是符合Posix 标准的, 尤其是图形处理器的驱动, 移植起来会省事一些。QNX 不是所有的模块都是Asil-D 级, 移植过去的驱动, 其实是没有安全等级的。QNX 依靠Asil-D 级的核心软件模块和Hypervisor,保证99%以上的失效覆盖率。如果子模块出了问题,那只能重启子模块。
我们认为它对于我们来说,主要关注两点,一个就是系统之间的图形共享,还有一块就是系统之间的大数据互联,这是Hypervisor性能的关键。
我们以前的操作系统实际上在不同的应用程序,通过一个CPU在多个进程做调度,现在的Hypervisor在多OS调度的时候跟这个实际上是一个思路,相当于硬件层多了一个Hypervisor,这个层只干两件事,一个是多个系统的调动,一个是内存映射。这两个东西最传统的就是以前做虚拟化的时候,没有硬件支撑的时候,这两件事情挺难做的,因为你会降低效率。现在实际上有硬件支撑了,我们在ARMv7-A及以后体系上,已经有了这两个东西的支持。