这篇文章将为大家详细讲解有关vxworks中Task的状态有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
之前我们提到过,在多任务系统里,任务可能有不同的状态,例如Waiting或Ready。事实上,VxWorks里的任务可能有更多的状态,主要有Ready(就绪态)、Pend(阻塞态)、Delay(延时态)和Suspend(挂起态)。还有一种特殊的状态Stop,以及多种组合状态。
状态 | 描述 |
Pend | 任务在等待某个系统资源(例如信号量、IO) |
Delay | 任务在等待一段时间,也算是一种资源吧 |
Ready | 除了可能等待CPU,任务不需要等待任何资源 |
Suspend | 任务被挂起,不能继续执行。挂起的原因有两种: |
Stop | 任务被Debugger或ED&R机制或SIGSTOP信号停下 |
Delay+S | 任务延时并被挂起 |
Pend+S | 任务阻塞并被挂起 |
Pend+T | 任务阻塞并延时 |
Stop+P | 任务阻塞并被停下 |
Stop+T | 任务延时并被停下 |
Stop+S | 任务停下并被挂起 |
PEND+S+T | 任务阻塞并延时并被挂起 |
STOP+P+S | 任务阻塞并被挂起并被Debugger停下 |
STOP+P+T | 任务阻塞并延时并被Debugger停下 |
STOP+T+S | 任务被挂起并延时并被Debugger停下 |
ST+P+S+T | 任务阻塞并延时并被挂起并被Debugger停下 |
以上任意状态+I | 任务的优先级是继承的 |
在VxWorks的Shell里通过命令i可以看到任务的状态:
应用程序或开发工具可以通过调用系统函数来改变任务的状态,例如通过taskSpawn()创建的任务会立即进入Ready队列,而通过taskCreate()或taskOpen(VX_TASK_NOACTIVATE)创建的任务只是在Suspend队列中实例化,然后需要通过taskActivate()才能进入Ready队列。
常见的状态转换关系如下:
VxWorks的内核维护着当前每个任务的状态,将它们放入不同的队列。而处于Ready队列最前端的任务就是正在使用CPU执行的任务,因此把这个任务处于的状态又可以叫做Executing(执行态)。
从上图可以看到,在不同队列里排队的,其实就是每个任务的TCB。
那么到底是哪个任务才可以处于Ready队列的最前端呢?这就涉及到系统的调度策略了,咱们后文慢慢道来。
关于“vxworks中Task的状态有哪些”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。