第二次课.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第二次课

VxWorks及其应用开发 陈香兰 xlanchen@ /~xlanchen 2006年7月 课程内容 VxWorks和Tornado简介 任务和任务间通信 信号、中断处理与定时机制 调试环境与实例分析 网络编程 VxWorks操作系统配置 VxWorks的任务 与任务编程接口 xlanchen@2006.7.12 1. VxWorks的任务 1.1 多任务 软件设计时,通常将应用划分成独立的、相互作用的程序集合。对于每个程序,当其执行时,我们称之为任务 VxWorks实时内核Wind提供基本的多任务环境 在单CPU系统中,多任务构造出多个线程并发执行的假象 系统根据调度算法,调度这些任务运行 任务有自己的上下文 包括CPU环境、系统资源等 任务由系统内核调度运行 上下文切换时,任务的上下文保存在任务控制块(TCB)中 一个任务的上下文包括: 任务的执行点(程序计数器) CPU寄存器和浮点计数器 动态变量和函数调用的堆栈 标准输入/输出以及出错的I/O分配 一个延时定时器 一个时间片定时器 内核控制结构 信号处理器 调试和性能监视值 与Windows系统不同,VxWorks操作系统的内存是线性的 使用单地址空间 所有代码执行在单一、公共的地址空间内 因此地址空间不属于任务上下文 当选用VxVMI时,每个任务各自的地址空间需要进行虚拟地址到物理地址的转换 1.2 任务状态转换 任务状态反映任务当前在系统中所处的情形 任务状态由内核负责维护。因此,任务状态的转换是应用调用了某些内核调用的结果 任务的状态 就绪(READY) 阻塞(PEND) 睡眠(DELAY) 挂起(SUSPEND) DELAY+S PEND+S PEND+T PEND+S+T State+T 任务状态的定义 任务的状态转换图 任务状态队列 1.3 Wind任务调度 调度是针对多任务而言的 调度是指:根据一定的约束规则,将CPU分配给符合条件的任务使用 上述约束规则就是所谓的调度算法 Wind内核默认采用基于优先级的抢占式调度 Priority-based preemptive scheduling 同时还使用轮转(Round-Robin)调度算法 控制任务调度的函数调用 kernelTimeSlice() taskPrioritySet() taskLock() taskUnlock() 基于优先级的抢占式任务调度 基于优先级的抢占式任务调度 系统中的每个任务都拥有一个优先级 任意时刻,内核将CPU分配给处于就绪态的优先级最高的任务运行 抢占: 一旦内核发现有一个比当前正在运行的任务的优先级高的任务就绪,内核立即保存当前任务的上下文,切换到这个高优先级任务的上下文中运行 举例: Wind内核的优先级 256个,编号0~255 优先级0最高,255最低 任务的优先级在创建时指定 任务可以调用taskPrioritySet改变自己的优先级 taskPrioritySet/Get的使用举例 taskPrioritySet/Get的使用举例 轮转调度 轮转调度通常配合基于优先级的抢占式调度进行 轮转调度: 让优先级相同的、处于就绪态的任务公平地共享CPU 轮转调度使用时间片来分配CPU 每个任务执行一个预先确定的时间段(即时间片) VxWorks中,调用函数kernelTimeSlice()来使用轮转调度 参数为时间片的长度 (即:在每个任务放弃CPU给另一个同优先级的任务之前,系统允许它运行的最大时间长度) 使用轮转调度算法时,每个任务都有一个运行时间计数器 随着系统时钟增加而增加 达到规定的值(时间片的值)时,清0 此时,任务放到所在优先级队列的尾部 一个新加入的任务放在所属优先级队列的尾部,计数器初始为0 当被高优先级任务抢占时,保存它的当前运行时间计数器,下次被调度时,恢复这个值 举例 抢占上锁 在实际应用中,有时候需要避免抢占,以免发生不合理的抢占或发生一些意想不到的情况 Wind的调度器提供 taskLock()和taskUnlock() 来禁止/允许抢占 当一个任务调用taskLock(),将会禁止抢占,在该任务执行时,将不会发生基于优先级的抢占 注意:禁止抢占只能防止任务的上下文切换,不能禁止中断 禁止抢占可以用来实现互斥 但是,应当尽量使禁止抢占的时间最小 1.4 任务异常处理 程序代码或数据的错误可能引起硬件异常状态,例如 非法指令 总线或地址错 除数为0 等等 VxWorks的异常处理包处理这些异常 默认的异常处理 挂起引起异常的任务 保存该任务在异常点的状态 将关于异常的描述送到Tornado开发工具中 同时内核和其他任务不会被中断,系统继续执行 定制的异常处理 VxWorks允许任务使用信号功能激活自己的异常处理程序 如果一个

文档评论(0)

busuanzi + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档