区域。时限要求高的是硬实时,时限要求低的是软实时
非实时操作系统:
通常的通用操作系统 Windows 和 Linux 都叫分时操作系统,一般采用公平调度算法,线程/进程一多就得
分享 CPU 时间,Linux 下有针对“实时进程”的调度,调度算法和普通进程不一样,但也只是相对的响应时间降
低而已,类似的 Windows 下的“实时”优先级,也只不过是最高优先级,而不是真正的实时
真正的实时操作系统内核是可中断可抢占的。而非实时的操作系统通常在执行内核功能时是不可中断的,
Linux 是软实时的,它在内核中加入了若干可中断点,而不是任何时候都允许中断。
Windows 的内核是不可抢占的,所以它不是实时操作系统。Linux 是软实时的,内核中仍然有大量不可抢占
区域。
这样对内核的设计就要求很高。
有的第三方的硬实时基于 Linux 的实现一般都是将 Linux 内核作为一个任务,由另外的实时 OS 内核进行调
度
实时系统与非实时系统的根本区别
实时系统与非实时系统的根本区别在于:实时系统具有与外部环境及时交互作用的能力。也就是说实时
系统从外部获取信息以及系统得出结论要在很短的限制时间内完成。
嵌入式实时系统中采用的操作系统我们称为嵌入式实时操作系统,它既是嵌入式操作系统,又是实时操作系统。
作为一种嵌入式操作系统,它具有嵌入式软件共有的可裁剪、低资源占用、低功耗等特点;而作为一种实时操
作系统(本文对实时操作系统特性的讨论仅限于强实时操作系统,下面提到的实时操作系统也均指强实时操作
系统),它与通用操作系统(如 Windows、Unix、Linux 等)相比有很大的差别,下面我们将通过比较这两
种操作系统之间的差别来逐步描述实时操作系统的主要特点。
我们在日常工作学习环境中接触最多的是通用操作系统,通用操作系统是由分时操作系统发展而来,大部分都
支持多用户和多进程,负责管理众多的进程并为它们分配系统资源。分时操作系统的基本设计原则是:尽量缩
短系统的平均响应时间并提高系统的吞吐率,在单位时间内为尽可能多的用户请求提供服务。由此可以看出,
分时操作系统注重平均表现性能,不注重个体表现性能。如对于整个系统来说,注重所有任务的平均响应时间
而不关心单个任务的响应时间,对于某个单个任务来说,注重每次执行的平均响应时间而不关心某次特定执行
的响应时间。通用操作系统中采用的很多策略和技巧都体现出了这种设计原则,如虚存管理机制中由于采用了
LRU 等页替换算法,使得大部分的访存需求能够快速地通过物理内存完成,只有很小一部分的访存需求需要通
过调页完成,但从总体上来看,平均访存时间与不采用虚存技术相比没有很大的提高,同时又获得了虚空间可
以远大于物理内存容量等好处,因此虚存技术在通用操作系统中得到了十分广泛的应用。类似的例子还有很多,
如 Unix 文件系统中文件存放位置的间接索引查询机制等,甚至硬件设计中的 Cache 技术以及 CPU 的动态分
支预测技术等也都体现出了这种设计原则。由此可见,这种注重平均表现,即统计型表现特性的设计原则的影
响是十分深远的。
而对于实时操作系统,前面我们已经提到,它除了要满足应用的功能需求以外,更重要的是还要满足应用提出
的实时性要求,而组成一个应用的众多实时任务对于实时性的要求是各不相同的,此外实时任务之间可能还会
有一些复杂的关联和同步关系,如执行顺序限制、共享资源的互斥访问要求等,这就为系统实时性的保证带来
了很大的困难。因此,实时操作系统所遵循的最重要的设计原则是:采用各种算法和策略,始终保证系统行为
的可预测性(predictability)。可预测性是指在系统运行的任何时刻,在任何情况下,实时操作系统的资
源调配策略都能为争夺资源(包括 CPU、内存、网络带宽等)的多个实时任务合理地分配资源,使每个实时任
务的实时性要求都能得到满足。与通用操作系统不同,实时操作系统注重的不是系统的平均表现,而是要求每
个实时任务在最坏情况下都要满足其实时性要求,也就是说,实时操作系统注重的是个体表现,更准确地讲是
个体最坏情况表现。举例来说,如果实时操作系统采用标准的虚存技术,则一个实时任务执行的最坏情况是每
次访存都需要调页,如此累计起来的该任务在最坏情况下的运行时间是不可预测的,因此该任务的实时性无法
得到保证。从而可以看出在通用操作系统中广泛采用的虚存技术在实时操作系统中不宜直接采用。
由于实时操作系统与通用操作系统的基本设计原则差别很大,因此在很多资源调度策略的选择上以及操作系统
实现的方法上两者都具有较大的差异,这些差异主要体现在以下几点:
(1) 任务调度策略:
评论