关于进程时间片的计算
进程的时间片time_slice是基于进程静态优先级的。
静态优先级越高(值越小),时间片就越大。
计算时间片是通过函数task_timeslice()(kernel/sched.c)来完成的。
通过优先级来计算时间片的等式为:
timeslice=MIN_TIMESLICE+((MAX_TIMESLICE-MIN_TIMESLICE)*(MAX_PRIO-1-(p)->static_prio)/(MAX_USER_PRIO-1))
这样的话就可以将100~139 的优先级映射到200ms~10ms 的时间片上去,优先级数值越大,则分配的时间片越小。
在Kernel2.6中时间片的计算是分散的,具体的计算既可以用task_timeslice(),也可以用其他方法。
进程创建时,将父进程的时间片分一半给子进程,同时父进程的时间片减半。
进程用完时间片以后,需要重新计算时间片,并将进程插入到相应的运行队列。
进程退出时,根据first_timeslice的值来决定是否将子进程的时间片返还给父进程。
平均等待时间sleep_avg
平均等待时间sleep_avg既决定了进程优先级,又影响了进程交互程度。
进程的平均等待时间(以nanosecond 为单位),在0 到NS_MAX_SLEEP_AVG 之间取值,初值为0。
这个值是动态优先级计算的关键因子,sleep_avg 越大,计算出来的进程优先级也越高(数值越小)。
阅读(387) | 评论(0) | 转发(0) |