- 论坛徽章:
- 0
|
current->counter中记录进程本轮剩余的时间片,以jiffy为单位,即滴答.
schedule()中
当系统发现本轮调度已经结束,即所有进程的剩余时间片都0(除idle外),开始重新计算所有进程的下一轮时间片
recalculate:
{
struct task_struct *p;
spin_unlock_irq(&runqueue_lock);
read_lock(&tasklist_lock);
for_each_task(p)
p->counter = (p->counter >> 1) + NICE_TO_TICKS(p->nice);
read_unlock(&tasklist_lock);
spin_lock_irq(&runqueue_lock);
}
goto repeat_schedule;
我们可以看出时间片的计算和p->nice值有关。由于绝大多数情况下所有进程的nice值都相等,所以时间片值也相等,因此所有进程的每轮执行时间大致相等。
这种相等是以进程为单位,而不是以用户为单位的(例如某个用户运行的进程比其他用户多,他显然获得更多的cpu时间) |
|