• 沒有找到結果。

嵌入式实时操作系统与通用操作系统的差异

在文檔中 嵌 入 式 系 统 应 用 开 发 (頁 96-100)

第 3 章 嵌入式操作系统

3.1 嵌入式实时操作系统与通用操作系统的差异

嵌入式实时系统中采用的操作系统称为嵌入式实时操作系统,它既是嵌入式操作系 统,又是实时操作系统。作为一种嵌入式操作系统,它具有嵌入式软件共有的可裁剪、低

资源占用、低功耗等特点;而作为一种实时操作系统(本文对实时操作系统特性的讨论仅 限于强实时操作系统,下面提到的实时操作系统也均指强实时操作系统),它与通用操作 系统(如 Windows、Unix、Linux 等)相比有很大的差别。

我们在日常工作学习环境中接触最多的是通用操作系统。通用操作系统是由分时操作 系统发展而来,大部分都支持多用户和多进程,负责管理众多的进程并为它们分配系统资 源。分时操作系统的基本设计原则是:尽量缩短系统的平均响应时间并提高系统的吞吐 率,在单位时间内为尽可能多的用户请求提供服务。由此可以看出,分时操作系统注重平 均表现性能,不注重个体表现性能。如对于整个系统来说,注重所有任务的平均响应时间 而不关心单个任务的响应时间,对于某个单个任务来说,注重每次执行的平均响应时间而 不关心某次特定执行的响应时间。通用操作系统中采用的很多策略和技巧都体现出了这种 设计原则,如虚存管理机制中由于采用了 LRU 等页替换算法,使得大部分的访存需求能 够快速地通过物理内存完成,只有很小一部分的访存需求需要通过调页完成,但从总体上 来看,平均访存时间与不采用虚存技术相比没有很大的提高,同时又获得了虚空间可以远 大于物理内存容量等好处,因此虚存技术在通用操作系统中得到了十分广泛的应用。类似 的例子还有很多,如 Unix 文件系统中文件存放位置的间接索引查询机制等,甚至硬件设 计中的缓存(Cache)技术以及 CPU 的动态分支预测技术等也都体现出了这种设计原则。由 此可见,这种注重平均表现,即统计型表现特性的设计原则的影响是十分深远的。

而对于实时操作系统,它除了要满足应用的功能需求以外,更重要的是还要满足应用 提出的实时性要求,而组成一个应用的众多实时任务对于实时性的要求是各不相同的,此 外实时任务之间可能还会有一些复杂的关联和同步关系,如执行顺序限制、共享资源的互 斥访问要求等,这就为系统实时性的保证带来了很大的困难。因此,实时操作系统所遵循 的最重要的设计原则是:采用各种算法和策略,始终保证系统行为的可预测性。

可预测性(predictability)是指在系统运行的任何时刻,在任何情况下,实时操作系统的 资源调配策略都能为争夺资源(包括 CPU、内存、网络带宽等)的多个实时任务合理地分配 资源,使每个实时任务的实时性要求都能得到满足。与通用操作系统不同,实时操作系统 注重的不是系统的平均表现,而是要求每个实时任务在最坏情况下都要满足其实时性要 求,也就是说,实时操作系统注重的是个体表现,更准确地讲是个体最坏情况表现。举例 来说,如果实时操作系统采用标准的虚存技术,则一个实时任务执行的最坏情况是每次访 存都需要调页,如此累计起来的该任务在最坏情况下的运行时间是不可预测的,因此该任 务的实时性无法得到保证。从而可以看出在通用操作系统中广泛采用的虚存技术在实时操 作系统中不宜直接采用。

由于实时操作系统与通用操作系统的基本设计原则差别很大,因此在很多资源调度策 略的选择上以及操作系统实现的方法上两者都具有较大的差异,这些差异主要体现在以下 几点。

(1) 任务调度策略

通用操作系统中的任务调度策略一般采用基于优先级的抢先式调度策略,对于优先级 相同的进程则采用时间片轮转调度方式,用户进程可以通过系统调用动态地调整自己的优 先级,操作系统也可根据情况调整某些进程的优先级。

实时操作系统中的任务调度策略目前使用最广泛的主要可分为两种,一种是静态表驱

动方式,另一种是固定优先级抢先式调度方式。

静态表驱动方式是指在系统运行前工程师根据各任务的实时要求用手工的方式或在辅 助工具的帮助下生成一张任务的运行时间表。这张时间表与列车的运行时刻表类似,指明 了各任务的起始运行时间以及运行长度,运行时间表一旦生成就不再变化了。在运行时调 度器只需根据这张表在指定的时刻启动相应的任务即可。静态表驱动方式的主要优点是:

l 运行时间表是在系统运行前生成的,因此可以采用较复杂的搜索算法找到较优的 调度方案。

l 运行时调度器开销较小。

l 系统具有非常好的可预测性,实时性验证也比较方便。

