操作系统
2016-46
某进程调度程序采用基于优先数(priority)的调度策略,即选择优先数最小的进程运行,进程创建时由用户指定一个nice作为静态优先数。为了动态调整优先数,引入运行时间cpuTime和等待时间waitTime,初值均为0。进程处于执行态时,cpuTime定时加1,且waitTime置0;进程处于就绪态时,cpuTime置0,waitTime定时加1。请回答下列问题。
(1)若调度程序只将nice的值作为进程的优先数,即priority = nice,则可能会出现饥饿现象,为什么?
(2)使用nice、cpuTime和waitTime设计一种动态优先数计算方法,以避免产生饥饿现象,并说明waitTime的作用。
答案
【答案】
(1)由于nice为静态优先数,一旦设定不变。若就绪队列中总是存在优先数较小(即优先级更高)的进程,优先数较大的进程可能长期无法获得CPU,从而出现饥饿现象。
(2)动态优先数计算方法为:priority = nice + k₁ × cpuTime - k₂ × waitTime,其中k₁ > 0,k₂ > 0为可调参数。waitTime的作用是增加等待进程的优先级(减小优先数),使长时间等待的进程有机会被调度,避免饥饿。