SJF算法是最好的调度算法之一,因为它提供了最大的吞吐量和最少的等待时间,但是该算法的问题是,CPU的突发时间无法预先知道。
我们可以估算某个进程的CPU爆发时间。 有多种技术可用于假定进程的CPU突发时间。假设需要准确以便最佳地利用算法。
有以下技术用于假定某个进程的CPU爆发时间。
进程大小
可以根据其大小预测进程的爆发时间。 如果有两个进程T_OLD
和T_New
,并且旧进程的实际突发时间为20秒,进程的大小为20 KB。 我们知道P_NEW
的大小是21 KB。 那么P_New
具有类似突发时间20秒的概率是最大的。
If, P_OLD → 20 KB P_New → 21 KB BT(P_OLD) → 20 Secs Then, BT(P_New) → 20 secs
因此,在这项技术中,我们实际上根据新进程的相似大小的旧进程的突发时间来预测新进程的爆发时间。
也可以根据其类型预测过程的爆发时间。进程可以是以下定义的各种类型。
OS进程
进程可以是调度程序,编译器,程序管理器和更多系统进程等操作系统进程。 它们的爆发时间通常较低,例如:3到5个单位时间。
用户进程
用户发起的进程称为用户进程。 可以有三种类型的过程如下。
互动进程
交互式进程是与用户不时交互的进程或执行完全取决于用户输入的进程,例如各种游戏就是这样的进程。 爆发时间需要降低,因为它们不需要CPU很长时间,它们主要取决于用户与进程的交互性,因此它们主要是IO绑定进程。
前台进程
前台进程是用户用来执行其需求的进程,例如MS Office,编辑器,实用程序软件等。这些类型的进程有更高的突发时间,因为它们是CPU和IO绑定进程的完美组合。
后台进程
后台进程支持其他进程的执行。 它们以隐藏模式工作。 例如,密钥记录器是记录用户按下的密钥和用户在系统上的活动的过程。 它们主要是CPU绑定的进程,需要更长的CPU时间。
简单平均
在简单的平均中,给出了n个进程P(i)……. P(n)的列表。 令T(i)表示过程P(i)的突发时间。 假设τ(n)表示Pth过程的预测突发时间。 然后根据简单平均,过程n + 1的预测突发时间将被计算为,
τ(n+1) = (1/n) ∑ T(i)
其中,0 <= i <= n
并且ΣT(i)
是到目前为止所有可用过程的实际突发时间的总和。
指数平均或时效
令Tn为第n个过程的实际突发时间.τ(n)为第n个过程的预测突发时间,则下一个过程(n + 1)的CPU突发时间将被计算为,
τ(n+1) = α. Tn + (1-α) . τ(n)
其中,α是平滑。 它的值在0和1之间。