2VxWorks的任务与任务编程接口

上传人:飞*** 文档编号:52254431 上传时间:2018-08-19 格式:PPT 页数:81 大小:1.31MB
返回 下载 相关 举报
2VxWorks的任务与任务编程接口_第1页
第1页 / 共81页
2VxWorks的任务与任务编程接口_第2页
第2页 / 共81页
2VxWorks的任务与任务编程接口_第3页
第3页 / 共81页
2VxWorks的任务与任务编程接口_第4页
第4页 / 共81页
2VxWorks的任务与任务编程接口_第5页
第5页 / 共81页
点击查看更多>>
资源描述

《2VxWorks的任务与任务编程接口》由会员分享,可在线阅读,更多相关《2VxWorks的任务与任务编程接口(81页珍藏版)》请在金锄头文库上搜索。

1、University of Science and Technology of ChinaVxWorks及其应用开发 University of Science and Technology of China2课程内容 VxWorks和Tornado简介 任务和任务间通信 信号、中断处理与定时机制 调试环境与实例分析 网络编程 VxWorks操作系统配置University of Science and Technology of ChinaVxWorks的任务 与任务编程接口xlanchen2006.7.12University of Science and Technology of Ch

2、ina41. VxWorks的任务 1.1 多任务 软件设计时,通常将应用划分成独立的、 相互作用的程序集合。对于每个程序,当 其执行时,我们称之为任务 VxWorks实时内核Wind提供基本的多任 务环境 在单CPU系统中,多任务构造出多个线程 并发执行的假象 系统根据调度算法,调度这些任务运行University of Science and Technology of China5 任务有自己的上下文 包括CPU环境、系统资源等 任务由系统内核调度运行 上下文切换时,任务的上下文保存在任务 控制块(TCB)中 一个任务的上下文包括: 任务的执行点(程序计数器) CPU寄存器和浮点计数器U

3、niversity of Science and Technology of China6 动态变量和函数调用的堆栈 标准输入/输出以及出错的I/O分配 一个延时定时器 一个时间片定时器 内核控制结构 信号处理器 调试和性能监视值University of Science and Technology of China7 与Windows系统不同,VxWorks操作系统 的内存是线性的 使用单地址空间 所有代码执行在单一、公共的地址空间内 因此地址空间不属于任务上下文 当选用VxVMI时,每个任务各自的地址空 间需要进行虚拟地址到物理地址的转换University of Science and

4、 Technology of China81.2 任务状态转换 任务状态反映任务当前在系统中所处的情 形 任务状态由内核负责维护。因此,任务状态 的转换是应用调用了某些内核调用的结果University of Science and Technology of China9任务的状态 就绪(READY) 阻塞(PEND) 睡眠(DELAY) 挂起(SUSPEND) DELAY+S PEND+S PEND+T PEND+S+T State+T任务只需要等待CPU资源由于CPU以外的资源不可用而阻塞任务处于睡眠状态这种任务状态不能执行。主要用于调 试。不会约束状态转换,仅仅约束任 务的执行。因此,

5、pended-suspended任 务仍然可以解锁,delayed-suspended 任务仍然可以唤醒既处于睡眠状态又处于挂起状态既处于阻塞状态又处于挂起状态超时阻塞超时阻塞并挂起处于State带有一个继承优先级的任务状态University of Science and Technology of China10任务状态的定义University of Science and Technology of China11挂起任务的状态转换图任务创建时,处于挂起状态要使刚创建的任务就绪, 要激活该任务使用spawning原语,可以直接 创建并激活一个任务任务可以在任何状态下被删除semTake

6、()/msgQReceive()taskDelay()taskSuspend()semGive()/msgQSend()taskSuspend()延时已到taskSuspend()taskResume()taskResume()/taskActivate()taskResume()阻塞睡眠就绪执行调度抢占University of Science and Technology of China12任务状态队列University of Science and Technology of China131.3 Wind任务调度 调度是针对多任务而言的 调度是指:根据一定的约束规则,将CPU分配

