《VxWorks学习笔记》——任务属性

VxWorks任务区别于通用系统的两个特点:1)VxWorks任务与内核具有相同的权限,能够执行处理器支持的全部指令。2)所有任务和内核共享同一实地址空间,不同任务的数据没有任何保护机制。

1、  任务控制块(WIND_TCB):系统调度器用来管理任务调度的一个数据结构,每个任务都与一个TCB相关联,主要包括任务ID,任务名称,任务优先级和任务上下文等(VxWorks系统中TCB不用包含内存地址空间)。任务的切换主要设计任务上下文的保存与恢复。

2、  任务栈:每个任务都有独立的栈空间,栈用于任务的函数调用,分配自动变量和函数返回值。栈的位置和大小在任务控制块中记录(创建任务时指点栈的大小)。VxWorks支持独立的中断栈(在处理器体系和BSP支持的条件下),即所有ISP共享一个独立于任务栈的栈空间。当硬件体系不支持时,中断栈属于被中断任务栈空间的一部分。系统提供checkStack()用以函数检测栈的使用情况。

3、  出错状态:ANSI C标准定义了一个全局整形变量errno,用以记录底层函数调用时最后一次出错的详细信息(每次调用出错就会重置errno)。在VxWorks中,每个任务和ISP都维护了一个errno的副本(任务的errno记录在TCB中,ISP的errno记录在中断栈中)。VxWorks库函数中定义errno高16bits为模块编号,低16bits为错误编号。用户程序可以使用该定义,也可以重新定义。

4、  钩子函数:VxWorks系统允许任务添加和删除钩子函数,钩子函数在某个任务中被添加后,在所用任务中共享。VxWorks允许的钩子函数分三种:

1)任务创建钩子,任务被创建时在任务入口函数之前被调用。

2)任务调度钩子,在调度程序选择新任务运行时被调度。

3)任务删除钩子,在任务被删除后被调用。

在VxWorks中允许添加多个钩子函数,当有多个钩子函数时,任务创建钩子函数和任务调度钩子函数按其添加的顺序调用,任务删除钩子函数按其安装的相反顺序调用。任务创建和删除钩子在参数所指的任务上下文中执行,而任务调度钩子在内核上下文中运行,因此任务调度钩子只能调用可以在内核上下文中被调用的函数。

5、  任务状态:实时系统中的任务有多种状态,系统运行过程中任务可在不同状态之间转换。VxWorks系统定义的任务基本状态有5种:

1)  运行:任务获得CPU资源运行。

2)  就绪:ready,任务只等待系统分配CPU资源。

3)  阻塞:pended,任务因等待不可用的资源而被阻塞。

4)  延迟:delayed,任务被延迟执行。

5)  挂起:suspended,任务不能被执行。这种状态主要用于调试,挂起一个任务并不会禁止它的状态转换,只是调度程序会忽略该任务,任务得不到执行。

上述基本状态也可以形成组合。系统函数控制着任务的状态转换,处于任一状态的函数都可以被删除。任务的状态转换关系如图:

相关内容推荐