第九步:对于实时处理的支持
嵌入式操作系统的一个重要的应用领域就是实时处理。和非实时系统不同,实时系统的正确性不仅取决于程序的逻辑正确性,还和程序的处理时间相关。 和非实时的操作系统相比,实时操作系统的最核心特性就是要保证所有的系统操作能满足时间上的要求,即保证这些操作具有时间上的可确定性(deterministic)。
为了满足这种可确定性,一个实时操作系统在设计上有一些特殊的考虑。一般来说,主要在如下几个方面:
任务调度:实时操作系统的核心是实时任务调度。一般来说,实时调度算法有四类:静态表调度、静态优先级调度、动态计划调度、动态最优调度。一般来说,现有的实时操作系统大多支持基于某种优先级的调度算法。 但实际上,由于任务集的实时特征差别可以会很大,一个理想的实时操作系统应该具有允许使用不同的调度算法来满足不同任务集的实时需要。 但是,让一个操作系统支持所有的调度算法是不现实也不必要的。所以,一个良好设计的实时操作系统应具有能够的灵活性,能够允许动态或静态加载不同的调度算法。即,这样一个系统应该能允许使用可定制的调度器。Os86tiny系统就支持这样的特性,允许动态向系统注册一个任务调度器。
内存管理:在非实时的操作系统中,基于堆管理或废料收集的内存分配算法被广泛地使用。但是,由于这些算法在时间上的不确定性,不适合于实时系统。 在实时系统尤其是硬实时系统中,内存管理常常使用静态内存分配的方法,以避免时间的不确定性。另外,使用支持固定大小内存块的内存池来动态分配内存,也可以避免不确定性。 一般而言,实时操作系统也可以支持内存的堆管理算法,以便在不需要实时处理的时候满足程序的内存管理的需要。 和通用操作系统不同的是,实时操作系统一般不需要支持虚拟内存。这是由于对虚拟内存的访问会导致内存的交换,从而来到时间上的不确定性。
时钟服务:作为一个实时操作系统,提供高精度的时钟服务是很重要的。在os86tiny中,高精度的时钟服务通过对8253/4芯片的频率设定来实现。
相邻内存访问:除了算法设计上的因素,内存访问导致的cache miss也会带来较大的overhead和时间上的不确定性。而cache miss常常是由于被访问 数据的分布不合理引起的。一个良好设计的系统应尽可能使被访问的内存集中起来,避免过多的cache miss带来的不确定性。
具体到Os86tiny系统,还有几个因素要考虑:
同步机制的实时支持:
任务间通信机制的实时支持: