实时嵌入式系统中的一种互斥方法
3.3最高优先级法的嵌套计数实现
先来定义操作规则:COUNT为系统中的全局变量,初始化为0。
PriorityProtect()
{
if(!COUNT) ……(1)
利用具体的系统调用把当前任务设成最高优先级 ……(2)
COUNT++; ……(3)
}
UnPriorityProtect()
{
COUNT--;……(4)
if(!COUNT) ……(5)
利用具体的系统调用把当前任务设成原先的优先级……(6)
}
再来分析一下这种方法的安全性。COUNT是全局变量,对它的访问要防止竞争条件。但巧妙的是一旦我们把任务用操作系统原语调用设成最高优先级后,对COUNT的访问将是独占的;一个任务首次调用PriorityProtect()时在语句(1)处有竞争条件,但一次只能有一个任务通过(2)处的原语成为最高优先级,只要我们正确地配对使用这两个函数,当这个任务最终退出最高优先级状态时COUNT必为0,并不影响其它任务在(1)处的判断。这种方法的高效性也是明显的,在嵌套使用的里层仅仅进行嵌套计数的计算,并不用进行优先级的设置。
4 结论
尽管不同的实时嵌入式操作系统给用户提供的系统调用接口不尽相同,但是它们所准遵循的基本原理都是相同的。上述关于禁止任务抢占的普通实现以及嵌套计数实现提供的都是实现思想,在实际应用中很容易结合所使用的具体的操作系统写出PriorityProtect()和UnPriorityProtect()的实现代码。
[1] Labrosse Jean J,uc/OS-II-源码公开的实时嵌入式操作系统,邵贝贝译,北京:中国电力出版社,2001.
[2] 孔祥营等,嵌入式实时操作系统VxWorks及其开发环境Tornado,北京:中国电力出版社,2001.
Tags:
作者:佚名评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论