下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式实时系统任务内调度的策略和实现3000字1嵌入式实时系统提供的任务调度应用在一些大型的系统,如移动通信系统中需要同时处理成百上千的呼叫建立、呼叫撤除以及其他各种效劳,仅仅进行任务间调度,将产生频繁的任务间切换,造成任务栈的开销太大,效率明显降低,不合乎通信实时性的要求。任务内调度利用嵌入式实时系统的任务调度机制和消息队列构造的二级调度可以有效的提高系统通信的效率。
2任务调度的局限性
嵌入式实时操作系统提供了非常灵活的任务调度机制,以VxWorks为例,Wind内核采用基于优先级的抢占式调度法作为它的缺省策略,同时它也提供了轮转调度法,同优先级的假设干任务间又可以基于时间片进行调度[1]。每个任务都被分配一定的以数字方式表示的优先级,通常从0到255。操作系统总是每次调度优先级最高的就绪任务执行,低优先级的就绪任务只有在高优先级的任务都处于阻塞态时才有时机被调度运行。任务是可被抢占的,一个可被抢先的低优先级任务在运行时将被一个刚才从阻塞态醒来的高优先级任务所抢占。如果任务工作在时间片方式,某一个就绪任务也可以抢先另外一个优先级相同但时间片已经用尽的运行任务[2]。任务调度将调度问题全部交给操作系统内核,应该说是最省事最平安的一种办法,但是由于系统资源的限制,支持的任务数有限,这种方式在某些软件复杂度不高的产品中是可行的。而在一些大型的系统如移动通信系统中,由于同时可能要处理大量的包括已经建链的、正在建链的和正在拆链的呼叫,这些要同时处理的呼叫数量可能是几百个,也可能到达几千个,此时任务间需要频繁切换,造成任务栈的开销太大,因此效率并不是很高,在这种情况下仅采用任务调度是远远不能满足要求的。因而在任务调度(一级调度)的根底之上继续构建以进程为单位的二级调度就十分必要了。当然随着嵌入式实时操作系统性能的改善、CPU速度的提高,这个问题可能会逐渐弱化。
3二级调度的机制
3.1任务与进程之间的关系
调度任务之间的切换由任务优先级决定,低优先级任务不能抢占高优先级任务,只有高优先级任务进入阻塞状态,低优先级任务才有时机运行,整个过程由操作系统来完成调度。二级调度即进程调度以调度任务为运行载体,就是要利用嵌入式实时操作系统的任务调度机制和消息队列构造自己的以进程为单位的二级调度策略,调度任务根据进程消息的类型和所处的运行状态对进程进行调度。进程调度支持用状态、信号来描述的SDL进程的C程序语言编程结构,具有不同优先级的调度任务分别调度假设干个完成不同功能、有不同时延要求的进程运行,并实现进程的二级调度。进程的优先级别取决与任务的优先级,不同任务下的进程具有不同的优先级。同一任务下的进程具有相同的优先级,在使用优先级作为调度策略的系统中,往往对许多具有相同优先级的进程采用先来先效劳调度算法(FCFS)[3]。因此在每个调度任务下,进程采用FCFS算法,只有在运行进程交出控制权,其它进程才能进行处理。进程与调度任务之间的关系如图1所示。任务由VxWorks根据任务的优先级和任务当前所处的状态(就绪、阻塞、运行)进行调度,调度任务从任务控制块和进程控制块中获得调度进程运行时所需的有关数据。进程也有三种运行状态:就绪态、阻塞态、运行态。因此每个调度任务就有三个队列:就绪进程队列、阻塞进程队列、运行进程队列,这三个队列分别用来指示该调度任务下处于不同运行状态的进程[2]。
3.2进程的构成
每个进程是由假设干函数代码、一个堆栈区、一个静态数据区、一个消息队列和一个进程高低文核心数据结构,即进程控制块(PCB)组成。之所以每个进程都有一个消息队列的原因,是因为如果一个任务下的所有进程共用一个消息队列(可用VxWorks的消息队列实现),那么只能在消息队列上从前到后取消息,如果连续有几个消息同属于一个进程,那么可能使其它进程的处理滞后,不合乎同一任务下不同进程间的公平调度原那么。进程的PCB、堆栈和静态数据区随进程的动态创立而创立、随进程的动态删除而释放。进程的代码实际上是用状态、信号所描述的SDL进程的C程序语言实现。进程作为有限状态机的汇合体,其运行过程实质上是由一个状态机到另外一个状态机的迁移过程,迁移的原因是外部信号(消息)的鼓励。任何时刻,进程总是在某个状态机上等待某个特定的信号,收到信号并做相应的处理后又迁移到另一状态机。在新状态机上,又重复开始了信号的等待。
4二级调度的实现
每个调度任务创立一个VxWorks定长消息队列,任务被创立后就无限循环运行,不断从自己要处理的消息队列中取消息,如果任务下所有进程的消息队列都为空,任务在其所操作的VxWorks消息队列上等待消息,此时,VxWorks令该任务阻塞,直到在其所等待的消息队列上有一个消息到来时,VxWorks才唤醒该任务,这种策略使其它被低优先级调度任务所调度的进程获得运行时机[2]。当一个调度任务被VxWorks调度运行后,该任务将从其所操作的VxWorks消息队列上获得消息,并把取到的消息指派给相应的进程,同时把阻塞且获得消息的进程放到任务的进程就绪队列尾部,然后开始循环调度进程的执行[3]。调度任务每次调度进程就绪队列中的第一个进程,当将被调度的进程是由于同步消息已经应答或延时已经到时而被唤醒时,调度任务将控制转移到保留在进程堆栈中的指令地址;否那么,如果进程消息队列头上的是一条新消息,调度任务依据进程消息队列头上的消息和PCB中的数据为进程的主处理函数传递相应入口参数,并从主处理函数的第一条语句开始执行。进程依据入口参数获得当前消息,完成对应用层的通用外部接口调用和VxWorks的接口函数调用后,调用“退出进程〞外部接口函数通知调度进程已经完成了一次消息处理,并将控制返回给调用任务。控制权返回给调度任务后,调度任务将刚才处理过的进程从进程就绪队列头摘下,并将刚处理过的消息从该进程的消息队列头摘下,如果此时的进程消息队列为空,当前任务将进程置到任务的进程阻塞队列尾部,否那么将进程置到进程就绪队列尾部,任务每调度进程执行一次,所有进程就绪队列中进程的相对位置就要发生一次变化,即循环向前移动了一下,这种调度机制保证了同一任务下的所有就绪进程获得平等的运行时机。
5调度流程
在派发消息链表中的消息时:(1)如果接收消息的进程处在阻塞状态,且此时不是在等待同步应答,消息将成为进程PCB消息队列的当前消息,该进程PCB将从阻塞队列进入就绪队列尾;假设此时在等待同步应答,那么仅将该消息添加到进程PCB消息队列尾。(2)如果接收消息的进程已经在就绪状态,那么将该消息添加到进程PCB消息队列尾。(3)如果待分发的消息是同步定时器超时消息或同步应答消息,则此消息不进入进程PCB的消息队列,直接把该PCB从阻塞队列中挂到就绪队列头。6结论采用二级调度机
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 食品工艺学-第一章-绪论
- 2024专项房地产代购协议范本
- 2024工程招投标协议管理实训解析
- 安全法律法规清单
- 2024年度三方服务销售业务协议范本
- 2024年度综合咨询业务协议
- 2024年度合板销售与购买协议
- 2024年水电安装工程劳务协议细化
- 2024年货物运输保障协议样本
- 2024年招聘流程合规协议书范例
- 牛津译林版八年级英语上册Unit 7 Seasons Grammar 示范公开课教学课件
- 居家养老服务管理(社区居家养老服务课件)
- 妊娠合并症 妊娠合并心脏病(妇产科护理课件)
- QC小组活动程序讲解(自定目标值类型)
- 市民中心信息系统运营维护方案
- 职业卫生检测考试题库(400题)
- 硫系玻璃和红外玻璃的区别
- 画法几何及水利土建制图习题答案
- 《合并同类项》赛课一等奖教学课件
- RITTAL威图空调中文说明书
- 12富起来到强起来 第一课时教案 道德与法治
评论
0/150
提交评论