实时嵌入式系统中的一种互斥方法

实时嵌入式系统中的一种互斥方法

ID:11742807

大小:18.25 KB

页数:10页

时间:2018-07-13

实时嵌入式系统中的一种互斥方法_第1页
实时嵌入式系统中的一种互斥方法_第2页
实时嵌入式系统中的一种互斥方法_第3页
实时嵌入式系统中的一种互斥方法_第4页
实时嵌入式系统中的一种互斥方法_第5页
资源描述:

《实时嵌入式系统中的一种互斥方法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、实时嵌入式系统中的一种互斥方法多任务系统中当一个共享地址空间简单地用于数据交换时,为避免竞争,需要对内存的访问上锁,以保证访问互斥进行。实现资源互斥访问的方法很多,不同之处仅在于互斥的范围和程度。这些方法包括禁止中断,禁止抢占和使用信号量等对资源上锁。互斥机制最强有力的方法是禁止中断,这种上锁保证了对CPU的独占访问。在互斥期间,即使外部事件产生而引发相应的中断,系统也不会切换到相应的中断服务程序(ISR),也能保证任务幼之间的互斥。因此在上锁期间,它可能造成系统对外部事件反应迟钝。这对于大多溉数实时系统而言,系统的实时性也就得不澄到保证,因而不适合作为一种通用的

2、互斥湛方法。然而当涉及到任务和中断服务程序蓼共享数据时,中断上锁又是唯一的方法。б但是在任何情况下,应该使中断上锁时间歹尽量短,这也是所有实时系统的基本要求幞。从本质上讲,信号量机制比禁止中睦断或禁止抢占提供更精确的互斥粒度,但醍是在使用时需要注意优先级继承,删除安元全性和递归使用等问题,并且当一个任务慵需要同时获取多个信号量时更要注意避免≥10/10系统的死锁问题。因此,一般实时嵌入式操作系统都会为用户提供多种互斥手段,以适应不同的使用场合。但对于禁止抢占妤这种方法而言,有些系统支持,如UC/迨OS--II,VxWorks等,而有ホ些系统未必支持,如PSOS等

3、,为了达矽到禁止抢占这种效果,并且不受具体系统粒的约束,本文提出了一种新的禁止抢占方舒法——最高优先级法。2禁止抢占的穸基本原理如果任务不与中断服务子程≠序共享变量或数据结构,可以使用先禁止顽然后允许任务切换的手段。此时虽然任务哧切换禁止了,但中断还是开着的。如果这┶时中断来了,中断服务子程序会在这一临澜界区内立即执行。中断服务子程序结束时闲,即使有更高优先级的任务已经进入就绪倡态,内核还是返回到原先被中断了的任务课,直到执行完给任务切换开锁函数,内核苟再看看有没有优先级更高的任务被中断服务子程序激活而进入就绪态,如果有则做妁任务切换。此种机制比中断上锁要弱一些カ

4、。3最高优先级法3.1最高优先级法的基本原理10/10在实时嵌入式系统榧中,各个应用任务依据实时性.重要性被汉赋予了不同的优先级,内核严格按照优先徼级的高低来调度任务,高优先级的任务能栎抢占低优先级的任务以满足实时性的要求荭。另外,实时嵌入式操作系统一般都提供蒇了动态更改任务优先级的系统调用。我们弑可以将系统中的最高优先级(HiPri经ority)预留下来,当某任务需要禁简止抢占时,将该任务的优先级提升到最高襄优先级(PriorityProtec勋t),在该任务将其自身的优先级设回原号优先级(UnPriorityProt树ect)之前,系统中的其它任务不会抢瞢占该

5、任务,该任务可以放心地完成临界区的操作。使用这种方法也可以选择基于优淦先级的时间片轮转调度。轮转调度可以使┒优先级相同处于就绪态的任务公平地分享冰使用CPU。按照优先级调度的原理,考屈察我们的最高优先级法:当任务处于最高粤优先级时即使时间片到期任务也不会切换出去,因为就绪队列里优先级最高(为HiPriority)的任务只有一个,梭不管它是否用完时间片,其它低优先级的×任务都无法抢占它。3.2最高优先级法的普通实现我们先来分析下面的簧一种在实际开发工作中会遇到的情况,任平务A中有一段临界区代码,并且假设该临10/10界区代码不包含因等待资源而不得不让出醛CP

6、U的可能:PriorityProtect();……//代码1Func();//函数调用……输//代码2UnPriorityP冀rotect();而函数Func蕲()如下定义:Func(){掾……//代码310/10Priorit污yProtect();……//代9码4UnPriorityProt踵ect();……//代码5}当Func()执行完时,任务A的优《先级被设回了原先的优先级,代码2将受不到保护!因此,我们需要对函数Pri殇orityProtect()和UnP啦riorityProtect()进行改造:函数PriorityProte缜ct()需返回设置

7、最高优先级之前任务嗅的优先级,而函数UnPriority槌Protect()却不一定总是设置任务原先的优先级,它设置的是与之配对的PriorityProtect()返樊回的优先级。这两个函数都是成对使用的「,不管嵌套使用了多少次都不会出错,举↑例如下:10/10OldPriority=贰PriorityProtect();贶……//代码1Func();瑜//函数调用……//代码2U栀nPriorityProtect(O徉ldPriority);而函数F份unc()如下定义:Func()慝{intOldPriorit彦y;……//代码310/10OldPr擤i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。