实时操作系统:ucOS/VxWorks/QNX/RTLinux
非实时操作系统:Linux/Windows/OSX
1 实时操作系统
实时操作系统,当外界事件和数据产生时,系统能以足够快的速度予以处理,其处理结果能在规定的时间内控制生产结果或对系统做出响应,并控制所有实时任务协调一致运行的操作系统。
在下图中右边的任务优先级("优先级")高于左边的任务,先看实时操作系统的,当优先级更高的任务2就绪的时候,即便任务1正在运行中,也必须立刻交出CPU的使用权,就跟中断一样,先执行任务2,等任务2执行完或者主动挂起(sleep)让出CPU的时候,任务1才能接着运行。
实时操作系统,一般分为硬实时和软实时,硬实时指的是在规定的时间内必须完成任务操作,在操作系统设计时保证;
软实时只要按照任务的优先级,尽可能地完成任务操作即可。
硬实时操作系统
完全满足在指定时间内完成关键行为
硬实时操作系统严格规定了限定时间内必须完成任务,否则会导致严重后果发生。如在自动驾驶场景下,车辆前置摄像头模块,短距长距雷达及助力转向等模块需要连续采集处理数据,并通过算法输出决策行为。其中,系统必须在指定时间内完成对输入的采集数据完成运算及处理,并完成输出。
假设方向盘转角,节气门等驾驶相关控制信号若无法确保实时性,自动驾驶系统的安全性将无法保证。
常见的硬实时操作系统有VxWorks,QNX,ThreadX,FreeRTOS,ucOS。
值得提一句的是,VxWorks是世界范围内现役航天,航海,飞机,坦克自动化控制部分使用范围最广的实时操作系统,包括国内网上热度最高的几种军事设备也同使用了此系统。
软实时操作系统
大多数情况下在指定时间内完成关键行为
软实时系统对处理事件的时间要求是统计学预期,即使在处理过程中偶发出现了时间偏差,也不会对系统造成致命后果。
如IP电视解码视频流数据时,可能会出现数据帧的丢失,但即使了,仅是用户视觉上的体验影响,或通过抖动处理,就可以解决图像上的视觉感知问题。
- 多任务
系统提供了多任务运行机制,系统内核通过调度让CPU运行许多外部事件线程,实现任务的并发性。
- 抢占调度
系统具有继承的优先级和抢占式内核属性,在执行某一项任务的时候,若有更高优先级的任务进入可执行态,系统将会立即抢占当前CPU资源,退出低优先级任务,运行高优先级任务。
- 任务间的通讯和同步
实时系统中,可能存在许多任务作为一个应用的部分执行,系统必须提供这些任务间的通讯机制,有效地共享不可抢占的资源或者临界区所需要的同步机制。
- 任务与中断之间的通信
在真实应用场景中,事件通常作为中断的方式到来,为了系统调度的稳定、提供有效的排队和减小中断服务程序的开销,通常希望在任务级线程处理相应工作,所以需要任务与中断之间的通信。
2 非实时操作系统(分时操作系统)
再看看我们的Linux/Windows/OSX这些基于时间片轮转的操作系统遇到这种问题的时候会怎么样呢,毫无疑问它们都是非实时的操作系统,CPU是不可抢占的,从上图可以看到,即便高优先级的任务就绪了,也不能马上中断低优先级任务而得到执行,必须要等到低优先级任务主动挂起(sleep)或者时间片结束才能得到执行。
所以我们在使用PC的时候经常会遇到应用程序无响应的问题。即硬件资源被其他任务占用,本任务得不到立即执行。
学习过程中最常见的操作系统是通用操作系统,即Windows、Unix、Linux等,此类系统由分时操作系统发展而来。
分时操作系统的基本设计原则是:尽量缩短系统的平均响应时间并提高系统的吞吐率,在单位时间内为尽可能多的用户请求提供服务。
因而相比实时操作系统,非实时操作系统更关注系统平均性能,在响应时间上,非实时操作系统注重所有任务的平均响应时间,也就是说,它注重所有任务的平均响应时间而不关心单个任务的响应时间,针对某单个任务,也是注重每次执行的平均响应时间而不关心某次特定执行的响应时间。
Windows作为最常使用的通用操作系统,支持系统管理多用户多进程的系统资源。
与实时操作系统的内核抢占机制不同的是,分时操作系统内核不可抢占,无论优先级多高的任务,都必须等当前CPU任务完成或当前任务主动退出后才可以执行。
想必都有体会的是,当CPU空闲时,电脑系统运行流畅,但当后台执行补丁下载或杀毒时,一旦CPU进入高负荷状态,操作系统就会出现运行卡顿甚至死机的问题。
计算机同时为多个用户任务服务的操作系统,操作系统以时间片轮询的机制,将系统处理时间与内存按照一定是时间间隔,轮流执行任务,实现任务的调度和执行。
由于间隔时间很短,每个用户的任务感觉独占计算机一样,保证用户任务的响应和执行。
- 交互性
用户和系统进行人机对话。
- 多路性
多用户在各自终端上使用同一个CPU。
- 独立性
用户可以独立操作,互不干扰,互不混淆。
- 及时性
用户在短时间内可以得到系统的及时应答。
两类操作系统的主要区别在于任务调度处理方式不同,常用的任务调度方式有两种:基于任务优先级的任务调度方式和基于时间片的任务调度方式:
1. 基于任务优先级的调度方式:
一旦内核把资源分配给某进程后,便让该进程一直执行,直到该进程完成或发生某事件而被阻塞(常见的方式主动调用delay),才再把处理机分配给其他进程,否则高优先级的任务会一直运行。所以这种情况下,如果某个高优先级的任务运行时间过长最好有阻塞机制,来让出CPU使其他低优先级的任务也有机会运行。
2. 基于时间片的调度方式:
这种方式下,所有任务的优先级相同,当内核给该进程分配的时间片结束后,内核会停止正在执行的这个进程,下一个时间片分配给其他进程执行,即便这个任务没有执行完也没有主动delay自己。
因此非实时操作系统与实时操作系统相比,最直接的差别:
当内核处于相对消耗状态时,非实时操作系统处理延时会增加,甚至无法保证最高优先级任务执行的最后时限。
为满足实时性与可靠性,车辆ECU目前绝大多数模块都为实时操作系统,近年来Infotainment,Tbox,ADAS部分处理模块,中央网关及所谓的域控制器也逐步使用了Linux等分时系统来拓展部分功能,并配合相关实时操作系统来组合实现某些车载功能,使得车辆因引入了大数据分析,安全渗透分析等能力后实现了更深程度的智能化。