重庆邮电大学硕士论文第三章基于OSEKTurbo的ABS控制软件开发
图3.4扩展任务状态模型
基础任务通常在开始运行后,只有当它被高优先级任务占先或者是被中断
时,它才会停止,否则一直运行到任务结束。而扩展任务除了能被高优先级的任务占先和被中断外,还会因等待事件而停止运行,进入等待态。处于等待态的扩展任务只有当它所等待的事件中至少有一个发生时才会被激活继续运行。
处于就绪态的任务由调度程序调度运行,OSEKTurbo采用静态优先级调度策
略。任务的优先级在系统生成的时候进行静态分配,高优先级的任务先处理,低优先级的任务后处理。OSEK标准中的BCC2和ECC2要求OS能够支持多任务同优先级,相同优先级的任务进入一个先来先服务的队列,OSEKTurbo目前还不支持这一点,所以在OSEKTurbo中一个优先级只能对应一个任务。此外,任务可分为可被占先任务和不可被占先任务。对不可被占先的任务而言,一旦任务开始运行,就不会被占先,只有到达其调度点时才发生调度,程序设计员可以预知调度点;而对可被占先的任务而言,由于中断可能激活更高优先级的任务,所以任何时候都有可能进行调度。使用这两种任务可使程序设计具有更高的灵活性。
OSEKTurbo系统不允许同一任务的多个并行调用,因为这需要动态改变任务
的数量。当请求调用一个已经激活的任务时,该请求进入一个请求队列,直到前一个激活任务运行终止(转换为挂起态),第二个激活请求才执行。
3.2.2同步机制
OSEKTurbo提供了两种同步机制,即对共享资源的互斥访问机制和事件机
制。资源可以是一段临界区代码、调度程序、共享内存或数据结构,也可以是共享硬件设备。系统在处理多个任务对共享资源的互斥访问时,采用信号量对临界区数据或资源加锁。在某一时刻只能有一个任务访问资源,但是用信号量机制可能会导致优先级反转,即当一个高优先级的任务试图访问一个已经被较低优先级14