优先级反转问题以及解决方式_第1页
优先级反转问题以及解决方式_第2页
优先级反转问题以及解决方式_第3页
优先级反转问题以及解决方式_第4页
优先级反转问题以及解决方式_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、(1)8Task3Task完毕,锁,T维续(1Task2运行完毕,TASK3维续运行(12)假设有个任务设,行首先去获得轮到因为完了才轮到优先级最咼,优先级其次,优先级最低。假k2阻塞在内核对象上比如等,然后轮到去运获得了一个锁,然后运行了一段时间后,中断唤醒了出中断的时候马上跑因为的优先级高,然后也尝试锁,,但是已经得到了这个锁,所以只能睡眠,继续跑,这个时候中断唤醒了出中断的时候轮到的优先级比要高。运行完了然后给要咼。跑,去跑,跑去跑。优先级反转问题以及解决方式优先级反转的问题是每一个实时操作系统所必须考虑到的问题,也是嵌入式软件面试所常提问的问题。下面会详细阐述优先级反转产生的根源,以及

2、解决方式。首先来谈谈优先级反转问题的出现的方式。下图是演示优先级反转出现的问题。Task1Taskl抢占Task3占有,TasklR能睡(10)(11)Task3并运行眠OTask2Th“I申请锁,但被Task3被Task2占以上的现象就是一个完整的优先级反转的问题出现的现象,整个逻辑貌似都是完全没有任何问题的,唯一的问题就是跑完了再去跑也就是说插了一脚。的优先级比起要低的,这样的话要同时承受和跑完才能继续跑。承受跑完是没有任何争议的,因为临界区的原因,只能等跑完,但是等待跑完确是不应该的,因为这两个任务之间毫无关系。解决优先级反转的方式有两种,第一种是优先级置顶的方法,第二种是优先级继承的方

3、法,详细请参考以下mutex章节。utexX作原理以及应用mutex的出现是为了解决优先级反转的问题,由于优先级反转对实时性影响太大,所以mutex的稳定性直接影响了实时性。纵观目前多种实时操作系统mutex的设计原理是多多少少有一点问题的,很多t没有实现mutex优先级逐步还原的问题,导致了实时性以及其它的一些逻辑错误等等。的mutex模块成功弥补了其它实时系统在这方面的不足。的mutex同时支持优先级置顶和优先级继承的方式来解决优先级反转的问题。优先级置顶方法需要给每一个mutex静态指定一个优先级,第一个获得mutex的任务会把优先级提高到静态指定的优先级。优先级置顶的方法需要把竞争这个

4、mutex的所有任务优先级都要搞清楚,通常适用于系统中运行的任务优先级不改变的情况。如果一个任务会获得多层嵌套的mutex锁,这个时候使用优先级继承的方法设计不好的话容易死锁,但是使用优先级置顶的方法能够避免此种情况出现。下图是任务t3获得mutxl的情况,示例如下假设访问mutexl的任务有tltt3t1的优先级为0t的优先级为,t3优先级为30,数字越小表明优先级越高。这个时候mutex1指定的优先级置顶的优先级是19,即比tlt的优先级要高。假设任务t3的首先获得mutexl这个时候任务的优先级会提升为,所以会运行完之后释放锁轮到运行综上所述,优先级置顶的话需要事先静态分析清楚,的确是比

5、较麻烦的,好处是系统可以一目了然,不存在暗箱,做到系统每一个点都是很清楚。再来谈谈优先级继承的方法,所谓优先级继承的含义是,当优先级反转发生的时候,低优先级任务的优先级被自动提升为高优先任务的优先级,示例如下:Task1|抢占了然后也尝鬱获得锁,因为已经获得了锁,所以只能睡眠,就在此时,任务的优先级被任务拉升为。任务会接着继续运行,如果此时被唤醒,因为优先级低于所以不会抢占所以会继续运行直到释放锁,然后的优先级会被还原到最初值,接着轮到最高优先级任务运行。整个过程的关键是中间优先级的任务不会打断也就避免了优先级反转的问题。优先级反转的问题掌握着实时系统的命脉,这个问题上处理的不当得话,用户的系

6、统实时性是得不到任何保障的,纵观目前的在这个问题上很多都是处理的不当的,具体以下分析代码会细谈这个问题。应用函数功能:此函数创建了一个此函数的参数有4个,分别含义如下:为实体控制块的地址。是这个的名字是指以下的二种之一:指定采用优先级置顶的方法。指定采用优先级继承的方法。不采用任何方法。如果米用了的话,可以为任何的值。函数的返回值:示例代码如下这锁。个如果不能成功获得锁的话,任务可能会睡眠函数功能:此函数会试图得到一个或者返回。此函数的参数有2个,分别含义如下:为实体控制块的地址。为具体的超时函数,有以下选择:得不到立马返回为超时时间,单位为系统,得不到时经过一定的超时时间会返回。得不到时会永

7、远阻塞住。函数的返回值:成功得到得不到而且为得不到而且系统的抢占关了。得不到期间,睡眠的时候被异常中断。得不到期间超时了。得不到期间,该对象被意外删除掉。函数功能释放一个函数的返回值::成功释放没有让原先持有者释放。此函数的参数有为个,含义如下实体控制块的地址。函数功能:删除一个如果有任务阻塞在会唤醒这些任务并可能还原锁获得者原先的优先级。系统内部函数功能:改变一个任务优先级的时候会调用到此函数。这个函数主要限制任务优先级的改变,因为当一个任务持有的时候,优先级是不能被随意设置成任何值的,不然会导致优先级反转的问题出现。所以必须要有限制的改变。当然一个任务释放了所有锁的时候,优先级会自动变为所

8、设置的优先级。函数的返回值::优先级超越了该对象优先级置顶的优先级。:被限制过的优先级。此函数的参数有3个,分别含义如下:被改变优先级的任务的控制块地址。:改变成具体的优先级。错误填充,如果可能的话。函数功能:此函数的功能是释放并可能逐步还原这个任务的优先级。此函数的参数有个,分别含义如下:为释放的任务:为释放的对象。函数功能:如果改变阻塞在上的任务的优先级时会调用此函数,可能会动态的改变下持有者的任务优先级。模块的具体实现原理配套视频会详细讲解,有兴趣深入的读者可以看视频了解。函数功能当阻塞在获得这个上的任务超时,终止,或者被删除的时候,可能需要重新调整锁的任务优先级。此函数的参数有1个,含义如下:为阻塞在内核对象上的任务。函数功能:当任务被删除时,会调用此函数。此函数会处理这个任务所获得的并自动调整锁的获得者。此函数的参数有1个,含义如下:为即将被删除的任务。对比其它实时操作系统的比较其它实时系统,比如等占尽了优势,因为当一个任务经历两次以上的优先级提升时,其它系统基本都不支持优先级的逐步还原,那样带来的后果是不能解决优先级反转带来的问题。而且像

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论