【一、vxWorks6.9】

1. 多任务简介

实时系统是在多任务和任务间通信的基础上建立起来的。一个多任务环境允许将实时应用构成一组独立的任务,每个任务拥有各自的线程和系统资源。
为了更快的得到中断响应,vxWorks操作系统里的
中断服务程序(ISR)在一个专门的上下文中执行,是处于环境的上下文之外。

每个任务有各自的上下文,即各自拥有自己的CPU环境和系统环境(指任务被内核调度执行时所使用的资源)。上下文切换时,任务的上下文保存在任务控制块(TCB).

2. 任务状态

状态描述
就绪(READY)仅等待CPU的资源,不等待其他任务资源
阻塞 (PEND)由于一些资源不可用而被阻塞
睡眠(DELAY)处于睡眠的任务
挂起(SUSPEND)该状态任务不执行,主要用于调试用

在这里插入图片描述

3. 优先级

Wind内核中,默认是基于优先级的抢占式调度,当然也可以使用时间片轮转,两种调度都基于优先级。有256种优先级,优先级从0到255,优先级0最高,优先级255最低。

3.1 基于优先级的抢占式任务调度

当一个新任务优先级高于系统当前执行任务的优先级时,它将抢占CPU执行。这意味某个任务比当前任务优先级高,并处于就绪状态,系统内核会立刻保存当前任务的上下文,并切换到高优先级任务的上下文中。
在这里插入图片描述
缺点:当多个任务优先级相同,并且任务永不阻塞,那么它将一直独占处理器,其他任务将没机会执行。但轮转式调度可以解决这一问题。

3.2 轮转式调度

当所有相同优先级任务处于就绪状态时,通过时间片获得相同的CPU处理时间,调动kernelTimeSlice()将启动轮转式调度
一般不使用轮转式调度,除非相同代码被复制执行多次。

3.3 抢占上锁

通过调用taskLock()和taskUnLock()函数。当任务调用taskLock()函数时,将禁止使用调度程序,若该任务正在执行时,不会发生基于优先级的抢占。
抢占上锁只能阻止任务的上下文切换,并不禁止中断

3.4 驱动程序支持的任务优先级

所有应用程序的优先级应该在100-250之间,但驱动程序支持的任务(与中断服务程序关联的任务)优先级一般位于51-99之间。

4. 任务控制

4.1 创建和激活任务

//参数:新任务名、优先级、可选字段、堆栈大小、入口函数、10个函数参数
//返回值:任务ID
extern TASK_ID	taskSpawn 	(char * name, int priority, int options, 
			   	 size_t stackSize, FUNCPTR entryPt, 
                                 _Vx_usr_arg_t arg1, _Vx_usr_arg_t arg2, 
                                 _Vx_usr_arg_t arg3, _Vx_usr_arg_t arg4, 
                                 _Vx_usr_arg_t arg5, _Vx_usr_arg_t arg6, 
                                 _Vx_usr_arg_t arg7, _Vx_usr_arg_t arg8, 
                                 _Vx_usr_arg_t arg9, _Vx_usr_arg_t arg10);

在这里插入图片描述

4.2 任务堆栈

为了避免堆栈溢出和破坏任务堆栈,最初分配堆栈空间时,可以分配大一点的空间,然后周期性的调用checkStack()函数周期性的监控,若可以使用更小的空间,将修改分配空间尺寸。

4.3 任务删除

调用函数描述
exit()终止任务调用,释放内存
taskDelete()终止指定任务,释放内存
taskSafe()保护调用任务免于删除
taskUnsafe()解除任务删除保护

任务创建时,如果指定的入口函数返回,任务将隐含调用exit()函数,当调用taskDelete()函数,一个任务能够删除自身或另另一个任务。

4.4 任务控制

调用函数描述
taskSuspend()挂起任务
taskResume()恢复任务执行
taskRestart()重新启动任务
taskDelay()延时任务,延时单位为“tick”
nanosleep()延时任务,延时时间为纳秒
sysClkRateGet() //返回系统时钟的,单位是tick
taskDelay(sysClkRateGet() / 2);
//延时时间为0,只能调用taskDelay(),nanosleep()禁止为0

4.5 操作系统任务

4.5.1 根任务:tUsrRoot

根任务是内核执行的首个任务,可初始化vxWorks操作系统的大部分程序。正常情况下,根任务在所有初始化结束后,终止任务并且被删除。

4.5.2 日志任务:tLogTask

当前任务上下文中不执行输入/输出操作时,被操作系统用来记录系统信息

4.5.3 异常处理任务:tExcTask

必须拥有系统的最高优先级,禁止被挂起、删除、或改变任务。

4.5.4 网络任务:tNetTask

用于vxWorks网络任务级程序。通常配置INCLUDE_NET_LIB组件的操作系统可以发起网络任务

4.5.5 tShell

INCLUDE_SHELL组件配置vxWorks操作系统关于目标机命令解释器

4.5.6 目标代理任务:tWdbTask

用INCLUDE_WDB组件配置目标代理任务

4.5.5 tTelnetd

还后台允许远程用户使用telnet登陆到vxWorks操作系统,使用INCLUDE_TELNET组件配置telnet功能

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值