操作系统需要处理各种各样的任务,需要让每一个任务都尽可能地满意,因此必须需要有复杂的算法来折中各种各样的因素;但另一方面,在每一次任务调度的时候我们都需要使用schedule(),那么就应当使它的算法实现尽量简单,避免调度造成过多的额外开销,下面给出一个实例。
这个函数的关键是counter变量。
counter的第一个作用是作为时间片。
counter会出现在时钟中断中,时钟中断的处理函数被初始化为set_intr_gate(0x20, &time_interrupt)。每次时钟中断,就会将当前任务的counter-1,但counter等于0时,就调用schedule()进行线程切换:
if(current->counter = 0) schedule();
schedule()就是按时间片进行轮转调度,这是实现schedule()的基础。
此外,counter的第二个作用是任务的优先级:
可以看出,每次调度都要找到队列中counter最大的任务,进行切换,counter越大,优先级越高,这就是多级反馈队列调度的另一个基础——优先队列。
现在&#