任务状态
实时操作系统的核心就是高效的管理各个任务与任务之间的通信。
任务状态通常分为以下四种:
就绪(Ready)
运行(Running)
阻塞(Blocked)
挂起态(Suspended)
阻塞:如果当前任务在等待某个时序或外部中断时,就说这个任务处于阻塞态(任务被挂起,任务被延时、任务正在等待信号量、读写队列、读写事件等等)
挂起态:处于挂起态的任务对于调度器是不可见的。
进入挂起态的唯一方法就是挂起函数
从挂起态恢复的唯一方法就是恢复函数(一个普通恢复函数,一个用于中断的恢复函数)
理解挂起态和阻塞态的区别
当任务有较长的时间不允许运行时,可以将其挂起,这是调度器就不会管这个任务的任何信息
任务处于阻塞的时候,系统还需要判读处于阻塞态的这个任务是否超时,是否可以解除阻塞
总之:任务处于挂起态,系统就不会去管这个任务,任务处于阻塞态,系统还需要时不时去看一下这个阻塞是否可以解除
- 创建任务,任务就会被放到就绪态
- 当任务在就序列表中的优先级最高的时候,调度器就会将任务从就绪态变成运行态
- 当正在执行的任务被阻塞,此时就绪态中有一个优先级更高的任务,此时就会执行这个优先级更高的任务,当阻塞结束后,系统仍然再执行高优先级的任务,此时阻塞结束的那个任务就会进入就绪态。
- 当前正在执行的任务遇到任务被延时、等待某个时序、等待某个中断、等待信号量等等,任务就会从运行态进入阻塞态
- 当阻塞完成时,任务就会重新进入就绪
6、7、8、任务从就绪态、运行态、阻塞态进入挂起态就必须通过挂起函数来进入挂起态
9、任务从挂起态进入就绪态,只能通过恢复函数来进入就绪态。