根据进程p的静态优先级static_prio计算该进程的时间片
(根据下面公式计算时间片)
static
inline unsigned
int
task_timeslice(task_t
*
p)
{
if (p->static_prio < NICE_TO_PRIO(0))
return SCALE_PRIO(DEF_TIMESLICE*4, p->static_prio);
else
return SCALE_PRIO(DEF_TIMESLICE, p->static_prio);
}
注:(1)
+--> (140 - static priority) * 20
| (static priority < 120)
(task_struct.time_slice) |
base time quantum = |
(in milliseconds) |
| (static priority >= 120)
+--> (140 - static priority) * 5
(2)
NICE_TO_PRIO(0) = 120
(3)
#define SCALE_PRIO(x, prio) /
max(x * (MAX_PRIO - prio) / (MAX_USER_PRIO/2), MIN_TIMESLICE)
--------------------------------------------------------
max(x * (140 - prio) / (40/2), 5) =
max(x * (140 - prio) / 20), 5)
(根据下面公式计算时间片)
static
inline unsigned
int
task_timeslice(task_t
*
p)
{
if (p->static_prio < NICE_TO_PRIO(0))
return SCALE_PRIO(DEF_TIMESLICE*4, p->static_prio);
else
return SCALE_PRIO(DEF_TIMESLICE, p->static_prio);
}
注:(1)
+--> (140 - static priority) * 20
| (static priority < 120)
(task_struct.time_slice) |
base time quantum = |
(in milliseconds) |
| (static priority >= 120)
+--> (140 - static priority) * 5
(2)
NICE_TO_PRIO(0) = 120
(3)
#define SCALE_PRIO(x, prio) /
max(x * (MAX_PRIO - prio) / (MAX_USER_PRIO/2), MIN_TIMESLICE)
--------------------------------------------------------
max(x * (140 - prio) / (40/2), 5) =
max(x * (140 - prio) / 20), 5)
本文介绍了一个根据进程静态优先级计算时间片的算法实现。通过不同的公式处理不同优先级的进程,确保了系统的调度公平性和响应性。

175

被折叠的 条评论
为什么被折叠?



