04 程序優先順序與排程策略實戰

2022-09-22 03:12:06 字數 1740 閱讀 6696

linux核心的三種排程策略:

rr和fifo屬於實時任務,建立優先順序大於0(1-99),按照可搶占優先順序排程演算法進行,就緒態的實時任務立即搶占非實時任務

主要是由下列2個函式可以獲取執行緒設定的最高端和最低優先順序

int sched_get_priority_max(int policy);	//獲取實時優先順序的最大值

int sched_get_priority_min(int policy); //獲取實時優先順序的最大值

sched_other它不支援優先順序使用,sched_fifo/sched_rr支援優先順序使用,它們分別是1和99,數值越大優先順序越高

實時排程策略(sched_fifo/sched_rr) 優先順序最大值為99

普通排程策略(sched_normal/sched_batch/sched_idle),始終返回0,即普通任務排程的函式,沒有效果

裝置與獲取優先順序的兩個主要函式:

int pthread_attr_setschedparam(pthread_attr_t *attr,const struct sched_param *param);//建立執行緒優先順序

int pthread_attr_getschedparam(pthread_attr_t *attr,const struct sched_param *param);//獲取執行緒優先順序

param.sched_priority=51;//設定優先順序

當系統建立執行緒時,預設執行緒是sched_other,改變排程策略,可以通過以下的函式:

int pthread_attr_setschedpolicy(pthread_attr_t *attr,int policy);//設定執行緒排程策略

struct sched_param

#include #include #include #include static int get_thread_policy(pthread_attr_t *attr)

return plicy;

}static void show_thread_priority(pthread_attr_t *attr,int policy)

static int get_thread_priority(pthread_attr_t *attr)

static void set_thread_policy(pthread_attr_t *attr,int policy)

int main()

#include #include #include #include void threadfunc1()

printf("threadfunc1.\n");

}printf("pthreadfunc1 exit.\n");

}void threadfunc2()

printf("threadfunc2.\n");

}printf("pthreadfunc2 exit.\n");

}void threadfunc3()

printf("threadfunc3.\n");

}printf("pthreadfunc3 exit.\n");

}int main()

Linux 程序排程與優先順序

靜態優先順序,取值100 139,對非實時程序有效,通過nice系統呼叫來進行修改 rt priority 實時優先順序,取值0 99,只對實時程序有效 normal prio 歸一化優先順序,其值取決於靜態優先順序和排程策略 prio 動態優先順序,取值0 139,排程器最終使用 rt prior...

linux優先順序排程策略1

linux核心的三種排程策略 1,sched other 分時排程策略,2,sched fifo實時排程策略,先到先服務。一旦占用cpu則一直執行。一直執行直到有更高優先順序任務到達或自己放棄 3,sched rr實時排程策略,時間片輪轉。當程序的時間片用完,系統將重新分配時間片,並置於就緒佇列尾。...

Linux下執行緒的排程策略與優先順序

linux核心的三種排程策略 1,sched other 分時排程策略,2,sched fifo實時排程策略,先到先服務。一旦占用cpu則一直執行。一直執行直到有更高優先順序任務到達或自己放棄 3,sched rr實時排程策略,時間片輪轉。當程序的時間片用完,系統將重新分配時間片,並置於就緒佇列尾。...