最近在做專案中,需要執行緒實時的知道自身被sched out 和sched in. 檢視了schedule()函式實現,發現核心提供了對應的notifier機制.
schedule->__schedule->context_switch->prepare_task_switch->
fire_sched_out_preempt_notifiers->__fire_sched_out_preempt_notifiers:
static void
__fire_sched_out_preempt_notifiers(struct task_struct *curr,
struct task_struct *next)
schedule->__schedule->context_switch->finish_task_switch->
fire_sched_in_preempt_notifiers->
static void __fire_sched_in_preempt_notifiers(struct task_struct *curr)
linux核心提供api為當前程序註冊排程notifier
void preempt_notifier_register(struct preempt_notifier *notifier)
void preempt_notifier_unregister(struct preempt_notifier *notifier)
void preempt_notifier_inc(void)
void preempt_notifier_dec(void)
notifer_register實現如下:
void preempt_notifier_register(struct preempt_notifier *notifier)
preempt_notifier_register函式只能為當前程序註冊排程notifier,可以進行適當修改,從而註冊任意程序排程notifier
int task_notifier_register(struct preempt_notifier *notifier,pid_t pid)
1.需要關注程序排程的特定場景,如指令資料採集
2. 用於安全領域程序之間的對抗
執行緒屬性 實時排程
1.pthread attr init pthread attr t attr 和pthread attr destroy pthread attr t attr 函式.pthread attr setdetachstate pthread attr t attr,int detachstate p...
Linux核心排程
linux核心的三種排程策略 1,sched other 分時排程策略,2,sched fifo實時排程策略,先到先服務。一旦占用cpu則一直執行。一直執行直到有更高優先順序任務到達或自己放棄 3,sched rr實時排程策略,時間片輪轉。當程序的時間片用完,系統將重新分配時間片,並置於就緒佇列尾。...
Linux核心 程序排程
搶占式多工 由排程程式來決定什麼時間停止乙個程序的執行 程序的時間片 分配給每個可執行程序的處理器時間段 o 1 排程程式 反轉樓梯最後期限排程演算法 完全公平排程演算法 i o消耗型和處理器消耗型程序 i o消耗型程序 大部分時間用來提交i o請求或等待i o請求 處理器消耗型程序 把時間大部分用...