Linux核心執行緒實時獲取排程狀態的方法

2021-10-04 19:18:16 字數 1214 閱讀 1417

最近在做專案中,需要執行緒實時的知道自身被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請求 處理器消耗型程序 把時間大部分用...