星海

2016 · 主观题 · 第 228 题

计算机学科专业基础(408) · 第 228 题

某进程调度程序采用基于优先数(priority)的调度策略,即选择优先数最小的进程运行,进程创建时由用户指定一个 nice 作为静态优先数。为了动态调整优先数,引入运行时间 cpuTime 和等待时间 waitTime,初值均为 0。进程处于执行态时,cpuTime 定时加 1,且 waitTime 置 0;进程处于就绪态时,cpuTime 置 0,waitTime 定时加 1。请回答下列问题。

(1)若调度程序只将 nice 的值作为进程的优先数,即 priority=nice,则可能会出现饥饿现象,为什么?

(2)使用 nice、cpuTime 和 waitTime 设计一种动态优先数计算方法,以避免产生饥饿现象,并说明 waitTime 的作用。

参考答案

(1)由于采用了静态优先数,当就绪队列中总有优先数较小的进程时,优先数较大的进程一直没有机会运行,因而会出现饥饿现象。(2 分)

(2)优先数 priority 的计算公式为:

priority=nice+k1×cpuTime-k2×waitTime,其中 k1>0,k2>0,用来分别调整 cpuTime 和 waitTime 在 priority中所占的比例。(3 分)waitTime 可使长时间等待的进程优先数减少,从而避免出现饥饿现象。(1 分)

【评分说明】

①公式中包含 nice 给 1 分,利用 cpuTime 增大优先数给 1 分,利用 waitTime 减少优先数给 1 分;部分正确,酌情给分。

②若考生给出包含 nice、cpuTime 和 waitTime 的其他合理的优先数计算方法,同样给分。

在线刷这套题:即时判分、错题本、闪卡复习,不用登录就能练。