- 1、本文档共127页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式操作系统 任务优先级 ? VxWorks支持256个优先级,编号0~255,优先级0 最高,255最低,一般0~99分配给系统任务, 100~255分配给用户任务。 ? 任务的优先级在创建时指定 ? 任务可以调用taskPrioritySet改变自己的优先级 嵌入式操作系统 应用示例 ? 下面程序,创建了3个优先级各不相同的任务: 嵌入式操作系统 嵌入式操作系统 嵌入式操作系统 嵌入式操作系统 ? 演示结果: 嵌入式操作系统 ? 如何修改程序,使得任务的执行顺序变为: taskOne,taskTwo,taskThree? 嵌入式操作系统 ? 修改程序,使得taskOne、taskTwo同时具有最高 优先级运行: 嵌入式操作系统 ? 演示结果 嵌入式操作系统 ? 基于优先级的抢占是任务调度的缺陷: 当多个相同优先级的任务需要共享一台处理器 时,如果某个执行的任务永不阻塞,那么他将一 直独占处理器,其它相同优先级的任务就没有机 会执行。 嵌入式操作系统 轮转调度 ? 轮转调度通常配合基于优先级的抢占式调度进行 ? 轮转调度:让优先级相同的、处于就绪态的任务 公平地共享CPU ? 轮转调度使用时间片来分配CPU – 每个任务执行一个预先确定的时间段(即时间 片) ? 在大多数系统里,并不一定需要使用轮转调度算 法。但在相同代码被多份复制执行时,如在用户 接口任务内执行时,需要使用轮转调度算法 嵌入式操作系统 ? VxWorks中,调用函数kernelTimeSlice()来实现 轮转调度 – 此函数位于kernelLib库中 – 参数为时间片的长度(tick数) (即:在某个任务放弃CPU给另一个同优先级 的任务之前,系统允许它运行的最大时间长 度) 如kernelTimeSlice(sysClkRateGet()/2)表示时间 片为0.5秒 – kernelTimeSlice(0)——关闭时间片轮转调度策 略 嵌入式操作系统 ? 使用轮转调度算法时,每个任务都有一个运行时 间计数器 – 随着系统时钟增加而增加 – 达到规定的值(时间片的值)时,清0 ? 此时,任务放到所在优先级队列的尾部 – 一个新加入的任务放在所属优先级队列的尾部,计数 器初始为0 – 当任务被阻塞或者被更高优先级的任务抢占,将保存 其时间计数值,并且在其重新执行时恢复计数 嵌入式操作系统 嵌入式操作系统 应用实例 ? 下面的例子创建三个优先级相同的任务,分别向 控制台输出他们的任务id号和任务名。 – s5_rrsched()调用kernelTimeSlice()允许系统使用轮转调 度。 – 本例中使用的时间片TIMESLICE为1/60秒(函数 sysClkRateGet()返回每秒的时钟tick数) – 在设置了调度时间片后,程序发起三个任务,注意: 必须保证发起的任务优先级要低于100。 – 另外为了演示时间片轮转的效果,要保证任务具有足 够的执行时间,在本例中使用一个循环次数为 LONG_TIME的长循环。 嵌入式操作系统 嵌入式操作系统 嵌入式操作系统 嵌入式操作系统 嵌入式操作系统 ? 演示结果: 嵌入式操作系统 ? 增加第四个任务,其优先级为80,他和其他任务 输出相同的信息。 嵌入式操作系统 ? 取消时间片轮转: – 第一种方法: – 第二种方法: 嵌入式操作系统 ? 演示结果 嵌入式操作系统 任务切换 ? 任务切换:终止正在运行的任务(当前任务), 转而去运行另外一个任务 ? 任务的切换实质就是断点数据的切换,需要完成 以下工作: 把被终止的任务断点指针(PC)保存到任务堆栈中 把处理器通用寄存器的内容保存到任务堆栈中 把被终止的任务堆栈指针当前值(SP)保存到该任务的TCB中 获得待运行任务的TCB 使处理器通过TCB获得待运行任务的SP 把待运行任务堆栈中通用寄存器的内容回复到处理器的通用寄存 器中 – 使处理器获得待运行任务的断点指针(PC) – – – – – – 嵌入式操作系统 3.2 任务调度时机 本章难点 ? 三个关键函数 – reschedule – intExit – windExit 嵌入式操作系统 ? 调度时机 – – – – – – – – – 任务相关的操作:生成/删除/挂起/恢/Lock/Unlock.. WD的创建/开始和销毁 TICK时钟中断 信号量的某些操作Give/Take E
文档评论(0)