linux进程的调度算法
这节我们来学习一下linux进程的优先级
linux进程的优先级
进程提供了两种优先级,一种是普通的进程优先级,第二个是实时优先级,前者使用SCHEED_NORMAL调度策略,后者可选SCHED_FIFO或SCHED_rr调度。任何时候,实时进程的优先级都高于普通进程,实时进程只会被更高级的实时进程抢占,同时实时进程之间是按照FIFO(一次机会做完)或者RR(多次轮转)规则调度的
首先说一下实时进程的调度:
实时进程,只有静态优先级,因为内核不会根据休眠时间等因素对其静态优先级做调整,默认的实时优先级范围是0~99
不同于普通的进程,系统调度时。实时优先级高的进程总是先于优先级低的进程执行,直到实时优先级高的实时进程无法执行。如果有数个优先级相同的实时进程,那么系统就会按照进程出现在队列上的顺序选择进程。
不同的调度策略的实时进程只有在相同优先级的时候才有可比性:
1)对于FIFO的进程,意味着只有当前进程执行完毕才会轮到其他进程执行。由此可见相当霸道。
2)对于RR进程,一旦时间片消耗完毕,则会将该进程置于队列的末尾,然后运行其他相同优先级的进程,如果没有其他相同优先级的进程,则该进程会继续执行。
总而言之,对于实时进程,高优先级的进程就是大爷,他执行到没法执行,采会轮到优先级低的进程执行。等级制度行当森严。
普通进程:
SCHED_ORHER:基于动态优先级进行调度,其动态优先级可以理解为调度器为每个进程根据多个因素计算出的权值。