资讯与服务

    (周一至周日 9:00-21:00)
    微信:liu87712531
    微信:lin445385978

    邮箱:87712531@qq.com

    咨询电话:15321970583

网站服务

您当前位置:首页 -> 计算机论文 -> 计算机理论->详细(目前国内最大最全原创最多的免费论文中心)

客服QQ咨询:点击这里给我发消息 点击这里给我发消息

无忧论文,为您指导,让您轻松发表,轻松晋级!

字号大小:


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

作者:来来来 整理:本网站论文网 录入时间:2011-12-14 00:18:12

  摘要:本文分析了实时嵌入式操作系统中几种常用的互斥方法,提出了一种基于任务优先级的禁止抢占法,并分析了该方法的安全性和高效性。

  关键词:多任务 任务优先级 抢占 调度时机 调度器

  A EXCLUSIVE METHOD OF THE REAL-TIME EMBED OPERATING SYSTEMAbstractSome common-used exclusive methods are analyzed in this paper.It advances a no preemptive method whichbased on task priority and analyzes the security and high-efficiency.

  Keywords Multitask Task priority Preemptive Scheduling chance Scheduler

  1 引言

  多任务系统中当一个共享地址空间简单地用于数据交换时,为避免竞争,需要对内存的访问上锁,以保证访问互斥进行。实现资源互斥访问的方法很多,不同之处仅在于互斥的范围和程度。这些方法包括禁止中断,禁止抢占和使用信号量等对资源上锁。

  互斥机制最强有力的方法是禁止中断,这种上锁保证了对CPU的独占访问。在互斥期间,即使外部事件产生而引发相应的中断,系统也不会切换到相应的中断服务程序(ISR),也能保证任务之间的互斥。因此在上锁期间,它可能造成系统对外部事件反应迟钝。这对于大多数实时系统而言,系统的实时性也就得不到保证,因而不适合作为一种通用的互斥方法。然而当涉及到任务和中断服务程序共享数据时,中断上锁又是唯一的方法。但是在任何情况下,应该使中断上锁时间尽量短,这也是所有实时系统的基本要求。

  从本质上讲,信号量机制比禁止中断或禁止抢占提供更精确的互斥粒度,但是在使用时需要注意优先级继承,删除安全性和递归使用等问题,并且当一个任务需要同时获取多个信号量时更要注意避免系统的死锁问题。因此,一般实时嵌入式操作系统都会为用户提供多种互斥手段,以适应不同的使用场合。但对于禁止抢占(禁止调度)这种方法而言,有些系统支持,如UC/OS--II,VxWorks等,而有些系统未必支持,如PSOS等,为了达到禁止抢占这种效果,并且不受具体系统的约束,本文提出了一种新的禁止抢占方法——最高优先级法。

  2 禁止抢占的基本原理

  如果任务不与中断服务子程序共享变量或数据结构,可以使用先禁止然后允许任务切换的手段。此时虽然任务切换禁止了,但中断还是开着的。如果这时中断来了,中断服务子程序会在这一临界区内立即执行。中断服务子程序结束时,即使有更高优先级的任务已经进入就绪态,内核还是返回到原先被中断了的任务,直到执行完给任务切换开锁函数,内核再看看有没有优先级更高的任务被中断服务子程序激活而进入就绪态,如果有则做任务切换。此种机制比中断上锁要弱一些。

  3 最高优先级法

  3.1最高优先级法的基本原理

  在实时嵌入式系统中,各个应用任务依据实时性.重要性被赋予了不同的优先级,内核严格按照优先级的高低来调度任务,高优先级的任务能抢占低优先级的任务以满足实时性的要求。另外,实时嵌入式操作系统一般都提供了动态更改任务优先级的系统调用。我们可以将系统中的最高优先级(HiPriority)预留下来,当某任务需要禁止抢占时,将该任务的优先级提升到最高优先级(PriorityProtect),在该任务将其自身的优先级设回原优先级(UnPriorityProtect)之前,系统中的其它任务不会抢占该任务,该任务可以放心地完成临界区的操作。使用这种方法也可以选择基于优先级的时间片轮转调度。轮转调度可以使优先级相同处于就绪态的任务公平地分享使用CPU。按照优先级调度的原理,考察我们的最高优先级法:当任务处于最高优先级时即使时间片到期任务也不会切换出去,因为就绪队列里优先级最高(为HiPriority)的任务只有一个,不管它是否用完时间片,其它低优先级

首页 上一页 1 2 3 下一页 尾页 1/3/3

上一篇赞自由软件(四)
下一篇优化程序长度的一种方法