当前位置: 首页 > wzjs >正文

淄博专业网站设计搜阅网站建设

淄博专业网站设计,搜阅网站建设,国贸附近网站建设,百度广州分公司销售岗位怎么样1、优先级反转概念 在系统中,有些资源必须是独占使用的,多个任务对这样的资源的并发访问将导致错误的发生。一般来说,对需要独占使用的资源必须使用互斥方法将对其的并发访问串行化。 在优先级多任务系统中引入互斥方案,会导致任务…

1、优先级反转概念

  在系统中,有些资源必须是独占使用的,多个任务对这样的资源的并发访问将导致错误的发生。一般来说,对需要独占使用的资源必须使用互斥方法将对其的并发访问串行化。

  在优先级多任务系统中引入互斥方案,会导致任务优先级反转的问题:假如某时低优先级的任务占有资源,然后又有高优先级的任务申请资源,但因为不能满足而被挂起了,即低优先级任务阻塞了高优先级任务的运行。假如这时又有一个中优先级任务,那么它会把低优先级任务抢占。最终高优先级任务会间接地被中优先级任务抢占了。这种现象叫作优先级反转。举例说明:

  假如 A、D、C 三个任务优先级从高到低排列,任务 A 和 C 共享互斥信号量 R,如果某一时刻任务 C 已经获得互斥信号量 R,而任务 A 此时尝试占用 R,那么任务 A 会因为得不到 R 而阻塞在 R 的任务等待队列中。再假设此时任务 D 因为优先级高于任务 C 从而抢占了 C,进而长期占有处理器资源,那么就相当于中优先级的任务 D 间接阻塞了高优先级任务A的运行。
[图片]

  • T0 时刻,任务 C 处于运行状态,运行过程中,任务 C 获得了共享资源 R。
  • T1 时刻,任务 A 就绪。由于任务 A 优先级高于任务 C,所以它抢占了任务 C,任务 A 被调度执行。
  • T2 时刻,任务 A 需要共享资源 R,但R被更低优先级的任务 C 所拥有,所以任务 A 被阻塞等待该资源。任务 C得到执行。
  • T3 时刻,此时任务 D 就绪,由于任务 D 优先级高于任务 C,所以它抢占了任务 C,任务 D 被调度执行。

  从整个流程上看,T3 时刻,高优先级任务 A 被低优先级任务 D 间接地抢占了。此时优先级最高的任务 A 不仅要等任务 C 运行完,还要等优先级低的任务 D 运行完才能被调度,如果任务 D 和任务 C 需要执行很长时间,那么任务 A 的执行就不能得到保证,整个系统的实时性能很差。

  优先级反转现象对基于优先级调度的实时系统有很大的影响。在基于优先级调度的系统中,处理器资源是按照优先级分配给任务的,就绪的高优先级任务必须实时获得处理器。系统中的各种资源,如果采用按照任务优先级分配的原则,那么高优先级的任务应该是首先被考虑的。优先级反转的问题将打乱这些原则。

2、解决方法

2.1 优先级继承

  当一个任务占有了资源并且随后阻塞了其他申请该资源的任务时,该任务的优先级将临时改变为 “所有尝试申请该资源的任务中的最高优先级”,并以这个临时优先级在临界区执行。当任务释放资源后,则恢复它原有的优先级。

2.2 优先级天花板

  将申请(占有)资源的任务的优先级提升到可能访问该资源的所有任务的最高优先级(这个最高优先级称为该资源的优先级天花板)。

2.3 代码详解

  SylixOS 下,只有互斥锁(API_SemaphoreMPend),支持解决优先级反转问题。

ULONG  API_SemaphoreMPend (LW_OBJECT_HANDLE  ulId, ULONG  ulTimeout)
{
......_EventPrioTryBoost(pevent, ptcbCur);                                /*  尝试提升所属任务优先级      */
......if (pevent->EVENT_ulOption & LW_OPTION_WAIT_PRIORITY) {             /*  按优先级等待                */_EVENT_INDEX_Q_PRIORITY(ptcbCur->TCB_ucPriority, ucPriorityIndex);_EVENT_PRIORITY_Q_PTR(EVENT_SEM_Q, ppringList, ucPriorityIndex);ptcbCur->TCB_ppringPriorityQueue = ppringList;                  /*  记录等待队列位置            */_EventWaitPriority(ptcbCur, pevent, ppringList);                /*  加入优先级等待表            */} else {                                                            /*  按 FIFO 等待                */_EVENT_FIFO_Q_PTR(EVENT_SEM_Q, ppringList);                     /*  确定 FIFO 队列的位置        */_EventWaitFifo(ptcbCur, pevent, ppringList);                    /*  加入 FIFO 等待表            */}
......
}

函数入参:

  • ulId:当前互斥锁句柄
  • ulTimeout:等待时间(是否无穷等待)

  _EventPrioTryBoost 接口中实现了 LW_OPTION_INHERIT_PRIORITYLW_OPTION_PRIORITY_CEILING 两种解决优先级翻转的方法。由代码可见,两种方法,修改的是当前互斥锁持有者的优先级

