进程按照调度类型可以分为:


SCHED_FIFO:先进先出的实时进程,如果没有其它更高优先级的可运行实时进程,就可以一直使用cpu运行。对于这种进程,时间片长度是没有意义的。


SCHED_RR:时间片轮转的实时进程,所具有相同优先级(且都是当前情况下优先级最高)的SCHED_RR以时间片轮转的方式公平使用cpu。


SCHED_NORMAL:时间片轮转的普通进程,时间片用完之后变成过期进程,所有进程都成为过期进程之后,再统一把过期进程转变为活动进程。


时间片轮转的普通进程(SCHED_NORMAL)优先级分为静态优先级动态优先级。内核用从100(最高优先级)到139(最低优先级)表示普通进程的静态优先级。新进程总是继承父进程的静态优先级。通过nice()和setpriority(),用户可以改变自己拥有的进程静态优先级。静态优先级决定了进程的基本时间片,如下:

android进程调度和linux调度映射 linux进程的调度类_优先级


Linux操作系统中动态优先级是指:调度程序跟踪监测进程,对于较长没使用cpu的进程动态提升优先级,对于较长时间使用cpu的进程动态的降低优先级。动态优先级范围是100(最高优先级)~139(最低优先级),经验公式为:


android进程调度和linux调度映射 linux进程的调度类_优先级_02


Bonus范围0~10,值小于5表示降低动态优先级,值大于5表示增加动态优先级。


时间片轮转的实时进程(SCHED_RR)的优先级分为静态优先级实时优先级。静态优先级初始值从父进程继承而得,决定了时间片的基本长度,值越小,基本时间片越长,与SCHED_NORMAL的静态优先级相似。实时优先级范围为1(最高优先级)~99(最低优先级)。调度程序总是让优先级高的进程运行,用户可以通过sched_setparam()和sched_setscheduler()改变进程的实时优先级。实时优先级决定其在运行队列中的位置,即调度选择哪一个进程是由它决定。


先进先出的实时进程(SCHED_FIFO)的优先级只有实时优先级。