概述
VxWorks任务:
作为实时操作系统,任务调度是基于优先级的,且可抢占式的调度方式。同时对于相同优先级的任务,支持Round-Robin循环调度方式(以下简称RR调度)
Vxworks内核三个队列:tick 队列,ready 队列,active 队列,另外还有一个队列涉及到任务,即任务等待资源时所处的队列,这个队列可以是 Vxworks 内核提供的,也可以是用户提供的,此处令其为 pend 队列。
tick 队列: 当调用 taskDelay 函数让任务延迟一段固定的时间时,任务所处的队列,此时任务为设置为 Delay 状态,无资格竞争使用 CPU;
ready 队列:有资格竞争使用 CPU 的所有任务,该队列以优先级为序排列任务,队列头部即除了当前运行任务外,系统中最高优先级的任务;
active 队列:系统中所有任务, 无论任务当前状态为何,都将在这个队列中,这个队列维护者系统中当前所有的任务,即通过该队列可以查找到当前系统中的所有任务,在 shell 下运行‘i’命令,显示系统中所有的任务,就是通过遍历 active 队列完成的;
pend 队列:当任务竞争使用某资源,而资源当前不可得时,任务就被设置为 pend 状态,进入 pend 队列。
任务创建函数taskSpawn:taskSpawn 函数调用完毕后,任务就进入运行状态,即与其它任务竞争使用 CPU。
taskCreate 函数:创建一个任务后,需要暂时使其处于挂起状态,不具有调度运行的资格,需要函数 taskActivate“激活”
任务间通信
Vxworks 内核本身主要提供了三种任务间通信的机制(不包括信号机制):信号量,消息队列,管道。都是在使用共享物理内存机制,过这块共享的内存由内核在进行管理,任务无法直接进行访问,而必须通过内核提供的接口函数进行访问。
1、信号量
信号量的主要用途是互斥和同步。
Vxworks 信号量机制具体提供了三种信号量:通用信号量;互斥信号量;资源计数信号量。
2、消息队列
消息队列内核实现上实际是一个结构数组,数组大小和数组中元素的容量在创建消息队列时被确定。
消息队列对于每个消息的大小存在限制,而且必须将信息分批打包
3、管道
提供的基本操作方式类似于对一个文件的读写,支持 select 函数,所以可以对多个管道进行信息监测。管道在底层实现上是一种更为直接的共享物理内存机制。
管道分为两种:命名管道和非命名管道。通常任务间通信使用的一般都是命名管道。
最后
以上就是感动仙人掌为你收集整理的VxWorks的任务与任务调度的全部内容,希望文章能够帮你解决VxWorks的任务与任务调度所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复