多级反馈队列调度 - Paper&铅笔示例

时间:2015-05-13 03:24:30

标签: scheduling dlx

我似乎找不到一个在线多级反馈队列的好例子,显示会发生什么。鉴于以下问题,我不一定需要回答整个问题,如何进行一些迭代:

  1. 过程A:p nice = 2,运行0.1秒,睡眠0.6秒,运行0.2秒
  2. 过程B:p nice = 1,运行0.3秒,睡眠1.0秒,运行0.3秒
  3. 流程C:p nice = 3,运行1.0s
  4. 处理D:p nice = 1,运行0.5s
  5. 使用所描述的调度算法进行铅笔纸调度,并记下来 每个上下文切换时下一个要运行的进程的名称。假设进程休眠或退出 在它们被安排运行之后,(即如果一个过程在0.1秒之后退出,它将被安排 两次),并且在上下文切换发生之前唤醒进程。假设负载 系统是0.5。将计算的每一步舍入为2位小数。

    调度程序分配处理优先级,范围在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

1 个答案:

答案 0 :(得分:1)

要做的第一件事是设置起始状态并定义参考条款。 P(X) t 将是量子t处的过程X的优先级; E(X) t 将是量子t处的过程X的估计CPU使用量; T(X) t 将是在下一次状态改变之前剩余的量子数。 S(X) t 将是进程的状态 - R = runnable,S = sleep,D = dead。过程X具有良好的N(X)。有多个队列,Q n 是优先级 n ... n + 3 的队列。我们正在处理用户进程,因此每个进程X的优先级为P(X) t = PUSER + E(X) t / 4 + 2 * N(X),初始估计的CPU由E(X) 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在Q 13 上,C在Q 14 上。为了反对,D位于Q 13 的前面,然后是B,然后是A.

对于下一个量子,调度程序选择Q 13 前面的过程,即D. D为量子运行(并且最后有4个量子运行,并且E (D) 1 = 1)。它位于Q 13 的背面,下一个过程B运行一个量子(所以E(B) 2 = 1,它有2个量子在它贪睡之前离开。它放在Q 13 的背面,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

所以这个过程继续进行。最终,进程将为多个量子进入休眠状态(请注意,睡眠过程的剩余时间在每个量程上减少,而不是在可能已经被调度的时候),或者将会死亡(从不再次运行),等等。您需要小心地理解这条线在量子开始时记录状态。