这种方式的主要缺点是不灵活,需求一旦发生变化,就要重新生成整个运行时间表。

由于具有非常好的可预测性,这种方式主要用于航空航天、军事等对系统的实时性要 求十分严格的领域。

固定优先级抢先式调度方式则与通用操作系统中采用的基于优先级的调度方式基本类 似,但在固定优先级抢先式调度方式中,进程的优先级是固定不变的,并且该优先级是在 运行前通过某种优先级分配策略(如 Rate-Monotonic、Deadline-Monotonic 等)来指定的。这 种方式的优缺点与静态表驱动方式的优缺点正好完全相反,它主要应用于一些较简单、较 独立的嵌入式系统,但随着调度理论的不断成熟和完善,这种方式也会逐渐在一些对实时 性要求十分严格的领域中得到应用。目前市场上大部分实时操作系统采用的都是这种调度 方式。

(2) 内存管理

为解决虚存给系统带来的不可预测性,实时操作系统一般采用如下两种方式:

l 在原有虚存管理机制的基础上增加页面锁功能,用户可将关键页面锁定在内存 中,从而不会被 swap 程序将该页面交换出内存。这种方式的优点是既得到了虚 存管理机制为软件开发带来的好处,又提高了系统的可预测性。缺点是由于 TLB 等机制的设计也是按照注重平均表现的原则进行的,因此系统的可预测性 并不能完全得到保障。

l 采用静态内存划分的方式,为每个实时任务划分固定的内存区域。这种方式的优 点是系统具有较好的可预测性,缺点是灵活性不够好,任务对存储器的需求一旦 有变化就需要重新对内存进行划分,此外虚存管理机制所带来的好处也丧失了。

目前市场上的实时操作系统一般都采用第一种管理方式。

(3) 中断处理

在通用操作系统中,大部分外部中断都是开启的,中断处理一般由设备驱动程序来完 成。由于通用操作系统中的用户进程一般都没有实时性要求,而中断处理程序直接跟硬件 设备交互,可能有实时性要求,因此中断处理程序的优先级被设定为高于任何用户进程。

但对于实时操作系统采用上述的中断处理机制是不合适的。首先,外部中断是外部环 境向实时操作系统进行的输入,它的频度与环境变化的速率相关,而与实时操作系统无 关。如果外部中断产生的频度不可预测,则一个实时任务在运行时被中断处理程序阻塞的 时间开销也是不可预测的,从而使任务的实时性得不到保证;如果外部中断产生的频度是 可预测的,一旦某外部中断产生的频度超出其预测值(如硬件故障产生的虚假中断信号或

预测值本身有误)就可能会破坏整个系统的可预测性。其次,实时操作系统中的各用户进 程一般都有实时性要求,因此中断处理程序优先级高于所有用户进程的优先级分配方式是 不合适的。

一种较适合实时操作系统的中断处理方式为:除时钟中断外,屏蔽所有其他中断,中 断处理程序变为周期性的轮询操作,这些操作由核心态的设备驱动程序或由用户态的设备 支持库来完成。采用这种方式的主要好处是充分保证了系统的可预测性,主要缺点是对环 境变化的响应可能不如上述中断处理方式快。另外轮询操作在一定程度上降低了 CPU 的 有效利用率。另一种可行的方式是,对于采用轮询方式无法满足需求的外部事件,采用中 断方式,其他时间仍然采用轮询方式。但此时中断处理程序与所以其他任务一样拥有优先 级,调度器根据优先级对处于就绪态的任务和中断处理程序统一进行处理器调度。这种方 式使外部事件的响应速度加快,并避免了上述中断方式带来第二个问题,但第一个问题仍 然存在。

此外为提高时钟中断响应时间的可预测性,实时操作系统应尽可能少地屏蔽中断。

(4) 共享资源的互斥访问

通用操作系统一般采用信号量机制来解决共享资源的互斥访问问题。对于实时操作系 统,如果任务调度采用静态表驱动方式,共享资源的互斥访问问题在生成运行时间表时已 经考虑到了,在运行时无需再考虑。如果任务调度采用基于优先级的方式,则传统的信号 量机制在系统运行时很容易造成优先级倒置问题(Priority Inversion),即当一个高优先级任 务通过信号量机制访问共享资源时,该信号量已被一低优先级任务占有,而这个低优先级

通用操作系统一般采用信号量机制来解决共享资源的互斥访问问题。对于实时操作系 统,如果任务调度采用静态表驱动方式,共享资源的互斥访问问题在生成运行时间表时已 经考虑到了,在运行时无需再考虑。如果任务调度采用基于优先级的方式,则传统的信号 量机制在系统运行时很容易造成优先级倒置问题(Priority Inversion),即当一个高优先级任 务通过信号量机制访问共享资源时,该信号量已被一低优先级任务占有,而这个低优先级

在文檔中 嵌 入 式 系 统 应 用 开 发 (頁 96-100)