基于_C_OS_II嵌入式实时系统的优先级倒置分析
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图 4 优先级继承协议原理图 在这种情况下 ,MP - task 在 T2 时刻可以获得 HP - task 需要的其他的资源 。在 HP - task 阻塞之前 , HP - task 也可以获得所需的部分资源 。当 L P - task 释 放时 , HP - task 优先级高 ,获得执行 ,就会与 MP - task 发生死锁 。因此 ,优先级继承协议不能消除死锁[4 ,5] 。 这种方法只在占有资源的低优先级任务阻塞了高 优先级任务时 ,才动态地改变任务的优先级 。如果过 程较复杂则需要进行判断 。μC/ OS - II 不支持优先级 继承 ,而且μC/ OS - II 以任务的优先级作为任务标识 , 每个优先级只能有一个任务 ,因此不适宜在应用程序 中使用优先级继承 。 3 . 2 天花板优先级协议方法 天花板优先级协议 (ceiling priority protocol) [4] : 每 个任务的优先级是已经知道的 ,每个任务要求的资源
task) 锁闭共享资源 。L P - task 继续运行直到时间 T2 , 此时 ,高优先级任务 ( HP - task) 剥夺了 L P 的 CPU 使 用权 ,有资格运行 。调度器立即抢占 L P - task 并将上 下文切换到 HP - task 。HP - task 运行到时间 T3 ,此 时 ,它要求共享资源 。因为资源在锁闭的状态 , HP task 必须阻塞并且等待它被释放 。在这一点上调度器 上下文切换到 L P - task 使其获得信号量 。优先级倒 置从 T3 开始 。在时间 T4 ,L P - task 释放共享资源 ,它 触发抢占并且允许 HP - task 恢复执行 。在时间 T4 , 优先级倒置结束 。HP - task 完成于时间 T5 ,此时允许 L P - task 恢复执行并且最后在时间 T6 完成 。 2 . 2 无界优先级倒置
摘 要 :优先级继承协议和天花板优先级协议都可在一定程度上解决实时系统( RTOS) 中的优先级倒置 。文中讨论在嵌 入式实时操作系统μC/ OS - II 中的优先级倒置问题 。通过对比选择合适的优先级天花板协议进行详细的系统分析设计, 在μC/ OS - II 应用中避免优先级倒置问题 。 关键词 :优先级继承协议 ;天花板优先级协议 ;优先级天花板协议 ;μC/ OS - II ;优先级倒置 中图分类号 : TP311 文献标识码 :A 文章编号 :1673 - 629X(2007) 07 - 0098 - 04
收稿日期 :2006 - 10 - 04 作者简介 :李光成 (1981 - ) ,男 ,安徽亳州人 ,硕士研究生 ,研究方向 为计算机网络和信息管理 ; 褚 伟 ,讲师 ,研究方向为计算机网络 、 嵌入式系统和信息系统 。
CPU 使用权被剥夺时 ,μC/ OS - II 用它来保存当前任 务执行的状态(包括任务的优先级 、任务的堆栈指针 、 任务的相关事件 、控制块指针等) , 当任务重新得到 CPU 使用权时 ,任务控制块能够确保任务从当时被中 断的那一点丝毫不差地继续进行 。OS - TCB 全部驻留 在 RAM 中 。内核将系统中每个处于就绪状态的任务 都放在就绪表 ( ready list) 中 ,通过就绪表中的两个变 量 OSRdy Grp[ ]和 OSRdy Tbl[ ]可以快速地查找就绪的 任务 。在μC/ OS - II 中每个任务都是唯一的优先级 , 所以任务的优先级是任务的唯一编号 ,进而可以作为 每个任务的唯一标识[1] 。μC/ OS - II 可以使用控制块 优先级表 OSTCBPrio Tbl [ ] 通过任务的优先级查到任 务控制块的地址 。如图 1 所示 。
Abstract :Bot h priority inheritance protocol and priority ceiling protocol are common solutions to priority inversion in real - time system ( RTOS) . Discuss t he priority inversion in t he real - time system namedμC/ OS - II. To compare t he two solution and good analysis for choose and design to avoid priority inversion in t he use of μC/ OS - II. Key words :priority inheritance protocol ;ceiling priority protocol ;priority ceiling protocol ;μC/ OS - II ;priority inversion
第 17 卷 第 7 期 2007 年 7 月
计算机技术与发展
COMPU TER TECHNOLO GY AND DEV ELOPM EN T
VJoul.l.17 20N0o7. 7
基于μC/ OS - II 嵌入式实时系统的优先级倒置分析
李光成 ,褚 伟
(合肥工业大学 计算机网络研究所 ,安徽 合肥 230009)
第 7 期 李光成等 :基于μC/ OS - II 嵌入式实时系统的优先级倒/ OS - II 的任务调度流程 绪态转为运行态 ,当任务完成后或者挂起时 ,再由 OS2 Sched() 查找最高优先级的任务 ,转而执行此任务 。当 此任务被完成或者中断时 , CPU 的使用 权并不是返还给任务的中断调用处 , 而 是由 OSInt Exit () 对当前系统中优先级最 高的就绪态任务 ( 不一定是先前中断的 任务) , 直到所有的任务都执行完毕后 。 由 OSSched( ) 调用优先级最低的空闲任 务 OSTaskIdle() ,不断地循环执行 ,直到 有新的任务需要执行 。
Analysis of Priority Inversion of Embedded Real - Time OS Based on μC/ OS - II
L I Guang2cheng ,CHU Wei
( Institute of Computer Networks Systems , Hefei University of Technology , Hefei 230009 ,China)
无界优先级倒置 ( unbounded priority inversion) 如 图 3 所示 。
2 μC/ OS - II 的优先级倒置情况
μC/ OS - II 本身是一种抢占式内核 ,对于 多个任务的执行是由内核根据其优先级的高 低来调度的 ,但是任务调度是和 CPU 的频率 等属性相关的 ,所花的时间是一个固定值 ,和 任务数量无关 。对于抢占式内核任务的响应 时间是可以确定的而且是最优化的 。任务的 响应时间是 CPU 寻找当前就绪的最高优先 级任务的时间和任务切换时间之和[2] 。
1 μC/ OS - II 实时模式下的运行原理
μC/ OS - II 是基于静态优先级的抢占式(preemp2 tive) 多任务实时内核 。在系统中 ,最多可以支持 64 个 任务 ,并支持信号量 ( semaphone) 、消息队列 ( message queue) 、邮箱 ( mail box) 等多种常用的进程间通信机 制 。一旦一个任务建立 ,每个任务都具有一个任务控 制块 OS - TCB 。OS - TCB 是一个数据结构 ,当任务的
任务级的调度是由函数ossched完成ostasksw进行运行环境的切换将当前运行环境切换成该任务的运行的环境该任务就可以由就ii嵌入式实时系统的优先级倒置分ii的任务调度流程绪态转为运行态当任务完成后或者挂起时再由os2sched查找最高优先级的任务转而执行此任务此任务被完成或者中断时cpu的使用权并不是返还给任务的中断调用处osintexit对当前系统中优先级最高的就绪态任务不一定是先前中断的任务ossched调用优先级最低的空闲任ostaskidle不断地循环执行直到有新的任务需要执行
有界优先级倒置( bounded priority inversion) :当较 高优先级任务共享一个较低优先级任务的资源时 ,较 低优先级任务已经锁住资源 ,即使较高优先级任务需 要运行 ,也必须等待 。
如图 2 所 示 , 在 时 间 T1 , 低 优 先 级 任 务 ( L P -
图 2 有界优先级倒置
图 3 无界优先级倒置 图 3 ,在 T4 时 刻 , 一 个 不 相 关 的 中 优 先 级 任 务
( MP - task) 抢占它时 ,低优先级任务执行 ,知道时间 T4 ,由于 MP - task 与 HP - task 或者 L P - task 不共享 资源(任务之间没有共享的系统资源 ,不发生互斥) ,故 MP - task 继续执行 ,直到它在时间 T5 完成 。但是时 间 T4 和 T5 的间隔是不知道的 ,因为任意不相关的中 等优先级的任务都可以在此时间间隔内执行 ,因此完 全取决于 MP 任务的多少和各自的执行时间 。
0 引 言
μC/ OS - II 是一种可移植 、可固化 、可裁剪及可剥 夺型的多任务实时内核 ,适用于各种微处理器和微控 制器[1] 。该系统具有占用代码空间小 、效率比较高 、稳 定可靠的特点 ,广泛地用于各个嵌入式系统中 。在嵌 入式系统的应用中实时性是一个重要的指标 ,而优先 级倒置对系统的实时性有着重要的影响 。下面将对其 优先级倒置问题进行分析 ,并针对在设计和使用μC/ OS - II 过程中出现的问题提出一种解决方案 。
3 解决优先级倒置的常用方法
优先级倒 置 是 由 与 对 共 享 资 源 的 互 斥 访 问 引 起
· 1 00 · 计算机技术与发展 第 17 卷
的 ,在任何操作系统中都是不可避免的 ,但可以通过使 用资源访问控制协议来降低对系统实时性能的影响 。 3 . 1 优先级继承协议方法
如图 4 所示 ,3 个具有不同优先级的任务共享一 个资源 。L P - task 在时间 T1 先获得优先级 。在时间 T2 ,MP - task 抢占 L P - task 并且执行到 T3 。此时它 需要资源 , MP - task 阻塞 。在 T3 ,L P - task 继承 MP - task 的优先级恢复执行 。同样 HP - task 和 L P task 也在 T4 到 T6 时刻发生了优先级倒置 。
μC/ OS - II 主要是利用任务控制块 OS - TCB 就绪 表 (ready list) 和控制块优先级表 OSTCBPrio Tbl[ ]来进 行任务调度的 。μC/ OS - II 总是运行进入就绪态任务 中优先级最高的任务 。确定哪个任务优先级最高 ,哪 个任务就可以运行了 , 这一工作是由调度器 ( sched2 uler) 完成的 。任务级的调度是由函数 OSSched ( ) 完成 的 。当调度器确定有更重要的任务需要运行的时候 , 由 OS - TASK- SW() 进行运行环境的切换将当前运行 环境切换成该任务的运行的环境 ,该任务就可以由就
优先级继承协议 (priority inheritance protocol) [3] : 低优先级的任务占用资源 ,而高优先级任务也要访问 该资源的时候 ,让低优先级任务提高自己的优先级 ,提 高到和高优先级任务同样的级别 。这样原来的低优先 级任务就能不中断地执行完成 ,尽快释放共享资源 。
优先级继承协议规则 :如果 R (资源) 在使用 ,则 T (任务) 被阻塞 ;如果 R 空闲 ,则 R 分配给 T ;当较高优 先级任务请求相同资源时 , T 的执行优先级提升到请 求任务的优先级 ; 当释放 R 时 ,任务返回到先前的优 先级 。直到一个较高优先级任务请求共享资源时 ,任 务才提升其优先级 ,所以优先级继承协议是动态的 。 一个不相关的较高优先级任务仍然可以抢占任务 ,这 是基于优先级的 、可抢占调度模式的自然特性[4] 。
在μC/ OS - II 中寻找进入就绪态的最高 优先级任务是通过查找就绪表实现的 。任务
的切换是通过函数 OS - TASK- SW ( ) 来实现的 ,用户 可以在执行任务之前分配任务的优先级 ,但在任务执 行过程中 ,由于抢占式的内核作用 ,多个任务难免会对 共享资源的互斥访问 ,进而会发生优先级倒置(priority inversion) [3] 。下面是可能发生的两种情况 。 2 . 1 有界优先级倒置
task) 锁闭共享资源 。L P - task 继续运行直到时间 T2 , 此时 ,高优先级任务 ( HP - task) 剥夺了 L P 的 CPU 使 用权 ,有资格运行 。调度器立即抢占 L P - task 并将上 下文切换到 HP - task 。HP - task 运行到时间 T3 ,此 时 ,它要求共享资源 。因为资源在锁闭的状态 , HP task 必须阻塞并且等待它被释放 。在这一点上调度器 上下文切换到 L P - task 使其获得信号量 。优先级倒 置从 T3 开始 。在时间 T4 ,L P - task 释放共享资源 ,它 触发抢占并且允许 HP - task 恢复执行 。在时间 T4 , 优先级倒置结束 。HP - task 完成于时间 T5 ,此时允许 L P - task 恢复执行并且最后在时间 T6 完成 。 2 . 2 无界优先级倒置
摘 要 :优先级继承协议和天花板优先级协议都可在一定程度上解决实时系统( RTOS) 中的优先级倒置 。文中讨论在嵌 入式实时操作系统μC/ OS - II 中的优先级倒置问题 。通过对比选择合适的优先级天花板协议进行详细的系统分析设计, 在μC/ OS - II 应用中避免优先级倒置问题 。 关键词 :优先级继承协议 ;天花板优先级协议 ;优先级天花板协议 ;μC/ OS - II ;优先级倒置 中图分类号 : TP311 文献标识码 :A 文章编号 :1673 - 629X(2007) 07 - 0098 - 04
收稿日期 :2006 - 10 - 04 作者简介 :李光成 (1981 - ) ,男 ,安徽亳州人 ,硕士研究生 ,研究方向 为计算机网络和信息管理 ; 褚 伟 ,讲师 ,研究方向为计算机网络 、 嵌入式系统和信息系统 。
CPU 使用权被剥夺时 ,μC/ OS - II 用它来保存当前任 务执行的状态(包括任务的优先级 、任务的堆栈指针 、 任务的相关事件 、控制块指针等) , 当任务重新得到 CPU 使用权时 ,任务控制块能够确保任务从当时被中 断的那一点丝毫不差地继续进行 。OS - TCB 全部驻留 在 RAM 中 。内核将系统中每个处于就绪状态的任务 都放在就绪表 ( ready list) 中 ,通过就绪表中的两个变 量 OSRdy Grp[ ]和 OSRdy Tbl[ ]可以快速地查找就绪的 任务 。在μC/ OS - II 中每个任务都是唯一的优先级 , 所以任务的优先级是任务的唯一编号 ,进而可以作为 每个任务的唯一标识[1] 。μC/ OS - II 可以使用控制块 优先级表 OSTCBPrio Tbl [ ] 通过任务的优先级查到任 务控制块的地址 。如图 1 所示 。
Abstract :Bot h priority inheritance protocol and priority ceiling protocol are common solutions to priority inversion in real - time system ( RTOS) . Discuss t he priority inversion in t he real - time system namedμC/ OS - II. To compare t he two solution and good analysis for choose and design to avoid priority inversion in t he use of μC/ OS - II. Key words :priority inheritance protocol ;ceiling priority protocol ;priority ceiling protocol ;μC/ OS - II ;priority inversion
第 17 卷 第 7 期 2007 年 7 月
计算机技术与发展
COMPU TER TECHNOLO GY AND DEV ELOPM EN T
VJoul.l.17 20N0o7. 7
基于μC/ OS - II 嵌入式实时系统的优先级倒置分析
李光成 ,褚 伟
(合肥工业大学 计算机网络研究所 ,安徽 合肥 230009)
第 7 期 李光成等 :基于μC/ OS - II 嵌入式实时系统的优先级倒/ OS - II 的任务调度流程 绪态转为运行态 ,当任务完成后或者挂起时 ,再由 OS2 Sched() 查找最高优先级的任务 ,转而执行此任务 。当 此任务被完成或者中断时 , CPU 的使用 权并不是返还给任务的中断调用处 , 而 是由 OSInt Exit () 对当前系统中优先级最 高的就绪态任务 ( 不一定是先前中断的 任务) , 直到所有的任务都执行完毕后 。 由 OSSched( ) 调用优先级最低的空闲任 务 OSTaskIdle() ,不断地循环执行 ,直到 有新的任务需要执行 。
Analysis of Priority Inversion of Embedded Real - Time OS Based on μC/ OS - II
L I Guang2cheng ,CHU Wei
( Institute of Computer Networks Systems , Hefei University of Technology , Hefei 230009 ,China)
无界优先级倒置 ( unbounded priority inversion) 如 图 3 所示 。
2 μC/ OS - II 的优先级倒置情况
μC/ OS - II 本身是一种抢占式内核 ,对于 多个任务的执行是由内核根据其优先级的高 低来调度的 ,但是任务调度是和 CPU 的频率 等属性相关的 ,所花的时间是一个固定值 ,和 任务数量无关 。对于抢占式内核任务的响应 时间是可以确定的而且是最优化的 。任务的 响应时间是 CPU 寻找当前就绪的最高优先 级任务的时间和任务切换时间之和[2] 。
1 μC/ OS - II 实时模式下的运行原理
μC/ OS - II 是基于静态优先级的抢占式(preemp2 tive) 多任务实时内核 。在系统中 ,最多可以支持 64 个 任务 ,并支持信号量 ( semaphone) 、消息队列 ( message queue) 、邮箱 ( mail box) 等多种常用的进程间通信机 制 。一旦一个任务建立 ,每个任务都具有一个任务控 制块 OS - TCB 。OS - TCB 是一个数据结构 ,当任务的
任务级的调度是由函数ossched完成ostasksw进行运行环境的切换将当前运行环境切换成该任务的运行的环境该任务就可以由就ii嵌入式实时系统的优先级倒置分ii的任务调度流程绪态转为运行态当任务完成后或者挂起时再由os2sched查找最高优先级的任务转而执行此任务此任务被完成或者中断时cpu的使用权并不是返还给任务的中断调用处osintexit对当前系统中优先级最高的就绪态任务不一定是先前中断的任务ossched调用优先级最低的空闲任ostaskidle不断地循环执行直到有新的任务需要执行
有界优先级倒置( bounded priority inversion) :当较 高优先级任务共享一个较低优先级任务的资源时 ,较 低优先级任务已经锁住资源 ,即使较高优先级任务需 要运行 ,也必须等待 。
如图 2 所 示 , 在 时 间 T1 , 低 优 先 级 任 务 ( L P -
图 2 有界优先级倒置
图 3 无界优先级倒置 图 3 ,在 T4 时 刻 , 一 个 不 相 关 的 中 优 先 级 任 务
( MP - task) 抢占它时 ,低优先级任务执行 ,知道时间 T4 ,由于 MP - task 与 HP - task 或者 L P - task 不共享 资源(任务之间没有共享的系统资源 ,不发生互斥) ,故 MP - task 继续执行 ,直到它在时间 T5 完成 。但是时 间 T4 和 T5 的间隔是不知道的 ,因为任意不相关的中 等优先级的任务都可以在此时间间隔内执行 ,因此完 全取决于 MP 任务的多少和各自的执行时间 。
0 引 言
μC/ OS - II 是一种可移植 、可固化 、可裁剪及可剥 夺型的多任务实时内核 ,适用于各种微处理器和微控 制器[1] 。该系统具有占用代码空间小 、效率比较高 、稳 定可靠的特点 ,广泛地用于各个嵌入式系统中 。在嵌 入式系统的应用中实时性是一个重要的指标 ,而优先 级倒置对系统的实时性有着重要的影响 。下面将对其 优先级倒置问题进行分析 ,并针对在设计和使用μC/ OS - II 过程中出现的问题提出一种解决方案 。
3 解决优先级倒置的常用方法
优先级倒 置 是 由 与 对 共 享 资 源 的 互 斥 访 问 引 起
· 1 00 · 计算机技术与发展 第 17 卷
的 ,在任何操作系统中都是不可避免的 ,但可以通过使 用资源访问控制协议来降低对系统实时性能的影响 。 3 . 1 优先级继承协议方法
如图 4 所示 ,3 个具有不同优先级的任务共享一 个资源 。L P - task 在时间 T1 先获得优先级 。在时间 T2 ,MP - task 抢占 L P - task 并且执行到 T3 。此时它 需要资源 , MP - task 阻塞 。在 T3 ,L P - task 继承 MP - task 的优先级恢复执行 。同样 HP - task 和 L P task 也在 T4 到 T6 时刻发生了优先级倒置 。
μC/ OS - II 主要是利用任务控制块 OS - TCB 就绪 表 (ready list) 和控制块优先级表 OSTCBPrio Tbl[ ]来进 行任务调度的 。μC/ OS - II 总是运行进入就绪态任务 中优先级最高的任务 。确定哪个任务优先级最高 ,哪 个任务就可以运行了 , 这一工作是由调度器 ( sched2 uler) 完成的 。任务级的调度是由函数 OSSched ( ) 完成 的 。当调度器确定有更重要的任务需要运行的时候 , 由 OS - TASK- SW() 进行运行环境的切换将当前运行 环境切换成该任务的运行的环境 ,该任务就可以由就
优先级继承协议 (priority inheritance protocol) [3] : 低优先级的任务占用资源 ,而高优先级任务也要访问 该资源的时候 ,让低优先级任务提高自己的优先级 ,提 高到和高优先级任务同样的级别 。这样原来的低优先 级任务就能不中断地执行完成 ,尽快释放共享资源 。
优先级继承协议规则 :如果 R (资源) 在使用 ,则 T (任务) 被阻塞 ;如果 R 空闲 ,则 R 分配给 T ;当较高优 先级任务请求相同资源时 , T 的执行优先级提升到请 求任务的优先级 ; 当释放 R 时 ,任务返回到先前的优 先级 。直到一个较高优先级任务请求共享资源时 ,任 务才提升其优先级 ,所以优先级继承协议是动态的 。 一个不相关的较高优先级任务仍然可以抢占任务 ,这 是基于优先级的 、可抢占调度模式的自然特性[4] 。
在μC/ OS - II 中寻找进入就绪态的最高 优先级任务是通过查找就绪表实现的 。任务
的切换是通过函数 OS - TASK- SW ( ) 来实现的 ,用户 可以在执行任务之前分配任务的优先级 ,但在任务执 行过程中 ,由于抢占式的内核作用 ,多个任务难免会对 共享资源的互斥访问 ,进而会发生优先级倒置(priority inversion) [3] 。下面是可能发生的两种情况 。 2 . 1 有界优先级倒置