資源描述:
《linux內(nèi)核的三種調(diào)度策略》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、Linux內(nèi)核的三種調(diào)度策略: 1,SCHED_OTHER分時(shí)調(diào)度策略,2,SCHED_FIFO實(shí)時(shí)調(diào)度策略,先到先服務(wù)。一旦占用cpu則一直運(yùn)行。一直運(yùn)行直到有更高優(yōu)先級(jí)任務(wù)到達(dá)或自己放棄3,SCHED_RR實(shí)時(shí)調(diào)度策略,時(shí)間片輪轉(zhuǎn)。當(dāng)進(jìn)程的時(shí)間片用完,系統(tǒng)將重新分配時(shí)間片,并置于就緒隊(duì)列尾。放在隊(duì)列尾保證了所有具有相同優(yōu)先級(jí)的RR任務(wù)的調(diào)度公平Linux線程優(yōu)先級(jí)設(shè)置首先,可以通過以下兩個(gè)函數(shù)來獲得線程可以設(shè)置的最高和最低優(yōu)先級(jí),函數(shù)中的策略即上述三種策略的宏定義: intsched_get_priority_max(intpolicy
2、); intsched_get_priority_min(intpolicy); SCHED_OTHER是不支持優(yōu)先級(jí)使用的,而SCHED_FIFO和SCHED_RR支持優(yōu)先級(jí)的使用,他們分別為1和99,數(shù)值越大優(yōu)先級(jí)越高。設(shè)置和獲取優(yōu)先級(jí)通過以下兩個(gè)函數(shù)intpthread_attr_setschedparam(pthread_attr_t*attr,conststructsched_param*param); intpthread_attr_getschedparam(constpthread_attr_t*attr,structsch
3、ed_param*param);param.sched_priority=51;//設(shè)置優(yōu)先級(jí)系統(tǒng)創(chuàng)建線程時(shí),默認(rèn)的線程是SCHED_OTHER。所以如果我們要改變線程的調(diào)度策略的話,可以通過下面的這個(gè)函數(shù)實(shí)現(xiàn)。intpthread_attr_setschedpolicy(pthread_attr_t*attr,intpolicy);上面的param使用了下面的這個(gè)數(shù)據(jù)結(jié)構(gòu):structsched_param{int__sched_priority;//所要設(shè)定的線程優(yōu)先級(jí)};我們可以通過下面的測(cè)試程序來說明,我們自己使用的系統(tǒng)的支持的優(yōu)先級(jí):
4、#include#include#include#includestaticintget_thread_policy(pthread_attr_t*attr){intpolicy;intrs=pthread_attr_getschedpolicy(attr,&policy);assert(rs==0);switch(policy){caseSCHED_FIFO:printf("policy=SCHED_FIFO");break;caseSCHED_RR:print
5、f("policy=SCHED_RR");break;caseSCHED_OTHER:printf("policy=SCHED_OTHER");break;default:printf("policy=UNKNOWN");break;}returnpolicy;}staticvoidshow_thread_priority(pthread_attr_t*attr,intpolicy){intpriority=sched_get_priority_max(policy);assert(priority!=-1);printf("max_p
6、riority=%d",priority);priority=sched_get_priority_min(policy);assert(priority!=-1);printf("min_priority=%d",priority);}staticintget_thread_priority(pthread_attr_t*attr){structsched_paramparam;intrs=pthread_attr_getschedparam(attr,¶m);assert(rs==0);printf("priority=%d
7、",param.__sched_priority);returnparam.__sched_priority;}staticvoidset_thread_policy(pthread_attr_t*attr,intpolicy){intrs=pthread_attr_setschedpolicy(attr,policy);assert(rs==0);get_thread_policy(attr);}intmain(void){pthread_attr_tattr;structsched_paramsched;intrs;rs=pthread_a
8、ttr_init(&attr);assert(rs==0);intpolicy=get_thread_policy(&attr);printf("Sh