VOID  _EventPrioTryBoost (PLW_CLASS_EVENT  pevent, PLW_CLASS_TCB   ptcbCur)
{PLW_CLASS_TCB    ptcbOwner = (PLW_CLASS_TCB)pevent->EVENT_pvTcbOwn; /*  获取互斥锁持有者的线程句柄   */if (ptcbOwner->TCB_iDeleteProcStatus) {                             /*  任务已被删除或正在被删除    */return;}/**  如果当前函数调用者 ptcbCur(也就是尝试获取互斥锁的线程)线程优先级,大于 “锁持有者” ptcbOwner 的线程优先级*  说明就需要提高 “锁持有者” ptcbOwner 的线程优先级*  优先级继承算法:将 “锁持有者” ptcbOwner 的线程优先级提高成 “函数调用者” ptcbCur 线程优先级*  优先级天花板算法:将 “锁持有者” ptcbOwner 的线程优先级提高一个固定优先级 EVENT_ucCeilingPriority*/ if (LW_PRIO_IS_HIGH(ptcbCur->TCB_ucPriority, ptcbOwner->TCB_ucPriority)) {                   /*  需要改变优先级              */if (pevent->EVENT_ulOption & LW_OPTION_INHERIT_PRIORITY) {      /*  优先级继承                  */_SchedSetPrio(ptcbOwner, ptcbCur->TCB_ucPriority);} else if (LW_PRIO_IS_HIGH(pevent->EVENT_ucCeilingPriority,ptcbOwner->TCB_ucPriority)) {        /*  优先级天花板                */_SchedSetPrio(ptcbOwner, pevent->EVENT_ucCeilingPriority);}}
}

函数入参:

  • pevent:事件句柄(可以把它简单理解为互斥锁句柄)
  • ptcbCur:当前线程句柄(也就是 API_SemaphoreMPend 调用者线程句柄)

文章转载自:

http://vaqtPGhJ.hcxwf.cn
http://EGTPVU4p.hcxwf.cn
http://gcoyDmAU.hcxwf.cn
http://vNDBJomb.hcxwf.cn
http://E68HH8jc.hcxwf.cn
http://mYEWaUf2.hcxwf.cn
http://N19oKTKw.hcxwf.cn
http://4gjAmNft.hcxwf.cn
http://C7Uo0bVS.hcxwf.cn
http://SmIDP5KA.hcxwf.cn
http://toH5tP0d.hcxwf.cn
http://GflEXyAH.hcxwf.cn
http://MiFuMEDC.hcxwf.cn
http://5G8gpBu4.hcxwf.cn
http://AzI6mk4C.hcxwf.cn
http://0ooIRtRK.hcxwf.cn
http://a98TshCU.hcxwf.cn
http://AKiSlFmR.hcxwf.cn
http://cxR5DpPS.hcxwf.cn
http://KdLvFx3U.hcxwf.cn
http://0Qo5uEiV.hcxwf.cn
http://fWRBgUtp.hcxwf.cn
http://edeZggBG.hcxwf.cn
http://EZPCTx6g.hcxwf.cn
http://WpwpwMz8.hcxwf.cn
http://vbSdO1rq.hcxwf.cn
http://YYbbzgT2.hcxwf.cn
http://avCE37Mf.hcxwf.cn
http://kWSHcHbO.hcxwf.cn
http://7PHsMg0a.hcxwf.cn
http://www.dtcms.com/wzjs/702456.html

相关文章:

  • 19互动网站建设哪个网站可以做卖房
  • net网络网站建设最便宜 双网站建设
  • 织梦教育网站模板宝山网站建设方案
  • 宿迁网站asp与sql网站建设
  • 上海网站开发设计培训职业技能培训网站
  • 平安建设网站镇江网站开发公司
  • 商城网站项目工作的流程杭州优化公司多少钱
  • 上海企业建站推荐ui设计素材库
  • 重庆h5建站广告片制作公司
  • .net 网站开发书籍设计官网公司
  • 手机做网站自己做长沙装修公司招聘网
  • 网站访问大小网上商城项目设计方案
  • 网站友情链接 关键词经常改动网站开发难不难
  • seo推广营销网站网页设计与制作是前端吗
  • 淘客网站seo怎么做wordpress 不显示评论
  • 增城定制型网站建设wordpress+菜单大小
  • 大连专业制作网站进出口外贸公司
  • 山西做网站如何选择房产中介哪家口碑比较好
  • 网站建设刷赞和vip企业网站做的公司
  • 网站维护一年多少费深圳外贸建站
  • 做搜狗手机网站优化快外贸网站建站费用
  • 网站建设设计 昆山一个完整的工程项目流程
  • 免费asp网站模板天眼查企业查询在线官网
  • 南充房产搜索引擎优化工作主要做好哪些方面
  • 成都天府新区网站建设国内互联网公司排名
  • wordpress总是404西安抖音seo推广
  • 营销型网站建设一般包含哪些内容苏州代理记账
  • 网站建设用的工具来宾住房和城乡建设局网站
  • 帮忙建设公司网站打开网站后直接做跳转
  • 青岛网站seo价格沾化网站建设