7、给符合条件的任务使用 上述约束规则就是所谓的调度算法 Wind内核默认采用基于优先级的抢占式调度 Priority-based preemptive scheduling 同时还使用轮转(Round-Robin)调度算法University of Science and Technology of China14控制任务调度的函数调用 kernelTimeSlice() taskPrioritySet() taskLock() taskUnlock()控制轮转调度改变任务的优先级禁止任务调度允许任务调度University of Science and Technology of China1

8、5基于优先级的抢占式任务调度 基于优先级的抢占式任务调度 系统中的每个任务都拥有一个优先级 任意时刻,内核将CPU分配给处于就绪态的 优先级最高的任务运行 抢占: 一旦内核发现有一个比当前正在运行的任务的 优先级高的任务就绪,内核立即保存当前任务 的上下文,切换到这个高优先级任务的上下文 中运行University of Science and Technology of China16举例:University of Science and Technology of China17Wind内核的优先级 256个,编号0255 优先级0最高,255最低 任务的优先级在创建时指定 任务可以调用

9、taskPrioritySet改变自己的 优先级 taskPrioritySet/Get的使用举例University of Science and Technology of China18taskPrioritySet/Get的使用举例University of Science and Technology of China19轮转调度 轮转调度通常配合基于优先级的抢占式调 度进行 轮转调度: 让优先级相同的、处于就绪态的任务公平 地共享CPU 轮转调度使用时间片来分配CPU 每个任务执行一个预先确定的时间段(即时 间片)University of Science and Technolo

10、gy of China20 VxWorks中,调用函数kernelTimeSlice() 来使用轮转调度 参数为时间片的长度 (即:在每个任务放弃CPU给另一个同优先 级的任务之前,系统允许它运行的最大时间 长度)University of Science and Technology of China21 使用轮转调度算法时,每个任务都有一个 运行时间计数器 随着系统时钟增加而增加 达到规定的值(时间片的值)时,清0 此时,任务放到所在优先级队列的尾部 一个新加入的任务放在所属优先级队列的尾 部,计数器初始为0 当被高优先级任务抢占时,保存它的当前运 行时间计数器,下次被调度时,恢复这个值U

11、niversity of Science and Technology of China22举例University of Science and Technology of China23抢占上锁 在实际应用中,有时候需要避免抢占,以 免发生不合理的抢占或发生一些意想不到 的情况 Wind的调度器提供 taskLock()和taskUnlock() 来禁止/允许抢占 当一个任务调用taskLock(),将会禁止抢 占,在该任务执行时,将不会发生基于优 先级的抢占University of Science and Technology of China24 注意:禁止抢占只能防止任务的上下文切

12、 换,不能禁止中断 禁止抢占可以用来实现互斥 但是,应当尽量使禁止抢占的时间最小University of Science and Technology of China251.4 任务异常处理 程序代码或数据的错误可能引起硬件异常 状态,例如 非法指令 总线或地址错 除数为0 等等 VxWorks的异常处理包处理这些异常University of Science and Technology of China26默认的异常处理 挂起引起异常的任务 保存该任务在异常点的状态 将关于异常的描述送到Tornado开发工具 中 同时内核和其他任务不会被中断,系统继 续执行University of

13、Science and Technology of China27定制的异常处理 VxWorks允许任务使用信号功能激活自己 的异常处理程序 如果一个任务已经提供了一个异常的信号处 理程序,系统的默认处理过程不被执行University of Science and Technology of China281.5 共享代码和重入 VxWorks提倡:单个子程序的备份或子程 序库被多个不同的任务调用 如,许多任务会调用printf(),但是系统中只 有一个备份 定义:一个被多个任务调用的单个备份成 为共享代码 VxWorks动态链接功能很容易实现代码共 享University of Scien

14、ce and Technology of China29例如University of Science and Technology of China30重入 共享代码必须是可重入的: 一个子程序是可重入的,如果该程序的单个备份可 以被多个任务同时调用而不会发生冲突 典型的冲突: 对全局或静态变量的修改 VxWorks的很多子程序是可重入的 惯例:所有name_r()命名的子程序被认为是不可重入 的 VxWorks的I/O和驱动程序是可重入的University of Science and Technology of China31大部分VxWorks程序使用的重入机制 使用动态堆栈变量 使用信号量保护全局或静态变量 任务变量 Wind推荐使用上述技术编写可重入代码University of Science

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号