某进程调度程序采用基于优先数(priority)的调度策略, 即选择优先数最小的进程运行, 进程创建时由用户指定一个nice作为静态优先数。 为了动态调整优先数, 引入运行时间cpuTime和等待时间waitTime, 初值均为0。 进程处于执行态时, cpuTime定时加1, 且waitTime置0; 进程处于就绪态时, cpuTime置0, waitTime定时加1。 请回答下列问题。
若调度程序只将nice的值作为进程的优先数, 即priority=nice, 则可能会出现饥饿现象,为什么?
由于采用了静态优先数,当就绪队列中总有优先数较小的进程时,优先数较大的 进程一直没有机会运行,因而会出现饥饿现象。
使用nice、 cpuTime和waitTime设计一种动态优先数计算方法, 以避免产生饥饿现象, 并说明waitTime的作用。
优先数 priority 的计算公式为:
priority=nice+k1×cpuTime-k2×wait Time,其中 k1>0,k2>0,用来分别调整 cpu Time 和 wait Time 在 priority 中所占的比例。wait Time 可使长时间等待的进程优先数减少, 从而避免出现饥饿现象。