嵌入式操作系统的优先级逆转与继承机制
软件开发 电子制作基金项目 : 湖南省教育厅科研项目资助 (NO.)【文章摘要】嵌入式操作系统是支撑嵌入式系统的核心技术。 而嵌入式 Linux 由于其开放的源代码, 强大的技术支持, 对众多硬件的支持使其成为嵌入式系统的良好的解决方案。 由于其特殊的应用环境, 嵌入式系统一般都是实时系统, 其对操作系统的实时性能要求很高。 而且基于同样的理由, 嵌入式操作系统的应用程序调试跟踪难度很大, 因此需要一个能对系统进行全面跟踪的工具。【关键词】嵌入式系统 ; 数据处理一、 实时系统概述实时系统与其他普通的系统之间的最大的不同之处就是要满足处理与时间的关系。 在实时计算中, 系统的正确性不仅仅依赖于计算的逻辑结果而且依赖于结果产生的时间。 实时系统可以定义为“一个能够在事先指定或确定的时间内完成系统功能, 能对外部或内部、 同步或异步时间做出响应的系统” 。实时系统的特性可以分成如下两点 :1. 系统应该有在事先定义的时间范围内识别和处理离散的事件的能力。2. 系统能够处理和存储控制系统所需要的大量的数据。根据实时系统的不同侧重点, 可以将实时系统分成不同种类。
按照系统的周期性可以将系统分成周期性系统和非周期性系统 ; 按照系统实时性指标强弱可以将系统分成硬实时系统和软实时系统。二、 嵌入式 Linux 原理分析将 Linux 改造成嵌入式操作系统,实现实时性的途径有两个。 一种是只对Linux 内核进行改造, 另一种是在 Linux 底层增加一个硬件抽象层, 也就是增加一个实时内核以实现实时性。 第一种方法主要采用 POSIX.1b - 1993 的实时标准对Linux 进行改造。 为了缩短 Linux 屏蔽中断的时间, 有人在 Linux 内核中插入可抢先点。RT-Linux 是采用第二种方式实现实时性。 RT-Linux 在中断控制、 进程调度、实时时钟等几个方面对 Linux 内核进行实时性改造。在中断控制方面,RT-Linux 在 Linux和中断控制器硬件间建立了一个软件模拟层。 当 Linux 发出禁止或使能中断时, 软件模拟层的一个变量被置位。 当发生中断时,RT-Linux 根据变量设置情况判断是否通知 Linux 内核进行中断处理。在实时进程的内存空间分配上,RT-Linux 采用方式是所有实时进程以内核模块形式分配内存。
这样所有实时进程是用与 RT-Linux 内核空间同一的地址空间。这样做降低了 RT-Linux 的开发难度, 但必须仔细设计实时程序, 以免使整个系统崩溃。在进程调度方面,RT-Linux 提供的调度器是基于优先级的调度。 但优先级调度并不能适应所有的实时应用, 因此,RT-Linux 把调度器也模块化。 这样使用者可以使用基于不同策略和算法的调度器。在实时时钟方面, 为了实现精确的实时时钟计时, 避免出现进程释放抖动,RT-Linux 采用了英特尔 8354 定时芯片作为时钟中断发生器。在进程通讯方面,RT-Linux 除了提供信号量、 消息队列等通讯机制外。 针对实时进程和非实时进程通讯需要,RT-Linux 还提供了命名管道和共享内存机制。三、 优先级逆转问题与优先级继承机制通过对 RT - Linux 的源代码的分析,发现其信号量的处理代码中存在引起优先级逆转的可能性。 优先级逆转是在基于优先级的进程调度中, 高优先级进程被低优先级进程所阻塞的现象。 只要进程间存在资源申请的竞争情况, 就有可能出现优先级逆转。 为了解决优先级逆转问题, 可以采用优先级继承协议。优先级继承协议的工作原理是 : 若任务 T 初次启动后在就绪任务中具有最高优先级, 则 T 开始执行。
在 T进入临界区之前, 它执行相应的信号量 S的上锁操做 ; 若已上锁, 则 T 在 S 上阻塞,否则执行 P(S), 进入临界区 Z。 退出 Z 时,执行 V (S) 操作, 这时若有被 T 阻塞的高优先级任务, 则唤醒它。 任务 T 首先使用固定优先级运行, 除非它进入临界区并阻塞了更高优先级的任务, 这时 T 将继承被它阻塞的所有任务中的最高优先级, 并在该继承优先级上执行 ; 当 T 退出临界区时, 它恢复进入临界区的优先级。 优先级继承具有传递性。 当前运行的任务为 TL, 若任务 T的优先级大于 TL 当前的优先级, 则 T 启动后将剥夺 TL 的执行。在对 RT-Linux 实现优先级继承协议时, 采用的方式是 : 修改信号量结构, 增加一个链表结构, 保存所有对该信号量成功上锁的进程指针和其原有的优先级 ; 此外还要增加一项纪录, 此项记录记录当前对信号量上锁的进程的最大优先级。 采用这种方式对RT-Linux的内核修改改动最少。对 RT-Linux 的数据结构进行修改后, 还要对 RT - Linux 信号量处理函数进行相应的修改。四、 数据处理数据记录是在线进行的 , 而数据处理是离线进行的。
为了方便对 RT - Linux进程事件进行分析, 跟踪工具的数据都是以 ASCII 码文件的方式保存。 图形处理程序在 MS 系统上进行设计, 所用的编程工具是 。数据处理又分成两部分 : 数据文件处理和绘图。为了对前面所做的工作进行验证 , 本文设计了测试方案。 创建三个实时进程 T1、T2、T3,优先级分别为为 1,5,10 (数值越大优先级越高, ) , 令它们按优先级升序排列依次进入就绪状态 ; 在三个进程所在的内核模块中初始化一个二值信号量, 使优先级为 1 和10 的在进入运行时申请该信号量 ; 优先级为 5 的进程执行有限循环操作 ; 所有进程只运行一次, 运行后退出。运用跟踪工具对整个过程进行跟踪后, 对所得的数据进行了处理。 由图示结果可以看出本文对嵌入式 Linux 的改进工作是成功的, 达到了预期设想的目的。【参考文献】[1] 王晓东, 尹凌, 毛卫良, 盛焕烨,Linux 嵌 入 化 初 步, 计 算 机 工 程,2010 年 5 月[2]Chi-sheng Shih,Jiang Qian, ,Jane Liu,Jia-ru Li,Open Real-Time Linux[3] 黄敦, 如何构造嵌入式 Linux 系统【作者简介】朱建林 (1947--) , 男, 汉族, 湖南湘潭, 主要研究方向 : 计算机控制江万里学院学报 . 2008,21(5)嵌入式操作系统的优先级逆转与继承机制朱建林 郑 荣 刘克友 湖南科技经贸职业学院 袁 毅 涂 宇 湘潭大学机械工程学院