重要的是应当区分实时系统和实时 OS (RTOS)。实时系统由满足系统要求所需的所有元素(硬件、OS 和应用程序)组成。RTOS 只是完整的实时系统的一个元素,它必须提供足够的功能,才能使全部实时系统能够满足它的要求。
尽管以前的 Windows CE 版本提供了某些 RTOS 功能,但自从 Windows CE 3.0 以后很多重要的内核更改极大地增强了实时性能。Windows CE .NET 内核包含了与 Windows CE 3.0 相同的实时增强功能,除此之外还有某些额外的功能。本文描述了作为 Windows CE .NET 及其以前版本的组成部分的以下更改:
Windows CE .NET 对 x86 平台添加了通过 OEM 定义的变量指定页面池大小的功能。
Windows CE 3.0 将可用于线程的优先级级别数从 8 增加到 256,0 是最高的优先级,255 是最低的优先级。Windows CE 的前一版本的优先级级别 0 到 7 对应于 Windows CE 3.0 中级别 248 到 255。更多的优先级级别答应开发人员更灵活地控制嵌入式系统的调度,并防止由于限制优先级级别数使随机应用程序降低系统性能。
要指派这些新的优先级,Windows CE 3.0 引入了两个新函数:CeSetThreadPRiority 和 CeGetThreadPriority。新函数与 Windows CE 2.12 中的 SetThreadPriority 和 GetThreadPriority 函数看起来完全相同,不过新函数接受的数字范围是 0 到 255。
更多地控制时间和调度 Windows CE 3.0 已经改进了计时器性能,计时器和休眠函数调用的精度达到了一毫秒,并且应用程序可以为每个线程设置时间片。
计时器(或系统时钟)是一种速率,由 OS 以此速率生成计时器中断并对其提供服务。以前,计时器也是线程时间片,是线程没有被抢占的情况下可以在系统中运行的最长时间。在 Windows CE 3.0 中,计时器不再直接与线程时间片相关。
以前,OEM 将计时器和时间片作为 OEM 适配层 (OAL) 中的常量设置为大约 25 毫秒。计时器触发时,假如一个线程已做好预备,内核会调度此新的线程。在 Windows CE 3.0 中,计时器总是设置为一毫秒,并且可以对每个线程设置时间片。
线程时间片 在 Windows CE 3.0 中,线程时间片很灵活,足以使应用程序能够逐个线程地设置时间片。这就让开发人员可以改编计划程序,以满足应用程序的当前需要。为了调整时间片,已经添加了两个新函数:CeGetThreadQuantum 和 CeSetThreadQuantum。这项更改使应用程序能够基于线程完成任务所需要的时间量来设置线程的时间片。通过将任何线程的线程时间片设置为零,循环调度算法可以变为“运行到完成”算法。只有较高优先级的线程或硬件中断才能先于设置为运行到完成的线程执行。
更改处理优先级倒置的方法 为了有助于缩短响应时间,Windows CE 3.0 更改了它的优先级倒置方法,当低优先级线程拥有一个较高优先级线程所需要的内核对象时,就会发生优先级倒置。Windows CE 使用优先级继续来处理优先级倒置,这时,被阻塞的、拥有较高优先级线程所需要的内核对象的线程将继续更高的优先级。优先级倒置使较低优先级线程能够运行,并释放资源供较高优先级的线程使用。以前,内核处理整个倒置链。从 Windows CE 3.0 开始,内核保证只处理优先级倒置到一个级别的深度。
优先级倒置有两个基本示例。第一个是简单的情况,这种情况下,对优先级倒置的处理从 Windows CE 2.12 到 Windows CE 3.0 没有变化。例如,在有三个处于运行状态的线程时,可以看见这种情况。线程 A 的优先级是 1,线程 B 和 C 优先级较低。假如线程 A 正在运行,并且因为线程 B 拥有线程 A 需要的内核对象而使 A 被阻塞,那么线程 B 的优先级会提高到 A 的优先级级别,以便答应线程 B 运行。然后,假如因为线程 C 拥有线程 B 需要的内核对象而使线程 B 被阻塞,则线程 C 的优先级会提高到 A 的优先级级别,以便答应线程 C 也能运行。
第二个并且是更有趣的情况是,线程 A 可以以比 B 和 C 更高的优先级运行,线程 B 拥有 A 需要的内核对象,线程 B 被阻塞,等待 C 释放它需要的内核对象,而 C 正在运行。在 Windows CE 2.12 中,当 A 运行然后因为 B 而被阻塞时,B 和 C 的优先级都会提高到 A 的优先级,以便使它们能够运行。在 Windows CE 3.0 中,当 A 因为 B 而被阻塞时,只有线程 B 的优先级被提高。通过减少复杂性和更改算法,极大地减少和限制了 Windows CE 中最大的 KCALL。