点击看原图
图2 引入中级调度的进程调度的调度队列模型
4 VxWorks 实时内核Wind 调度分析Wind 内核缺省调度机制为基于优先级的抢占式调度。采用这种机制时,系统把处理机分配给优先级最高的进程,使之执行。一旦出现了另一个优先级更高的进程时,进程调度程序剥夺当前任务的执行,将处理机分配给高优先级任务。而在相同优先级的多个任务之间,采用时间片轮
转调度机制。采用这种机制时,当一个任务到达时,它被排在轮转队列的后面,等待分配给自己的间片的到来,如果在时间片内没有结束,则再等待属于自己的时间片的到来,直到任务完成。
4. 1 基于优先级的抢占式调度
采用基于优先级的抢占式调度,系统中每个任务都有一个介于最高0 到最低255 之间的优先级。任一时刻,系统内核一旦发现一个优先级更高的任务转变为就绪态,内核就保存当前任务的上下文并把当前任务状态转换为阻塞态,同时切换到这个高优先级任务的上下文执行。如图3 ,低优先级的task1 被中优先级的task2 抢占,task2又被高优先级的task3 抢占。
点击看原图
图3 基于优先级的抢占式调度
4. 2 轮转调度算法
采用轮转调度算法,系统让处于就绪态的优先级相同的一组任务依次轮流执行预先确定长度的时间片。这是一种处理机平均分配的方法。如果不使用轮转调度算法,优先级相同的一组任务中第一个获得处理机的任务将不会被阻塞而独占处理机,如果没有阻塞或其他情况发生,它不会放弃处理机的使用权。如图4 , 相同优先级的task1 、task2 和task3 平均分配预先确定的处理机时间片。
点击看原图
图4 优先级相同轮转调度
4. 3 基于优先级的抢占式调度与轮转调度相结合有时,基于优先级的抢占式调度可与轮转调度相结合。当优先级相同的一组任务依次轮流平均分配处理机时,若有高优先级的任务转变为就绪态则可抢占该组任务。直到再一次符合执行条件时,该组任务才可再次共享处理机。如图5 ,相同优先级的task1 、task2 和task3 轮流占有处理机时,高于该组优先级的task4 抢占处理机,等task4执行结束,该组任务再次共享处理机。