在linux下SCHED_FIFO和SCHED_RR分享其中至少從0到99(99爲最高),在用戶空間實時priorites。從現在開始,我假設你正在談論這些優先級(rt_priority)而不是內部prio字段。鑑於此信息在這裏您的情況應該工作如何:
- 因爲99是高會搶佔任務90的FIFO任務,除非搶佔由任務禁用。
- 沒有,因爲優先權50是少不應該是它能夠搶佔優先級的任務99
- 是再次的優先級99是高所以應該,如果你搶佔優先級的任務50
最後感到困惑PRIO之間,在這裏rt_prio是它們之間的關係,它可以在功能上可以找到normal_prio
/*
* Calculate the expected normal priority: i.e. priority
* without taking RT-inheritance into account. Might be
* boosted by interactivity modifiers. Changes upon fork,
* setprio syscalls, and whenever the interactivity
* estimator recalculates.
*/
static inline int normal_prio(struct task_struct *p)
{
int prio;
if (task_has_dl_policy(p))
prio = MAX_DL_PRIO-1;
else if (task_has_rt_policy(p))
prio = MAX_RT_PRIO-1 - p->rt_priority; // This is for FIFO/RR Tasks
else
prio = __normal_prio(p);
return prio;
}
爲什麼不嘗試這些看? –
嗨,相信我,我想到了這一點,不僅僅是現在,而是對於過去的各種問題。有時候,你需要非常清楚你正在測試的內容,才能正確地進行測試,並提取正確的結論。我正在尋找回應這個理論的答案,並且基於經驗和對這個具體問題的知識。 – Sagi2313