河北网络_vxworks任务管理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

嵌入式操作系统
火龙果整理
错误信息
• 在VxWorks中有一个全局变量errno来存放 系统最近的错误状态值
• 每个任务TCB中都记录有一个全局errno副 本—errostatus ,属于任务上下文的一部分
• ISR也使用独立的errno,但是ISR没有 TCB,内核为ISR在中断栈中保存和恢复 errno
– – – – – DELAY+S——睡眠+挂起 PEND+S——阻塞+挂起状态 PEND+T——延时阻塞状态 PEND+T+S——延时阻塞+挂起状态 …+I——继承优先级状态,优先级暂时被提升
嵌入式操作系统
火龙果整理
任务的状态转换图
任务创建时,处于挂起状态
taskSuspend() taskResume()
嵌入式操作系统
火龙果整理
• errno的值由4个字节表示,2个高字节表示 产生错误的模块组件编码,2个低字节表示 错误编号
– 如0x110001,表示内存不足
• VxWorks提供errnoLib库用于获取和设置 任务和中断的错误状态值
嵌入式操作系统
火龙果整理
– #define SHELL_STACK_SIZE 10000
• VxWorks支持独立的中断栈,对所有的 ISR使用相同的中断栈
– 中断栈在系统启动时根据配置参数设置位 置、大小和填充。在configAll.h中有缺省定 义:
#define ISR_STACK_SIZE 1000
嵌入式操作系统
• !由于没有访问内存任何约束和保护,因
而对代码质量提出了更高的要求
• 当选用VxVMI时,每个任务各自的地址空 间需要进行虚拟地址到物理地址的转换
嵌入式操作系统
火龙果整理
1.2 任务的结构
data段
数据段 bss段 TCB 代码段 堆栈段
不需要进行用户、内核的区分
嵌入式操作系统
taskInit()
taskActivate()
嵌入式操作系统
火龙果整理
taskSpawn()—创建并激活一个新任务
int taskSpawn ( char *name,/*新任务的任务名*/ int priority,/*新任务的优先级*/ int options,/*任务选项字*/ int stackSize,/*堆栈大小*/ FUNCPTR entryPt,/*新任务的入口函数*/ int arg1,arg2,arg3,arg4,arg5, /*传递给入口函数*/ int arg6,arg7,arg8,arg9,arg10 /*的10参数*/ )
任务变量
• 当多个任务需要同一全局变量或静态变量 提供不同的值时,VxWorks提供任务变量 机制来切换全局变量 • 任务变量机制允许在任务上下文中定义自 己的私有变量,随着上下文切换而切换
嵌入式操作系统
火龙果整理
嵌入式操作系统
火龙果整理
• 每个任务变量允许存放一个4字节的值
• 当有多个任务变量时,任务变量以单向链表 的形式存在
嵌入式操作系统
火龙果整理
• 任务切换时需要遍历任务变量链表,进行 变量值的恢复和保存——降低效率
• !此机制会降低任务上下文切换的效率, 建议编程时谨慎使用
嵌入式操作系统
火龙果整理
堆栈
• 在任务创建时指定 堆栈的大小 • TCB记录了位置和 大小等栈信息 • 任务栈大小的设置 必须合理
errno
errorStatus
嵌入式操作系统
火龙果整理
• 上下文切换分两种情况:同步和异步 • 同步上下文切换,引起的原因是当前运行的任务 执行下列操作:
– 进行阻塞、延迟、挂起的调用; – 使更高优先级任务就绪而发生优先级抢占 – 降低自身优先级或者退出;
• 异步上下文切换,通常由ISR使更高优先级任务就 绪引起。
高地址 pStackEnd
StackSize
pStackBase
TCB
低地址
16bytes
pTCB
pTaskMem
嵌入式操作系统
火龙果整理
• VxWorks操作系统提供函数checkStack( ) 来检查任务栈使用情况
– checkStack( )显示了单个指定任务或者所有任 务的栈使用情况,包括:
嵌入式操作系统
火龙果整理
• 日志任务:tLogTask
– 记录系统信息的任务。它不执行输入/输出操作。
• 异常处理任务:tExcTask
– 提供VxWorks异常处理包,完成在中断级不能执行的 功能 – 必须具有系统最高的优先级 – 不能挂起、删除、改变其任务的优先级
• 目标代理服务:tWdbTask(INCLUDE_WDB)
• 子函数——nodeAdd( ),nodeScrap( )
嵌入式操作系统
火龙果整理
1.1 任务运行的地址空间
• VxWorks操作系统采取线性单一实地址空 间模式,所有任务都运行在同一地址空 间,不区分用户态和核心态
嵌入式操作系统
火龙果整理
嵌入式操作系统
挂起
taskSuspend() taskResume()/taskActivate()
要使刚创建的任务就绪, taskResume() 要激活该任务 taskSuspend()
阻塞
就绪
semTake()/msgQReceive()se mGive()/msgQSend() 抢占 调度
睡眠
taskDelay() 使用spawning原语,可以直接延 时已到 创建并激活一个任务 任务可以在任何状态下被删除
嵌入式操作系统
火龙果整理
1.4 任务的状态
• 5种基本状态:
– – – – – 执行(RUN) 就绪(READY)——任务只需等待cpu 阻塞(PEND)——有cpu以外的资源不可用 睡眠(DELAY)——任务处于睡眠状态 挂起(SUSPEND)——一般用于调试
• 多种组合状态
嵌入式操作系统
火龙果整理
1、 VxWorks下任务的特点
任务运行的地址空间 任务结构 任务的标识 任务的状态及状态转换 任务的上下文切换
嵌入式操作系统
火龙果整理
• VxWorks中的wind内核为VxWorks提供了 一个高性能的实时多任务操作环境
执行
嵌入式操作系统
火龙果整理
任务的状态队列
嵌入式操作系统
火龙果整理
1.5 任务上下文切换
• 上下文切换示意图
TCB(Old) copy of pc copy of sp
CPU pc sp
TCB(New) copy of pc copy of sp
errorStatus
火龙果整理
• VxWorks下任务具有如下特点:
– 任务切换时不需要进行虚拟地址空间切换 – 任务间可以直接共享变量,不需要通过内核 在不同的地址空间复制数据 – 系统调用时不需要在核心态和用户态之间切 换,相当于直接的函数调用
嵌入式操作系统
火龙果整理
– 任务管理、任务创建、任务调度、时钟、中 断、内存管理
• 在VxWorks中,每个明显独立的程序在运 行时称之为任务
嵌入式操作系统
火龙果整理
cobble.c
• 四个任务
– 第一个任务tCosmos模拟一个中断服务程序 生成新数据——cosmos( ) – 第二个任务tSchlep收集数据——schlep( ) – 第三个任务tCrunch处理数据,完成计算并求 出一个结果——crunch( ) – 第四个任务tMonitor监视结果值,当结果超 出安全范围时,向屏幕打印报警信息—— monitor( )
嵌入式操作系统
火龙果整理
嵌入式操作系统
火龙果整理
嵌入式操作系统
火龙果整理
2.1 任务的创建与激活
• VxWorks的TaskLib库中提供多个函数用于创建 任务:
调用 taskSpawn() 描述 创建并激活一个任务 初始化一个新任务 激活一个初始化任务
多用户性、任务间的亲属关系、文件打开表、队列信 息、 虚拟内存信息、错误状态等
•栈
栈的大小、中断栈
• 任务状态
状态的种类、状态间的转换
嵌入式操作系统
火龙果整理
2、VxWorks下任务控制及任务编程
• • • • • • 任务创建和激活 任务删除与任务安全 任务的状态控制 任务信息的获取 任务扩展函数 代码的共享与重入
typedef struct taskVar /* TASK_VAR */ { struct taskVar * next; int *address; intvalue; } TASK_VAR;
• VxWorks提供库taskVarLib库支持任务变 量机制
嵌入式操作系统
火龙果整理
嵌入式操作系统
火龙果整理
1.6 VxWorks的系统任务
• 根任务tUsrRoot
– 内核执行的第一个任务 – 初始化VxWorks系统的主要功能,例如 • 发起日志任务、异常处理任务、网络任务和 tRlogind后台任务 – 通常,上述初始化结束之后,根任务终止并删除 – 用户可以向根任务自由的添加任何必需的初始化代码 – 对应usrRoot()函数(target/config/all/usrConfig.c)
– 当目标代理设置为运行在任务模式时,创建此任务 – 处理来自Tornado目标服务的请求
★以上3种任务都属于VxWorks的基本任务
嵌入式操作系统
火龙果整理
• 网络任务:tNetTask(INCLUDE_NET_LIB) – 后台处理VxWorks网络需要的任务级功能处理
• 其他可选组件的任务 – tShell(INCLUDE_SHELL) – tRlogind(INCLUDE_RLOGIN) – tTelnetd(INCLUDE_TELNET) – tPortmapd(INCLUDE_RPC)
嵌入式操作系统
火龙果整理
与Linux比较
• 任务控制块的内容
火龙果整理
1.3 任务的标识
• VxWorks下标识任务有两种途径:任务名称和任 务ID号 • 任务名称
– 是独一无二的字符串 – 主机任务以字母u开头 – 目标机任务以字母t开头
• 任务ID号
– 长度为4字节,指向TCB
• VxWorks提供任务名ቤተ መጻሕፍቲ ባይዱ和任务ID之间的转换函数
• • • • 栈大小(SIZE) 栈当前使用数(CUR) 历史使用峰值(HIGH) 最大可能空余数(MARGIN=SIZE-HIGH)
• Tornado中的browser也可查看栈的使用情 况 • !堆栈诊断前提:栈初始化时要用0xee填 充
嵌入式操作系统
火龙果整理
• shell下创建任务时默认堆栈大小(sp命 令)
嵌入式操作系统
火龙果整理
• VxWorks提供丰富的任务控制功能,包含在 taskLib库中 • 包括: – 任务的创建、删除、状态控制、获取任务信息 等等 • 可以在Tornado IDE提供的shell工具中交互使用 这些调用
嵌入式操作系统
火龙果整理
火龙果整理
TCB
• TCB用来描述一个任务,每一任务都与一 个TCB关联
• TCB用windTcb结构体来描述
– VxWorks的taskLib库中定义(taskLib.h)
嵌入式操作系统
火龙果整理
• TCB中上下文信息包含的具体内容:
– 程序执行点(PC) – CPU状态,包括各种处理器特定的寄存器
–栈 – 任务的状态 – 延迟定时器 – 时间片定时器 – I/O操作分配的标准输入/输出,标准错误输出 操作
嵌入式操作系统
火龙果整理
– 内核控制结构 – 信号处理信息 – 错误信息 – 调试和性能监视状态 – 任务变量(可选) – 浮点上下文(可选) – 可扩展项 (可选)
嵌入式操作系统
火龙果整理
第3章 VxWorks任务管理
1、 VxWorks下的任务
2、 VxWorks下任务控制及任务编程
3、 VxWorks任务调度
嵌入式操作系统
火龙果整理
• 重点掌握
– VxWorks下任务的特点 – VxWorks提供的任务控制函数及应用 – VxWorks提供的任务调度策略及应用
相关文档
最新文档