2024年11月Linux系统进程管理介绍(2)

发布时间:

  ⑴假设我们能收集到这些信息,可以有如下几种调度算法:

  ⑵.最短运行时间优先

  ⑶.最短剩余时间优先

  ⑷.综合已经运行时间和剩余时间来排序

  ⑸但是在真实世界中,一般这个信息是无法预测的。即使是同一个进程,之前运行的情况对当前运行的进程也不一定有参考价值。比如cat程序,不同参数对运行时间影响很大。

  ⑹Feedback

  ⑺这个是基于Prediction来优化的。如果说Prediction是需要预测将来进程还需要多少资源的话,Feedback算法就是基于已经消耗了的资源来判断优先级。

  ⑻一般来说,也就是运行时间越长,优先级越低的调度算法。

  ⑼Unix调度算法

  ⑽这是.版本之前的调度算法,该算法采用优化的RR算法,每个进程的优先级算法如下:

  ⑾p(i = base(i+nice(i+cpu(i

  ⑿其中base和nice值都是静态固定的,可以由用户指定的。

  ⒀cpu是随着进程占用CPU时间越长权重就越低的调整因子,该因子调整逻辑如下:

  ⒁cpu(i = cpu(i-/

  ⒂也就是每次进程被选中调度一遍之后,下次对应的cpu因子的值都会被除以,降低下次运行的权重。

  ⒃内核.版本之后重写了调度算法。也叫O(算法。

  ⒄该算法针对普通进程,设置了~共个优先级,进程属于哪个优先级的计算跟老版调度算法类似。系统再存储了一个位图,每个位图代表一个优先级是否有等待的进程。然后每次都选择优先级最高的且有进程的那个队列选取第一个进程来运行。

  ⒅对于多处理器的处理,跟上面的调度算法类似,只是在选择出进程之后,需要再判断一下给哪个CPU合适。

  ⒆一般来说,考虑到CPU的本地cache,所以尽量将进程调度到之前运行的CPU上运行。当然,考虑到CPU本身的均衡性,所以肯定还是会有迁移的工作。