|
知识路径: > 嵌入式系统软件基础知识 > 嵌入式操作系统基础知识 > 处理器管理 > 优先级反转(优先级反转、优先级继承、优先级天花板等) >
|
相关知识点:4个
|
|
|
|
优先级调度算法的基本思路是:给每一个任务都设置一个优先级,然后在任务调度的时候,在所有处于就绪状态的任务中选择优先级最高的那个任务去运行。例如,短作业优先算法其实也是一个优先级算法,每个任务的优先级就是它的运行时间,运行时间越短,优先级越高。
|
|
|
优先级算法可以分为两种:可抢占方式和不可抢占方式。它们的区别在于:当一个任务正在运行的时候,如果这时来了一个新的任务,其优先级更高,那么在这种情形下,是立即抢占CPU去运行新任务,还是等当前任务运行完了再说。
|
|
|
在任务优先级的确定方式上,可以分为静态方式和动态方式两种。
|
|
|
.静态优先级方式:在创建任务的时候就确定任务的优先级,并且一直保持不变直到任务结束。优先级的确定可以依据任务的类型或重要性,例如,系统任务的优先级要高于用户任务,实时任务的优先级要高于非实时任务。静态优先级方式有一个很大的缺点:高优先级的任务会一直占用着CPU运行,而那些低优先级的任务可能会长时间地得不到CPU,一直处于“饥饿”状态。
|
|
|
.动态优先级方式:在创建任务的时候确定任务的优先级,但是该优先级可以在任务的运行过程中动态改变,以便获得更好的调度性能。例如,为了防止静态优先级方式中出现的“饥饿”现象,系统可以根据任务占用CPU的运行时间和它在就绪队列中的等待时间来不断地调整它的优先级。这样,即便是一个优先级比较低的任务,如果它在就绪队列中的等待时间足够长,那么它的优先级就会不断提高,最终可以被调度执行。
|
|
|
在优先级算法中,高优先级的任务将抢占低优先级的任务。对于优先级相同的任务,通常的做法是把任务按照不同的优先级进行分组,然后在不同组的任务之间使用优先级算法,而在同一组的各个任务之间使用时间片轮转法。
|
|
|
采用优先级调度算法,还有一个问题就是可能会发生优先级反转的现象。在理想情况下,当高优先级任务处于就绪状态后,会立即抢占低优先级任务而得到执行。但在实际系统当中,在各个任务之间往往需要用到各种共享资源,如I/O设备、信号量、邮箱等等。在这种情形下,可能会出现高优先级任务被低优先级任务阻塞,等待它释放资源,而低优先级任务又在等待中等优先级任务的现象,这种现象称为“优先级反转”。
|
|
|