纸和铅笔的例子
我似乎无法找到一个很好的在线多级反馈队列示例,展示将会发生什么。 我不一定需要回答整个问题,只需要如何进行几次迭代,就可以得出以下问题:
使用所描述的调度算法执行铅笔和纸张调度,并记下每个上下文切换下一个要运行的进程的名称。 假定进程在计划运行后立即休眠或退出(即,如果进程在0.1秒后退出,它将被调度两次),并且进程在发生上下文切换之前立即唤醒。 假设系统的负载是0.5。 将计算的每一步都舍入到小数点后两位。
调度程序分配的进程优先级范围介于0到127之间,其中0最高。 内核进程可以具有0-49之间的优先级,并且用户进程可以使用优先级50-127。 准备好执行的进程驻留在32个运行队列之一中,每个运行队列包含4个相邻优先级进程(prio / 4 =运行队列)。 运行队列中的进程不会进一步排序。
在每个上下文切换中,选择最高优先级队列头部的进程来执行。 在每个量子(0.1s)之后,当前运行的过程被切换出上下文。 调度程序将该进程从其原始队列的头部中移除,并调整其优先级(如果需要,请参见下文),并将其放在它所属的队列的末尾(因为它的优先级可能已更改)。 然后对包含可运行进程的最高优先级队列重新扫描运行队列。
当一个进程被创建时,它以一个基本优先级开始(对于一个用户进程,我们称它为PUSER将其设置为50)以及估计的cpu利用率(estcpu)为0.0。 每进程执行一个量程,其estcpu增加1.在一个过程执行了4个量程后,其优先级按照以下公式重新计算:Prio = PUSER +(estcpu / 4)+ 2 * p_nice(注意:Prio不会小于PUSER)其中p_nice是创建进程时指定的值。 它的范围可以从-20到19,但对于用户进程,指定负值将被忽略,并且默认为0。
编辑::这是我对这个问题的答案,有人会关心看看这个吗?
或链接:http://imgur.com/jJVD3AC
首先要做的是设置起始状态并定义参考条款。 P(X)t将成为过程X在量子t
处的优先级; E(X)t将是过程X在量子t
处的估计CPU使用量; T(X)t将成为下一个状态改变之前剩余的量子数。 S(X)t将是进程的状态 - R =可运行,S =睡眠,D =死亡。 过程X具有良好性N(X)。 有多个队列,Qn是优先级n ... n + 3的队列。 我们正在处理用户进程,因此每个进程X按优先级P(X)t = PUSER + E(X)t / 4 + 2 * N(X)进行调度,初始估计CPU由E )0 = 0。
N(A)= 2; N(B)= 1; N(C)= 3; N(D)= 1。
最初,P(A)0 = 54(50 + 0 + 2 * 2); P(B)0 = 52,P(C)0 = 56; P(D)0 = 52.因此,A,B和D在Q13上,而C在Q14上。 为了避免碰撞,D在Q13的前面,然后是B,然后是A.
对于下一个量子,调度器选择Q13前面的过程,即D.D为量子运行(并且剩下4个量子在末尾运行,E(D)1 = 1)。 它放在Q13的后面,下一个过程B运行一个量子(所以E(B)2 = 1,在它打盹之前剩下2个量子,放在Q13的后面,和A运行下一个量子,等等。
你需要设计一个'铅笔和纸'符号来记录发生了什么。
---- A ---- ---- B ---- ---- C ---- ---- D ----
t R P E S T P E S T P E S T P E S T Q13 Q14
0 D 54 0 R 1 52 0 R 3 56 0 R 10 52 0 R 5 D,B,A C
1 B 54 0 R 1 52 0 R 3 56 0 R 10 53 1 R 4 B,A,D C
2 A 54 0 R 1 53 1 R 2 56 0 R 10 53 1 R 4 A,D,B C
3 D 55 1 S 6 53 1 R 2 56 0 R 10 53 1 R 4 D,B,A C
4 B 55 1 S 5 53 1 R 2 56 0 R 10 54 2 R 4 B,A,D C
并继续进行下去。 最后,进程将进入睡眠状态(注意每个量程的睡眠过程剩余时间减少,而不是预定的时间),或死亡(不再运行)等。您需要要小心了解该行记录了量子开始时的状态。
链接地址: http://www.djcxy.com/p/84831.html