时间:2023-02-15来源:系统屋作者:zhijie
假设我们能收集到这些信息,可以有如下几种调度算法:
1.最短运行时间优先
2.最短剩余时间优先
3.综合已经运行时间和剩余时间来排序
但是在真实世界中,一般这个信息是无法预测的。即使是同一个进程,之前运行的情况对当前运行的进程也不一定有参考价值。比如cat程序,不同参数对运行时间影响很大。
Feedback
这个是基于Prediction来优化的。如果说Prediction是需要预测将来进程还需要多少资源的话,Feedback算法就是基于已经消耗了的资源来判断优先级。
一般来说,也就是运行时间越长,优先级越低的调度算法。
Unix调度算法
老版调度算法
这是2.6版本之前的调度算法,该算法采用优化的RR算法,每个进程的优先级算法如下:
p(i) = base(i)+nice(i)+cpu(i)
其中base和nice值都是静态固定的,可以由用户指定的。
cpu是随着进程占用CPU时间越长权重就越低的调整因子,该因子调整逻辑如下:
cpu(i) = cpu(i-1)/2
也就是每次进程被选中调度一遍之后,下次对应的cpu因子的值都会被除以2,降低下次运行的权重。
新版调度算法
内核2.6版本之后重写了调度算法。也叫O(1)算法。
该算法针对普通进程,设置了100~139共40个优先级,进程属于哪个优先级的计算跟老版调度算法类似。系统再存储了一个位图,每个位图代表一个优先级是否有等待的进程。然后每次都选择优先级最高的且有进程的那个队列选取第一个进程来运行。
SMP的调度
对于多处理器的处理,跟上面的调度算法类似,只是在选择出进程之后,需要再判断一下给哪个CPU合适。
一般来说,考虑到CPU的本地cache,所以尽量将进程调度到之前运行的CPU上运行。当然,考虑到CPU本身的均衡性,所以肯定还是会有迁移的工作。
2023-02-15
Linux系统grep正则表达式的介绍2023-02-15
Linux系统TSO的实现原理2023-02-15
Linux系统NBMA和BMA的交换方式介绍在Linux系统中使用xargs命令可以解决不少问题,特别是xargs命令再配合find命令,能够发挥出更加惊人的效果。本文就来为大家介绍一下Linux系统xargs命令的用法。...
2023-02-14
Linux系统的进程是由线程组成的,当然Linux进程下的线程数是不固定的,可以是一个进程,也可以是多个进程。本文就来教大家Linux系统如何查看进程的线程数?...
2023-02-14