欢迎来到天天文库
浏览记录
ID:24591408
大小:53.50 KB
页数:6页
时间:2018-11-15
《一种基于比特表的实时多任务新调度算法》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、一种基于比特表的实时多任务新调度算法
2、第1内容显示中摘要:主要讨论常见的几种多任务实时性处理算法的优缺点,提出一种更能满足多任务实时性处理的算法——基于比特表的时间片算法。这种算法主要是把常规的比特表中的任务按照时间片进行分配,以很好地完成实时性要求高且任务时间较长的任务,而不影响其它实时性要求更高的任务的完成。关键词:比特表时间片实时处理引言在微机控制领域中,许多单片机应用系统是实时控制系统RTCS(RealTimeControlSystem)。在实时控制系统中,为了很好地完成外界信息的实时测量、计算和相应的多种实时控制操作,必
3、须达到两个设计目标;实时性和并行性。即既要保证系统对外界信息以足够快的速度进行相应处理,又要同时完成多种任务操作。在这里,多种任务之间的调度是个关键。RTCS中允许多个实时任务并行地运行。例如,一测控系统中,具有数据采集、数据计算、键盘处理、定时打印等任务。在单机系统中,这些任务在宏观上是同时运行的,但在微观上只有一个任务运行。在RTCS中每个任务有三种状态,即运行状态、就绪状态和空闲状态。某个任务一旦建立后即处于这三种状态之一。处于运行状态的任务独占CPU和其它一些资源;就绪状态是某个任务现在应该运行,但由于其它任务正在运行,故
4、只能暂时等待;当激发某个任务的条件不完备时,此任务就处于空闲状态。RTCS中的多个任务依靠任务调度程序来决定系统中哪个任务可以获得CPU等资源或应暂时退出运行状态等,从而完成每个任务三态间的转换。在RTCS中,任务调度算法的优劣直接关系到系统的实时性能与并行性能。RTCS中较简单的任务调度算法有“先来先执行的调度算法”、“按时间片循环执行的调度算法”。前者,当实时性比较差的任务长时间占用CPU时,会使得实时性较高的任务得不到及时处理,影响系统的实时性;后者,按照“先入先出”的原则激活某个任务,并分配给它们相等的时间片,从而使得多个
5、任务有平等的享用CPU的权利。当时间片用完时,让任务“暂时”又处于就绪状态,并激活下一个任务。这种算法的实时性有一定程序的提高,但由于各任务简单均匀地循环轮回,从而使得实时性要求较高的任务得不到优先处理。由于各时间片相等且固定,很容易被某些紧急任务打断。在实时性要求较高而且任务较多的复杂情况下,各个任务的实时性要求不尽相同,不能简单地均匀分时处理任务。基于比特表的任务调度算法,关键在于将CPU的全部时间化成若干个相等的时隙,同时根据任务的数目制定一张表格,以此来指示某一时刻的任务运行。它把任务按照实时性要求分成中断级、时钟级、基本
6、级三类,而且它们的优先级依次递减。优先级越高,就越处于比特表的顶端位置。比特表是按照任务的优先级排队的,首先满足实时性较强的中断级和时钟级,而不管实时性最低的基本级任务。这样,时钟级任务一定能得到即时有效的处理,其实时性可以得到较好的保障,基本级任务可以没有时间限制。但是,时钟级任务的实时性并不是完全能够得到保障。下面举例讨论比特表算法的不足之处。图2任务的启动顺序和运行时间假定有表1所示的五种任务,按照常规比特表算法根本无法设计出这样的比特表。当时钟级的各级每次运行时间之和没有达到5ms时,比特表算法能够很好地满足系统实时性要求
7、;然而,当中断级和时钟级的每次运行时间之和大于或者等于最高级实时性要求,更有甚者,当有一个时钟级任务的运行时间超过最高级实时性要求时,比特表算法就会失效。因为常规的比特表算法要求,只要激活比特表中安排的中断级和时钟级任务就必须一次执行完,否则,如果这个任务被中断就无法再得到执行。由于图像处理的运行时间为5ms,加上中断级任务执行时间,因此设计时隙必须大于5ms;而比特表的设计方法时隙只可能小于等于5ms(中断级任务和实时性最高的时钟级任务决定的)。所以,无论安排怎样的比徨表都无法使任务D满足实时性要求。基于这两种情况,本文提出一种
8、用赋有优先权的时间来填充比特表的算法,以改善这两种情况。表1实时性要求和各任务运行时间表序号任务优先级实时性要求/ms每次运行时间/msA数据采集时钟级51B端口检测时钟级102.5C键盘扫描时钟级151D图像处理时钟级305E打印数据基本级无实时要求2001比特表的改进算法这种改进算法的关系在于把各任务划分为若干时间片,然后再根据实时性要求填入比特表中。根据比特表的设计方法,时隙间隔定为5ms,总时隙数为LCM(10/5,20/5,30/5)=6。把各中断级和时钟级任务运行时间的最大公约数定为时间片。即有如下计算公式:T=GCD
9、{Ti}T为时间片,Ti为时钟级和中断级任务实时性要求,GCD(GreatestmonDivisor)求最大公约数,LCM(LoonMultiple)求最小公倍数。本例中的时间片T=GCD{0.5,1,2.5,1,5}=0.5ms。(假设时钟中断处
此文档下载收益归作者所有