VxWorks学习笔记 -- 任务管理

VxWorks学习笔记 -- 管理

是代运行的一个映象,从系的角度看,任争系统资源的最小运行元。任可以使用或等待CPUI/O设备及内存空等系统资源,并独立于其它任,与一起并运行(宏上如此)。VxWorks内核使任能快速共享系大部分源,同有独立的上下文来控制个别线程的行。

 

1. 任务结

    多任务设计能随打断正在行着的任内部和外部生的事件在确定的时间作出响VxWorks实时内核Wind提供了基本的多任务环境。从表面上来看,多个任正在同时执行,实际上,系内核根据某一度策略交替运行。系统调度器使用任控制的数据构(简记为TCB)来管理任务调度功能。任控制用来描述一个任一任都与一个TCB关联TCB包括了任的当前状、要等待的事件或源、任程序的起始地址、初始堆等信息度器在任最初被激活以及从休眠重新被激活,要用到些信息。

此外,TCB被用来存放任"上下文"context)。任的上下文就是当一个行中的任被停止所要保存的所有信息。在任被重新,必要恢上下文。通常,上下文就是算机当前的状,也即各个寄存器的内容。如同在生中断所要保存的内容一。当生任换时,当前运行的任的上下文被存入TCB,将要被行的任的上下文从它的 TCB中取出,放入各个寄存器中。于是个任行的起点是前次它在运行被中止的位置 VxWorks中,内存地址空不是任上下文的一部分。所有的代运行在同一地址一任需各自的内存空,需可选产VxVMI的支持。

 

2.任和状迁移

    实时的一个任可有多,其中最基本的状有四

绪态(Ready:任只等待系分配CPU源;

(Pend):任需等待某些不可利用的源而被阻塞;

休眠(Suspend):如果系不需要某一个任工作,则这个任务处于休眠状

迟态(Delay):任被延迟时

当系函数某一任务进行操作,任从一迁移到另一状于任一状的任都可被除。

 

迁移

绪态(Ready) ----> (Pend)    semTake()/msgQReceive()

绪态(Ready) ----> 迟态(Delay)   taskDelay()

绪态(Ready) ----> 休眠(Suspend) taskSuspend()

 

(Pend) ----> 绪态(Ready)    semGive()/msgQSend()

(Pend) ----> 休眠(Suspend)  taskSuspend()

 

迟态(Delay) ----> 绪态(Ready)   expired delay

迟态(Delay) ----> 休眠(Suspend) taskSuspend()

 

休眠(Suspend) ----> 绪态(Ready) taskResume()/taskActivate()

休眠(Suspend) ----> (Pend)  taskResume()

休眠(Suspend) ----> 迟态(Delay) taskResume()

 

3.任务调度策略

    多任务调采用一种调度算法来分配CPU绪态Wind内核采用基于占式度法作它的缺省策略,同它也提供了轮转调度法。

基于占式,它具有很多点。这种调度方法为每个任指定不同的。没有置或休眠的最高将一直运行下去。当更高的任由就绪态进入运行,系内核立即保存当前任的上下文,切到更高的任

Wind内核划分级为256 0~255)。0最高255低。当任,系根据分配任务优。然而,也可以是动态的,能在系运行被用使用系统调taskPrioritySet()来加以改,但不能在运行被操作系所改

轮转调度法,分配给处于就绪态的任一个相同的时间时间度可由系统调KernelTimeSlice()过输入参数来指定。很明个任有一运行时间计数器,任运行时每时间滴答加1。一个任用完时间片之后,就,停止行当前运行的任,将它放入列尾部,运行时间计数器置零,并行就绪队列中的下一个任当运行任被更高的任务抢,此任的运行时间计数器被保存,直到下次运行

 

4.抢占禁止

      Wind内核可通过调taskLock()taskUnlock()来使度器起作用和失效。当一个务调taskLock()使度器失效,任运行没有基于生。然而,如果任被阻塞或是度器从就绪队列中取出最高的任运行。占禁止的任解除阻塞,再次始运行占又被禁止。这种抢占禁止防止

的切,但中断理不起作用

 

5.异常

程序代和数据的出,如非法命令、总线或地址错误、被零除等。VxWorks异常理包,一般是将引起异常的任休眠,保存任在异常出错处的状态值。内核和其它任务继续执行。用可借助Tornado开发工具,看当前任,从而确定被休眠的任

 

6.相关函数

      VxWorks内核的任管理提供了动态创建、除和控制任的功能,具体实现

如下一些系统调用:

taskSpawn()           建(生并激活)新任

taskInit()            初始化一个新任

taskActivate()        激活一个已初始化的任

taskName()            由任ID号得到任

taskNameToId()       由任名得到任ID

taskPriorityGet()     得任

taskIsSuspended()     检查是否被

taskIsReady()         检查是否准运行

taskTcb()             得到一个任控制的指

taskDelete()          中止指定任并自由内存(和控制

taskSafe()            用任务防止被删除

taskSafe()            解除保护用任

taskSuspend()         置一个任

taskResume()          一个任

taskRestart()         重启一个任

taskDelay()           一个任

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值