扬州大学硕士学位论文
① 在原有虚存管理机制的基础上增加页面锁功能,用户可将关键页面锁定在内存中,从而不会被swap程序将该页面交换出内存。这种方式的优点是既得到了虚存管理机制为软件开发带来的好处,又提高了系统的可预测性。缺点是由于TLB等机制的设计也是按照注重平均表现的原则进行的,因此系统的可预测性并不能完全得到保障。 ② 采用静态内存划分的方式,为每个实时任务划分固定的内存区域。这种方式的优点是系统具有较好的可预测性,缺点是灵活性不够好,任务对存储器的需求一旦有变化就需要重新对内存进行划分,此外虚存管理机制所带来的好处也丧失了。
目前市场上的实时操作系统一般都采用第一种管理方式。 (3) 中断处理
在通用操作系统中,大部分外部中断都是开启的,中断处理一般由设备驱动程序来完成。由于通用操作系统中的用户进程一般都没有实时性要求,而中断处理程序直接跟硬件设备交互,可能有实时性要求,因此中断处理程序的优先级被设定为高于任何用户进程。 但对于实时操作系统采用上述的中断处理机制是不合适的。首先,外部中断是环境向实时操作系统进行的输入,它的频度是与环境变化的速率相关的,而与实时操作系统无关。如果外部中断产生的频度不可预测,则一个实时任务在运行时被中断处理程序阻塞的时间开销也是不可预测的,从而使任务的实时性得不到保证;如果外部中断产生的频度是可预测的,一旦某外部中断产生的频度超出其预测值(如硬件故障产生的虚假中断信号或预测值本身有误)就可能会破坏整个系统的可预测性。其次,实时操作系统中的各用户进程一般都有实时性要求,因此中断处理程序优先级高于所有用户进程的优先级分配方式是不合适的。
一种较适合实时操作系统的中断处理方式为:除时钟中断外,屏蔽所有其它中断,中断处理程序变为周期性的轮询操作,这些操作由核心态的设备驱动程序或由用户态的设备支持库来完成。
采用这种方式的主要好处是充分保证了系统的可预测性,主要缺点是对环境变化的响应可能不如上述中断处理方式快,另外轮询操作在一定程度上降低了CPU的有效利用率。另一种可行的方式是:对于采用轮询方式无法满足需求的外部事件,采用中断方式,其它时间仍然采用轮询方式。但此时中断处理程序与所以其它任务一样拥有优先级,调度器根据优先级对处于就绪态的任务和中断处理程序统一进行处理器调度。这种方式使外部事件的响应速度加快,并避免了上述中断方式带来第二个问题,但第一个问题仍然存在。 此外为提高时钟中断响应时间的可预测性,实时操作系统应尽可能少地屏蔽中断。 (4) 共享资源的互斥访问
通用操作系统一般采用信号量机制来解决共享资源的互斥访问问题。对于实时操作系统,如果任务调度采用静态表驱动方式,共享资源的互斥访问问题在生成运行时间表时已经考虑到了,在运行时无需再考虑。如果任务调度采用基于优先级的方式,则传统的信号量机制在系统运行时很容易造成优先级倒置问题(Priority Inversion),即当一个高优先级任务通过信号量机制访问共享资源时,该信号量已被一低优先级任务占有,而这个低优先级任务在访问共享资源时可能又被其它一些中等优先级的任务抢先,因此造成高优先级任务被许多具有较低优先级的任务阻塞,实时性难以得到保证。因此在实时操作系统中,往往对传统的信号量机制进行了一些扩展,引入了如优先级继承协议(Priority Inheritance Protocol)、优先级顶置协议(Priority Ceiling Protocol)以及Stack Resource Policy等机制,较好地解决了优先级倒置的问题。 (5) 系统调用以及系统内部操作的时间开销 进程通过系统调用得到操作系统提供的服务,操作系统通过内部操作(如上下文切换等)来完成一些内部管理工作。为保证系统的可预测性,实时操作系统中的所有系统调用以及系统内部操作的时间开销都应是有界的,并且该界限是一个具体的量化数值。而在通
26
周全 ES体系结构的研究及其应用
用操作系统中对这些时间开销则未做如此限制。 (6) 系统的可重入性 在通用操作系统中,内核态系统调用往往是不可重入的,当一低优先级任务调用内核态系统调用时,在该时间段内到达的高优先级任务必须等到低优先级的系统调用完成才能获得CPU,这就降低了系统的可预测性。因此,实时操作系统中的内核态系统调用往往设计为可重入的。
(7) 辅助工具
实时操作系统额外提供了一些辅助工具,如实时任务在最坏情况下的执行时间估算工具、系统的实时性验证工具等,可帮助工程师进行系统的实时性验证工作。
此外,实时操作系统对系统硬件设计也提出了一些要求,至少有以下一些要求: (1) DMA
DMA就是在无需CPU参与的情况下将数据在内存与其它外部设备间进行交换。DMA最常用的一种实现方式被称为周期窃取(Cycle Stealing)方式,即首先通过总线仲裁协议与CPU竞争总线控制权,在获得控制权后再根据用户预设的操作指令进行数据交换。由于这种周期窃取方式会给用户任务带来不可预测的额外阻塞开销,所以实时操作系统往往要求系统设计时不采用DMA或采取一些可预测性更好的DMA实现方式,如Time-slice method等。
(2) Cache
Cache的主要作用是采用容量相对较小的快速存储部件来弥补高性能CPU与相对来说性能较低的存储器之间的性能差异,由于它可以使系统的平均表现性能得到大幅度提高,因此在硬件设计中得到了极为广泛的应用。但实时操作系统关注的不是平均表现性能,而是个体最坏情况的表现,因此在对系统进行实时性验证时必须考虑实时任务运行的最坏情况,即每次访存都没有命中Cache情况下的运行时间,所以在利用辅助工具估算实时任务在最坏情况下执行时间时,应将系统中所有的Cache功能暂时关闭,在系统实际运行时再将Cache功能激活。除此以外,另一种较极端的做法则是在硬件设计中完全不采用Cache技术。
6. 基于RTOS的系统设计方法
对于实时控制系统,必须满足所有的时间需求。构建一个实时系统,需要考虑以下几个部分:
(1) 事件
事件一般由外部中断引起,它是环境向实时操作系统的输入。设计一个实时系统的时候,需要考虑每个事件最大的发生频率、每个事件的处理程序最大的执行时间和每一个事件的deadline。响应时间必须小于Deadline。
在复杂的系统中,事件的响应时间受操作系统和其他任务的影响。具体有下面4个因素影响响应时间:
① 处理事件的任务执行时间,指没有资源竞争的情况下,完成执行任务的时间 ② 中断处理占用的时间
③ 更高优先级任务占用的时间
④ 因为一些共享资源的竞争引起的,低优先级任务占用的时间
这4个因素中,第1个因素是可以预先确定的。第2个因素由中断发生的频率和中断处理程序的执行时间决定。这部分时间用中断发生的最大频率来估算,也是可以确定上界的。第3个因素由系统中更高优先级任务决定,如果目标任务是最高优先级的任务,不会被其他任务抢占。第4个因素由资源的共享和竞争引起。一个优良的设计应该尽量避免其他任务竞争与关键任务竞争资源,并且充分考虑资源竞争产生的影响。 实时软件设计模式
27
扬州大学硕士学位论文
① 任务为中心的设计
任务是调度得基本单元,应用是任务的集合,任务由信号唤醒。这种设计的系统流程如图3.1所示。
② 事件为中心的设计
事件是调度的基本单元,应用是事件和响应的集合,一个事件与一个或者多个任务关联。这种设计的系统流程如图3.2所示。
初始化任务 初始化 等待输入 事件 等待事件 获得输入 处理事件 处理输入 结果输出 是否中止 是否中止 结束 结束任务 图3.1 任务为中心的设计系统流程图 图3.2 事件为中心的设计系统流程图 3.3.2.5 POSIX规范[11]
系统调用是操作系统提供的调用接口,应用程序使用系统调用完成特定的任务。一种操作系统能力的强弱,体现在系统调用的多少和系统调用的性能,时间是衡量性能的主要指标。
POSIX 1003.x规范定义了系统调用的规范。Unix和Linux都是实现了该规范的操作系统。这样,Unix平台上的大量应用程序不经修改,或者稍加修改就可以移植到Linux平台上。因为这两种完全不同的操作系统,提供了相同的系统调用。也就是说,它们是具有相同接口的虚拟机。值得注意的是,这种虚拟机是“跨平台的”。这里的跨平台,是源代码级的。不同系统的二进制代码,需要重新编译,才能在各自的平台上运行。
世界上的大部分通用计算机系统,都是采用POSIX兼容的操作系统。比如,QNX,FreeBSD等。其实,Windows 2000和XP也是POSIX兼容的。因为美国政府规定,出售的操作系统必须是符合POSIX规范的。POSIX已经是通用操作系统事实上的标准。
嵌入式操作系统远远没有通用操作系统复杂。接口完整的POSIX显得太复杂了,在简单的系统开发中没有必要。
嵌入式系统往往是为了完成特定任务而存在的。它的功能是固定的,并且结构简单。这种结构简单的系统,有的时候根本就不需要操作系统。有时需要操作系统的任务切换机制,有时需要其他机制。嵌入式操作系统最需要的不是实现完整的接口标准,而是操作系统本身具有可裁剪性、功能丰富、使用简单,并且一般都有实时性要求。
3.3.2.6 嵌入式操作系统(EOS)的发展
28
周全 ES体系结构的研究及其应用
嵌入式实时操作系统具有体积小、实时性、并行性、可装载、可固化、高稳定性等特点。从1981年Ready System发展了世界上第1个商业嵌入式实时内核(VRTX32),到今天已经有近20年的历史。20世纪80年代的产品还只支持一些16位的微处理器,如68k、8086等。这时候的RTOS还只有内核,以销售二进制代码为主。
进入20世纪90年代,现代操作系统的设计思想,例如微内核设计技术和模块化设计思想,开始渗入RTOS领域。RTOS支持标准的API,如POSIX, Win32等,并提供与UNIX,Windows一致的开发环境。到目前为止,世界各国有40多家公司,成功推出了200余种嵌入式RTOS,代表性的产品有WinCE,Palm OS,Vxwork,QNX, Lynx和Nucleus等。另外,有一半开发者使用自己开发的操作系统。
1. 操作系统具有的功能模块
⑴ 任务管理(SCHED)(多任务和基于优先级的任务调度) ⑵ 任务间同步和通信(IPC)(信号量和邮箱等) ⑶ 存储器优化管理(MEM)(含ROM的管理) ⑷ 实时时钟服务(CLK) ⑸ 中断管理服务(INT) ⑹ 文件系统(FS) (opt.) ⑺ 网络(NET) (opt.) ⑻ 图形界面(GUI) (opt.) 2. 操作系统的工作特性 ⑴ 操作系统中的任务(Task),也叫做进程(Process),使操作系统调度的执行单元。 ⑵ 系统中的任务有四种状态:运行(Executing),就绪(Ready),挂起(Suspended),休眠(Dormant)
① 运行:获得CPU控制权。 ② 就绪:进入任务等待队列。通过调度转为运行状态。 ③ 挂起:任务发生阻塞,移出任务等待队列,等待系统实时事件的发生而唤醒。从而转为就绪或运行。
④ 休眠:任务完成或因为错误等原因被清除的任务。 ⑶ 系统中只能有一个任务在运行状态(单CPU)。各任务按级别通过时间片分别获得对CPU的访问权。
3.3.2.7 内核
1. 内核的功能
上面介绍的实时操作系统的主要功能和常见的一些操作系统。下面介绍实时操作系统最核心的部分——内核(Kernel)。
大多数实时操作系统内核都可以提供以下服务: ⑴ 资源管理
实时系统中有很多资源,主要是CPU、内存和各种硬件如端口、显示、通信连接等等。 实时操作系统的用户必须将他的程序系统分成相互独立操作的几个部分。这些部分叫做进程。在某一时刻,只有一个进程使用CPU。控制不同进程是操作系统的一个重要任务。
在操作系统的控制下,进程可以分享相同的内存。操作系统决定哪一个进程可以使用实时操作系统的各种不同的资源。
⑵ 时间管理
29
扬州大学硕士学位论文
在实时操作系统中有很多时间要求。大多数实时操作系统有一个时间标志,在定义的时间间隔后调度进程。
⑶ 进程间通信
进程间的联系有多种形式:全局变量、子程序调用、时间关系、优先级关系、中断禁止、信号量、消息等等。
将一个系统划分成多个进程的时候,设计者使它们尽可能的独立。理想的情况,进程间没有联系。
不幸的是,进程之间经常必须有通信。例如,一个终端的键盘进程和屏幕进程。显然它们不能完全独立。在一个好的系统设计中,进程间的联系应该尽可能地少。实时操作系统一个重要的任务是处理进程间通信。
进程间通信在操作系统中需要注意的问题: ① 使进程间连接尽量少。 ② 使进程间连接清晰。 ③ 使用标准的进程间连接。 ④ 允许调试观察进程间的交互。 ⑤ 降低进程响应时间。
2. 单一内核操作系统Linux[12]
Linux 内核由如下几部分组成:内存管理、进程管理、设备驱动程序、文件系统和网络管理等。
⑴ 内存管理
为了让有限的物理内存满足应用程序对内存的大需求量,Linux 采用了称为“虚拟内存”的内存管理方式。Linux 将内存划分为容易处理的“内存页”,在系统运行过程中,应用程序对内存的需求大于物理内存时,Linux 可将暂时不用的内存页交换到硬盘上。
⑵ 进程(SCHED & IPC)
Linux 通过在短时间间隔内轮流运行这些进程而实现“多任务”。这一短时间间隔称为“时间片”,让进程轮流运行的方法称为“调度”,完成调度的程序称为调度程序。
为了完成某特定任务,有时需要综合两个程序的功能,例如一个程序输出文本,而另一个程序对文本进行排序。为此,操作系统还提供进程间的通信机制来帮助完成这样的任务。Linux 中常见的进程间通信机制有信号、管道、共享内存、信号量和套接字等。
⑶ 设备驱动程序
设备驱动程序是Linux 内核的主要部分! 设备驱动程序运行在高特权级的处理器环境中,从而可以直接对硬件进行操作,但正因为如此,任何一个设备驱动程序的错误都可能导致操作系统的崩溃。
坏的驱动程序,会引起系统不稳定,改变系统的响应时间,乃至引起崩溃!响应时间不仅仅是由内核决定的,设备驱动程序也会影响操作系统的响应时间。
⑷ 文件系统(FS)
Linux 利用虚拟文件系统,把文件系统操作和不同文件系统的具体实现细节分离了开来。
Linux 中最普遍使用的文件系统是Ext2,它也是Linux 土生土长的文件系统。但Linux 也能够支持FAT、VFAT、FAT32、MINIX 等不同类型的文件系统,从而可以方便地和其他文件系统交换数据。 ⑸ 网络(NET)
Linux 的网络实现支持BSD 套接字,支持全部的TCP/IP 协议。 Linux 内核的网络部分由BSD 套接字、网络协议层和网络设备驱动程序组成。
⑹ 其他
30